我正在转换一些旧软件以支持 OpenGL。DirectX 和 OpenGL 有不同的坐标系(OpenGL 在右边,DirectX 在左边)。我知道在旧的固定管道功能中,我会使用:
glScalef(1.0f, 1.0f, -1.0f);
这一次,我正在使用 GLM 和着色器,需要一个兼容的解决方案。我尝试将我的相机矩阵乘以缩放向量,但没有成功。
这是我的相机设置:
// Calculate the direction, right and up vectors
direction = glm::vec3(cos(anglePitch) * sin(angleYaw), sin(anglePitch), cos(anglePitch) * cos(angleYaw));
right = glm::vec3(sin(angleYaw - 3.14f/2.0f), 0, cos(angleYaw - 3.14f/2.0f));
up = glm::cross(right, direction);
// Update our camera matrix, projection matrix and combine them into my view matrix
cameraMatrix = glm::lookAt(position, position+direction, up);
projectionMatrix = glm::perspective(50.0f, 4.0f / 3.0f, 0.1f, 1000.f);
viewMatrix = projectionMatrix * cameraMatrix;
我尝试了很多方法,包括反转向量和反转着色器中的 z 坐标。我还尝试乘以各种矩阵和向量的逆,并将相机矩阵乘以缩放向量。