1 是,用阈值。根据模型精度定的阈值,数值精度一般用很多位;模型精度10分之1毫米。
2 数学真正的共面就用数学的方法解出来。程序的精度就是小于阈值,就真正的共面。
3 程序就把4个点视为共面了,然后给他们组成的“四边形”明明一个名称来标记这个面,那么这个面的法向量怎么取?—— 这里指的是哪个程序?程序没有这么傻,如果有也是程序员傻(笑)。一般图形程序定义一个面,就是选一个点和一个法向就行了。叫它CPlane。内部计算时,就是平面公式,Ax + By +Cz =d。判断多点共面,取三点构造CPlane,判断其他点到平面的距离就可以。
4 有了平面,定义四边形,要在CPlane上取四点。
5 有了四边形,才渲染四边形。OpenGL可以直接渲染四边形。否则就拆成两个三角形。否则就拆成四个顶点。这里注意不是渲染四边形,让它看起来平。而是先有四边形,才渲染。
6 要考虑的,是四边形显示在屏幕上,要将顶点投影到显示器屏幕上(OpenGL叫摄像机和投影面)。当你转到侧面,四边形在屏幕上变成一条线。显然四个顶点投影后重合了。
7 “使其看起来像一个面”,就是使四边形看起来像一个面。是伪问题。正面的时候,就是填充顶点间的区域。在800x600的屏幕上,大家都关心的是顶点间连线有无锯齿。不会关心平面是不是平(笑)。
我也是粗浅的理解。请大神补充纠正。
【 在 seeeU 的大作中提到: 】
: 谢谢
: 但是存储的位置坐标都是浮点值,实际在程序里算出来两个向量都是float格式,数值是近似出来的,可能在数学上不一定完全平行吧?可能会差一点点。会有这种情况吗?这时候如何处理呢,只要是二者叉积结果小于一定的阈值就判定是平行的?前面 @sjtuDNA 也这样说过。
: 那么问题又来了:如果是要通过一个小的阈值来判断的话,那程序实际是无法区分两个三角形是真正完全共面的,还是说二者间有一个非常非常小的角度,因为两种情况下都会使得两个法向量的叉乘结果小于这个很小的阈值。那么是否能说实际工程角度而言,其实是无法真正判断数学上的共面是否确实为真(除非这n个点的x、y、z三分量中的某一个分量数值完全相等)。
: ...................
--
修改:DoorWay FROM 1.86.63.*
FROM 1.86.63.*