背面剔除的数学原理
来源:互联网 发布:2016淘宝前十名店铺 编辑:程序博客网 时间:2024/05/02 00:55
按我自己的理解,对于左手坐标系,顺时针排列的顶点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的顺序未定 需要进行预先假设才可得出楼主的结论
- 背面剔除的数学原理
- 关于背面剔除的概念。
- 多边形背面剔除
- D3DRS_CULLMODE(背面剔除)
- OpenGL背面剔除
- 5.10.2 背面剔除
- 软渲染-背面剔除
- DX中关于背面剔除概念的澄清!
- DX中关于背面剔除概念的澄清!
- DX中关于背面剔除概念的澄清!
- 应该记住的基本流程及其函数、背面剔除
- DirectX backface culling(背面剔除)
- C# Managed DirectX 背面剔除
- DirectX backface culling(背面剔除)
- DirectX backface culling(背面剔除)
- 3D数学 学习笔记(10) 背面剔除(Clipping)、裁切(Backface Culling)、光栅化(Rasterzation)
- 第三章 第六节 背面剔除
- C# 模拟光照运算以及背面剔除
- android wifi
- CSS3无图片实现华丽折页菜单效果(多浏览器兼容)
- JavaScript格式化数字显示格式
- history管理机制
- 基于kexec的崩溃转储机制
- 背面剔除的数学原理
- 让eval()全局作用域执行的方法深入研究
- linux下的USB设备驱动程序
- html5 canvas的clearRect
- 基于S3C2440的嵌入式Linux驱动——DS18B20温度传感器(添加使用platform总线机制)
- 给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
- win7下安装ORACLE10g报错 未知错误
- socket linux 移植到solaris
- 如何查看同一服务器上挂有多少个网站