最近学习MC表面绘制,对于开始对于CG方面的一些知识不是很明白,搞的一头雾水,于是就零零碎碎参考一些网上的程序来学习。
主要参考的有3d med 的手册,网上的一些程序,如http://paulbourke.net/geometry/polygonise/ 以及跟踪VTK源代码,还有这个
http://www.cg.tuwien.ac.at/courses/Visualisierung/2001-2002/Ergebnisse/Beispiel1/TrenkwalderM/march/doc/march/#code
但是在阅读的时候产生的两个疑惑,表示怎么算出来的,看了书上的不是很明白,另一个问题是得到的三角面片怎么绘制图形的(这个问题有点囧)
第一个问题后来想明白了,如果我们使用下面对于立方体编号的话
那么edgeTable[1]=edgeTable[00000001]=0001 0000 1001=0x109
edgeTable[2]=edgeTable[00000010]=0010 0000 0011=0x203
edgeTable[3]=edgeTable[00000011]=0011 0000 1010=0x30a
下面一次类推
相应的:
TriTable[1][16]={0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
TriTable[2][16]={0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
依次类推
这里需要说明两点:
第一,TriTable为什么使用16个元素,因为最多情况下得到为5个三角形
第二, TriTable中楞的标示顺序要始终沿着一个方向,如逆时针方向
说道第二问题其实对于懂图形学的人估计会笑话,开始以为一个个绘制三角面片效率会很低,不会是这样的
后来发现正是这样的,不过这里可以使用OpenGL中批量绘制的方法,OpenGL编程指南中有说