我有一个场景图,其中包含变换和边界框的节点,以及我从viewProjection矩阵构建每个帧的视锥体。但是,这些框在框的局部空间中有4个顶点的坐标我必须把它们变成什么样才能让它们进入与视锥体相同的空间,这样我就可以检查与视锥体的交点?我试着将它们带入世界空间,但这很奇怪,因为我有50个世界矩阵(我使用实例化,每个实例都有自己的世界/变换矩阵)
答案 0 :(得分:0)
通常你想在单词空间中碰撞BB和视锥。原始算法:
mtxViewProjTranspose = MtxTranspose(mtxView * mtxProj);
frustumViewWorld = frustumView * mtxViewProjTranspose;
foreach(i)
{
bbWorld[i] = bb[i] * mtxWorld;
bCull[i] = collide(BBWorld[i], frustumViewWorld );
}
你也可以在视野中做到这一点(但不太好):
mtxProjTranspose = MtxTranspose(mtxProj);
frustumViewViewSpace = frustumView * mtxProjTranspose;
foreach(i)
{
bbView[i] = bb[i] * mtxWorld[i] * mtxView; // More calculations here
bCull[i] = collide(bbView[i], frustumViewViewSpace );
}
如果你认为将边界框(4个顶点)转换为世界空间是很奇怪的,那么想想在网格本身中有数千个顶点这样做有多奇怪。 =)据我所知,碰撞检测远比这个简单的乘法更昂贵。但是:
希望有所帮助!