我在3D场景中旋转了三个立方体。我想要实现的是计算被按下的立方体中的哪一个(如果有的话)。
我想我理解gluUnproject是如何工作的,我只需要运行两次gluUnproject,一次用于近平面,一次用于远处平面等等。我唯一的问题是了解使用哪个modelView。
功能原型看起来像这样(我正在为Android开发):
public static int gluUnProject (float winX, float winY, float winZ,
float[] model, int modelOffset,
float[] project, int projectOffset,
int[] view, int viewOffset,
float[] obj, int objOffset)
我不明白的是我应该在第四个参数中使用的modelView矩阵。我是否必须使用每个立方体的modelView矩阵为每个立方体计算一次光线?
答案 0 :(得分:0)
我是否必须使用每个立方体的modelView矩阵为每个立方体计算一次光线?
这实际上取决于你要测试射线的内容。如果你想在它自己的局部坐标系中测试每个立方体的光线(即在本地坐标中以0,0,0为中心的立方体)那么,是的,你必须取消对每个立方体的投影(说实话,如果这是你想要的要做,你应该研究Plücker coordinates,这在很大程度上简化了这种测试;但是你应该使用Plücker坐标进行射线交叉测试。
如果要对世界坐标中的几何进行测试,则在应用单个模型转换之前,在构建模型视图时,即在视图转换之后到达世界舞台时,需要模型视图矩阵。