首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

测试判断物体在摄影机的可见性的函数

2013-01-11 
测试判断物体在摄像机的可见性的函数以下是书上的一段代码,是测试测试判断立方体在摄像机的可见性的函数六

测试判断物体在摄像机的可见性的函数

以下是书上的一段代码,是测试测试判断立方体在摄像机的可见性的函数
六个面试摄像机椎体的六个面

bool CXCamera::TestCube(float XCenter, float YCenter, float ZCenter,
float Size)
{
for(short Counter = 0; Counter < 6; Counter++)
{
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter - Size, YCenter - Size,
ZCenter - Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter + Size, YCenter - Size,
ZCenter - Size)) >= 0.0f)
continue;
232 Chapter 8: Cameras — First-Person and More
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter - Size, YCenter + Size,
ZCenter - Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter + Size, YCenter + Size,
ZCenter - Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter - Size, YCenter - Size,
ZCenter + Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter + Size, YCenter - Size,
ZCenter + Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter - Size, YCenter + Size,
ZCenter + Size)) >= 0.0f)
continue;
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter + Size, YCenter + Size,
ZCenter + Size)) >= 0.0f)
continue;
return false;
}
return true;
}

以上各个面都测试if(D3DXPlaneDotCoord(&m_Planes[Counter],&D3DXVECTOR3(XCenter - Size, YCenter - Size,ZCenter - Size)) >= 0.0f) ,不太明白为什么每个都要大于0,其中的几何意义是什么?望大虾赐教。。。越详细越好。

测试球体的时候,又是如下
bool CXCamera::TestSphere(float XCenter, float YCenter, float ZCenter,
float Radius)
{
for(short Counter = 0; Counter < 6; Counter++)
{
if(D3DXPlaneDotCoord(&m_Planes[Counter],
&D3DXVECTOR3(XCenter, YCenter, ZCenter))
< -Radius)
return false;
}
return true;
}
有测试if(D3DXPlaneDotCoord(&m_Planes[Counter],&D3DXVECTOR3(XCenter, YCenter, ZCenter))< -Radius)对比两个函数越看越不明白了。

望大虾赐教
[解决办法]
原理很简单啊,就是当球体的球心到6个面的距离大于球体的半径时(具体看你如何定),球体在视锥体外,可以不用渲染,否则可能完全在视锥体内或者部份在视锥内
[解决办法]
if(D3DXPlaneDotCoord(&m_Planes[Counter],&D3DXVECTOR3(XCenter - Size, YCenter - Size,ZCenter - Size)) >= 0.0f) 这个是测试点D3DXVECTOR3(XCenter - Size, YCenter - Size,ZCenter - Size)是否在平面的正法线一侧

立方体是测试八个顶点是否都在平面的正侧 下面那个球面测试就没看懂

lz可以参考一下空间解析几何的平面方程,了解一下其性质,就好理解了
[解决办法]
现在想明白了,球面测试原理是这样的,就是测试当前点&D3DXVECTOR3(XCenter, YCenter, ZCenter) 到平面的距离是否大于半径Radius

热点排行