我正在渲染一个有8个顶点的立方体。当我旋转或靠近立方体时,一些顶点可能被近剪裁平面剪切。但是,由于某些原因,在我的问题中,我需要找到立方体边缘与近剪裁平面的交点。我知道点数可能会有所不同。所以我想到的是获得近剪裁平面(可能在眼睛空间 - 但是如何?)并对矩阵进行一些反演计算以获得立方体对象空间中的坐标,然后我可以找到交叉点并解决我的问题。但这里的问题是:
测试:
作为测试,看看我是否能正确获得坐标,我试过这个: 我试图做的是得到MVM(ModelView Matrix)和PM(Projection Matrix)的逆。并试图想象具有V1 =( - 1,-1,-1,1),V2 =(1,-1,-1,1),V3 =(1,1,-1,1)的近剪裁平面,和V4 =(-1,1,-1,1)坐标。所以我在考虑是否为四个顶点中的每一个执行此操作:
V1 = IMVM *(IPM * V1);
V2 = IMVM *(IPM * V2);
V3 = IMVM *(IPM * V3);
V4 = IMVM *(IPM * V4);
其中IMVM是模型 - 视图矩阵的逆,而IPM是投影矩阵的逆。 然后当我用当前加载的矩阵渲染这四个点时(我刚刚使用了它的倒数),我应该在屏幕前面得到一个直立的方格,因为我的逆乘法应该已经被openGL当前加载矩阵的乘法取消了。但由于某种原因,它不起作用,我尝试转置和正常。我注意到专栏专业等等。但它似乎不起作用而不是得到一个仍然suqare(代表我的近剪裁平面)我得到一个不断移动和跳跃的飞机!!
答案 0 :(得分:0)
看来我在这个论坛上的所有问题都将由我自己解答!首先考虑之后,我意识到我们不需要投影矩阵的逆。我们在相机空间中指定点并将它们带回到物体空间,我们只需要模型视图矩阵的逆。
与往常一样会导致您失误,我的矢量矩阵乘法计算中存在逻辑错误。当我用在线矩阵计算器进行双重检查时,我意识到我的第一个元素是正确的,但其余元素是不正确的。那就是当我发现我将结果存储在我乘以的相同矩阵中时,我只是改变了原始矩阵。所以我只为结果添加了一个新矩阵,一切正常。基本上我指定了一个点,然后将它乘以模型 - 视图矩阵的倒数,得到对象空间坐标中的点。