古いソフトウェアを 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 座標を逆にしたりするなど、さまざまなことを試しました。また、さまざまな行列とベクトルの逆数を掛けて、カメラ行列にスケーリング ベクトルを掛けてみました。