我有通常的立方体(-1,-1,-1到1,1,1)和我的相机矩阵(视图和投影)。 投影矩阵是一个透视投影。 我想看看哪个区域从给定的相机可见。为了想象我想像锥体一样伸展我的立方体,以便我可以看到其他相机的结果。得到作为世界坐标的视锥体
我爱迪尔:
得到viewProjectionMatrix的逆繁衍我cubecoordinate它:
glm::vec4 CubeCoordinates[8]{
glm::vec4(-1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, -1.0f, -1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, -1.0f, 1.0f) };
glm::mat4 InvertedViewProjectionMatrix = glm::inverse(refCamera.GetViewProjectionMatrix());
for (uint32_t i = 0; i < 8; ++i)
{
CameraEdgesWorldSpace[i] = InvertedViewProjectionMatrix * CubeCoordinates[i];
}
现在cubecoordinates应该在世界空间,看起来像圆台。 但outcomming坐标是错误的。
我可以保证,viewProjectionMatrix是正确的工作,因为我喜欢到处使用它。
计算错了吗?或者我使用错误的命令来颠倒矩阵(我是GLM的新手)?
您错过了视角鸿沟。在投影(或反向投影)之后,w坐标不再是1。 – BDL
所以我只需要用w来区分呢? – Thomas
是的。如果这没有帮助,请添加一个示例,显示相机矩阵中的值以及分割后的结果向量。 – BDL