我正在渲染一个有 8 个顶点的立方体。当我旋转或靠近立方体时,一些顶点可能会被近剪裁平面剪裁。但是,出于某种原因,在我的问题中,我需要找到立方体边缘与近剪裁平面的交点。我知道点数可能会有所不同。所以我想的是获得近剪裁平面(可能在眼睛空间 - 但如何?)并对矩阵进行一些逆计算以获得我的立方体对象空间中的坐标,然后我可以找到交叉点并解决我的问题。但这里的问题是:
- 如何获得近剪裁平面每个角的坐标?(或平面方程系数)
- 如何返回对象空间?
测试:
作为一个测试,看看我是否能正确获得坐标,我尝试了这个:我试图做的是获得 MVM(模型视图矩阵)和 PM(投影矩阵)的倒数。并试图想象具有 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(代表我的近剪裁平面)我得到一个不断移动和跳跃的飞机!