0
我有一個以0,0,0爲中心定義的立方體,其邊緣伸出到-1/+ 1(即立方體的寬度,高度,深度均爲2)。如何在模型/視圖/世界空間中定位對象?
我然後設置以下矩陣:
glm::mat4 modelMat4;
modelMat4 = glm::translate(modelMat4, 0.0f, 0.0f, 200.f);
modelMat4 = glm::scale(modelMat4, 200.0f, 200.0f, 200.0f);
glm::mat4 viewMat4;
viewMat4 = glm::lookAt(glm::vec3(0.0f, 0.0f, zNear),
glm::vec3(0.0f, 0.0f, zFar),
glm::vec3(0.0f, 1.0f, 0.0f));
// initialWidth = window width
// initialHeight = window height
// zNear = 1.0f
// zFar = 1000.0f
glm::mat4 projectionMat4;
projectionMat4 = glm::frustum(-initialWidth/2.0f, initialWidth/2.0f, -initialHeight/2.0f, initialHeight/2.0f, zNear, zFar);
但我的對象中間出現在近z平面(即我只能看到我的立方體的後半段,從內)。
如果我調整模型轉換爲:
glm::translate(modelMat4, 0.0f, 0.0f, 204.f);
然後,我可以看到我的立方體的正面爲好。
如果我改變模型轉換爲:
glm::translate(modelMat4, 0.0f, 0.0f, 250.f);
然後立方僅rasterises在大約2x2x2的像素。
我對模型,視圖投影矩陣有什麼誤解?我期待轉換是線性的,但z平面在200到250之間消失。即使平面定義在1.0f和1000.0f之間。
編輯:我的着色器代碼如下:
#version 100
layout(location = 0) in vec3 v_Position;
layout(location = 1) in vec4 v_Colour;
layout(location = 2) uniform mat4 v_ModelMatrix;
layout(location = 3) uniform mat4 v_ViewMatrix;
layout(location = 4) uniform mat4 v_ProjectionMatrix;
out vec4 f_inColour;
void main()
{
gl_Position = v_ProjectionMatrix * v_ViewMatrix * v_ModelMatrix * vec4(v_Position, 1.0);
f_inColour = v_Colour;
}
我用頂點着色器代碼更新了我的問題。 –
modelMat4被傳遞給'glm :: translate'和'glm :: scale'。所以不需要繁殖。 –