1
我正在轉換一些舊軟件以支持OpenGL。 DirectX和OpenGL具有不同的座標系(OpenGL是正確的,DirectX是左邊的)。我知道,在舊的固定管道的功能,我會用:OpenGL/GLM - 切換座標系方向
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座標。我也嘗試乘以各種矩陣和矢量的逆並將相機矩陣乘以一個縮放矢量。
我顛倒了繞組,沒有運氣。它將「內部」區域變成「外部」區域,反之亦然。你有沒有能夠使用GLM或着色器正確反轉深度範圍的代碼?這就是我所追求的。 – 2012-08-03 23:19:32
當然,只是在對角線上有1,1,2,1和在偏移列中有0,0,-1的矩陣「左乘」到您在DirectX中使用的投影矩陣。除此之外,請使用完全相同的矩陣!如果你在GL中使用glm並在DX中使用DirectX助手,那麼你可能只是在做一些不同的事情。 – ltjax 2012-08-03 23:25:56
這似乎有效。現在我還有一個問題。應該對我的觀點進行什麼樣的改變?它不再正常工作。 – 2012-08-03 23:40:19