2013-09-24 74 views
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; 
} 

回答

1

你沒有告訴你如何倍增你的矩陣,但對你的描述,它似乎它可能是做錯了什麼。務必在此爲了做到:

MVP = projectionMat4 * viewMat4 * modelMat4; 

修訂

尋找更仔細地到你的代碼,它似乎您缺少一個乘法concanate您的轉換:

modelMat4 = glm::translate(modelMat4, 0.0f, 0.0f, 200.f); 
modelMat4 *= glm::scale(modelMat4, 200.0f, 200.0f, 200.0f); // <-- here 

所以,modelMat4將會是一個縮放和翻譯的結果

+0

我用頂點着色器代碼更新了我的問題。 –

+0

modelMat4被傳遞給'glm :: translate'和'glm :: scale'。所以不需要繁殖。 –