Muli3D <5> 判断点与面的关系
来源:互联网 发布:windows 禁止卸载软件 编辑:程序博客网 时间:2024/05/16 05:25
记录一下:
点与面的关系如图:
如果法相量是单位向量的话,那么分母为1
所以,当 平面的法向量是单位向量的话,看一个点与平面的关系的公司就是分子:
Ax0 + By0 + Cz0 + D
在Muli3D 中,看到下面的代码
inline float32 plane::operator *( const vector3 &i_vVal ) const{return fVector3Dot( normal, i_vVal ) + d;}inline float32 plane::operator *( const vector4 &i_vVal ) const{return fVector3Dot( normal, (vector3)i_vVal ) + d * i_vVal.w;}
第一个函数就比较好理解,直接就是上面的数学推导。
对于第二个函数,考虑的点的坐标是齐次坐标,
下面进行推导下,
得到的就是 点的坐标就是 (x, y, z, w) => ( x / w , y / w, z / w, 1)
所以:
PQ 点积 n 得到,n 是单位向量的情况下,公式是
A ( x0/w0 - x) + B (y0/w0 - y) + C (z0/w0 - z)
=>
A ( x0 - w0x) + B (y0 - w0y) + C (z0 - w0z) / w0
=>
( Ax0 + By0 + Cz0 + w0 * (Ax + By + Cz)) / w0
=>
( fVector3Dot( normal, (vector3)i_vVal ) + d * i_vVal.w ) / i_vVal.w
对比代码,上面的公式多了 / i_vVal.w,
个人理解:
因为向量的w分量大多数情况下都是为1的,只有在经过了投影矩阵变换后,w才不为1,在Muli3D中,投影矩阵类似于Dx的投影矩阵,所以,经过投影变换之后的w > 0,
所以,代码中只用了分子来判断点与面的关系,只要是 > 0 的话,就是在面的正面区域,只要是 < 0 的话,就是在面的背面区域。
下面是Muli3D的投影矩阵代码:
matrix44 &matMatrix44PerspectiveFovLH( matrix44 &o_matMatOut, const float32 i_fFOVY, const float32 i_fAspect, const float32 i_fZNear, const float32 i_fZFar ){const float32 fViewSpaceHeight = 1.0f / tanf( i_fFOVY * 0.5f );const float32 fViewSpaceWidth = fViewSpaceHeight / i_fAspect;o_matMatOut._11 = fViewSpaceWidth; o_matMatOut._12 = 0.0f; o_matMatOut._13 = 0.0f; o_matMatOut._14 = 0.0f;o_matMatOut._21 = 0.0f; o_matMatOut._22 = fViewSpaceHeight; o_matMatOut._23 = 0.0f; o_matMatOut._24 = 0.0f;o_matMatOut._31 = 0.0f; o_matMatOut._32 = 0.0f; o_matMatOut._33 = i_fZFar / ( i_fZFar - i_fZNear ); o_matMatOut._34 = 1.0f;o_matMatOut._41 = 0.0f; o_matMatOut._42 = 0.0f; o_matMatOut._43 = -i_fZNear * i_fZFar / ( i_fZFar - i_fZNear ); o_matMatOut._44 = 0.0f;return o_matMatOut;}
0 0
- Muli3D <5> 判断点与面的关系
- Muli3D <7> 判断Ray与Sphere的关系
- 判断点与菱形的关系
- 判断点与多边形的位置关系
- 判断点与多边形的位置关系
- 判断一个点与圆的关系
- room [判断点与线的关系]
- 判断三角形与点的关系的一种实现
- 判断点与多边形位置关系的算法
- 地图上点与多边形的关系判断
- POJ1569 Myacm Triangles 判断点与三角形的关系
- POJ2318 叉积判断点与直线的关系
- 几种判断点与多边形关系的算法介绍
- 判断点与多边形的关系(2):面积法
- 判断点与多边形的关系(4):射线法
- 判断点与多边形位置关系算法
- 两个几何谓词判断(predicates)的原理:点与直线的关系&点与圆的关系
- 第11周-项目4-点、圆的关系-判断点p与圆的位置关系
- 如何快速搭建运营级的网络直播平台
- Android中解析JSON格式数据常见方法合集
- 用编译器写的mov ax,[0]指令,执行的实际上是mov ax,0
- PHP单元测试利器:PHPUNIT初探(一)
- 【Java8】Guava——Joiner
- Muli3D <5> 判断点与面的关系
- JAVA求学之路第十六天(异常&递归)
- 如何在Idea中获取git上的源程序
- Java多线程,Thread和Runnable究竟该用哪个
- 用C++提取Linux内存的使用率
- Dubbo请求响应解析
- WebApplicationContext : org.springframework.web.context.ContextLoaderListener作用
- 【OpenCV】显示HSV模型中H分量的颜色直方图
- iOS关于三目运算符