【发布时间】:2017-12-21 23:03:46
【问题描述】:
我有通常的立方体(-1、-1、-1 到 1、1、1)和我的相机矩阵(视图和投影)。 投影矩阵是透视投影。 我想看看从给定的相机中可以看到哪个区域。想象一下我想像平截头体一样拉伸我的立方体,这样我就可以看到其他相机的结果。
我的想法:
获取 viewProjectionMatrix 的倒数并将单位立方体坐标与它相乘:
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];
}
现在立方体坐标应该在世界空间中并且看起来像平截头体。 但是输出的坐标是错误的。
我可以保证 viewProjectionMatrix 工作正常,因为我在任何地方都使用它。
计算错了吗?还是我使用了错误的命令来反转矩阵(我是 GLM 新手)?
【问题讨论】:
-
您错过了透视划分。在投影(或逆投影)之后,w 坐标将不再为 1。
-
所以我只需要除以 w 吗?
-
是的。如果这没有帮助,请添加一个示例,显示相机矩阵中的值以及除法后的结果向量。
-
我测试过,是的,除以 w 分量是正确的;)非常感谢!