按我自己的理解,对于左手坐标系,顺时针排列的顶点v0,v1,v2
Vector3 V01 = V1.position-V0.position;
Vector3 V02 = V2.position-V0.position;
V02.x * V01.y - V01.x * V02.y < 0 背面
V02.x * V01.y - V01.x * V02.y > 0 正面
V02.x * V01.y - V01.x * V02.y = 0 投影成一条线了,画还是不画这样的情况就看你喜好了
以下文章转自 http://bbs.9ria.com/thread-9211-1-1.html 关于背面剔除的原理讨论。
以下进行完整数学演算
在透视坐标系中
设 v1为点A->C的向量,即(cax,cay);
v2为点C->B的向量,即(bcx,bcy);
将其转为相机坐标系,齐次化v1,v2
v1(cax,cay,1)
v2(bcx,bcy,1)
这里 看这里 问题来 是v1Xv2 还是v2Xv1,这就是楼上产生时针疑问的源头
v1Xv2=(cay-bcy,bcx-cax,cax*bcy-bcx*cay)
v2Xv1=(bcy-cay,-bcx+cax,bcx*cay-cax*bcy)
根据楼主最后返回值的定义
我暂时选择v2Xv1
经过叉积计算得到面法线n
n(bcy-cay,-bcx+cax,bcx*cay-cax*bcy)
计算v1v2所在面法线与屏幕法线(即光线)的点积是否小于0
假设有两条屏幕法线 n1(x,y,z) n2(0,0,1)
其中n1是观察者向量
由于屏幕法线为无数条与z轴平行的向量,根据平行向量的性质,任一组平行向量都可移到同一直线上,
那么,计算n1与n的夹角时
n1等价于(0,0,1);
那么n.n1=(bcy-cay,-bcx+cax,bcx*cay-cax*bcy)(0,0,1)=bcx*cay-cax*bcy
如果n.n1>0 则为显示面 如果n.n1<0则为消隐面
即
bcx*cay>cax*bcy 为显示面
bcx*cay<cax*bcy 为消隐面
综上 消隐面判断与顺时针 逆时针并无关系
造成此问题的原因是ABC的顺序未定 需要进行预先假设才可得出楼主的结论