2014-07-01 183 views
0

我試圖創建一個模型視圖投影矩陣爲我着色器像這樣創建ModelViewProjection矩陣:我掙扎在OpenTK

我得到的矩陣相機翻譯:

public Matrix4 GetMatrix() 
{ 
    return Matrix4.LookAt(Position, LookingAt, Vector3.UnitY); 
} 

Postition是相機的當前位置,LookingAt是相機的目標。

現在我assmbling爲着色器中的最終矩陣和傳遞:

Matrix4 cameraMatrix = camera.GetMatrix(); 
Matrix4 mvprojectionMatrix = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI/4, 16f/9f, 1f, 30f) * cameraMatrix; 

GL.UniformMatrix4(mvprojectionMatrixAttribute, false, ref mvprojectionMatrix); 

這是頂點着色器(穿過)

[着色頂點]

#version 150 core 
in vec3 pos; 
in vec3 color; 
uniform float time; 
uniform vec3 offset; 
uniform mat4 cameraView; 
uniform mat4 projection; 


out float vTime; 
out vec3 vColor; 
out mat4 vProjection; 
void main() { 
    gl_Position = vec4(pos, 1.0); 
    vColor = color; 
    vTime = time; 
    vProjection = projection; 
} 

我將它傳遞給幾何着色器,我使用它們來定位頂點:

void makeVertex(vec3 shift, mat4 rotation) 
{ 
    gl_Position = (gl_in[0].gl_Position + vec4(shift, 0.0) * rotation) * vProjection[0]; 
    EmitVertex(); 
} 

旋轉矩陣只是頂點的局部旋轉。 vProjection [0]來自頂點着色器...

不知何故,如果相機移動,東西會快速離開視錐體,但實際視圖不會移動。所以我假設模型視圖矩陣是錯誤的(不從照相機轉換到世界空間)。但我不確定如何創建正確的矩陣。

任何提示?謝謝。

+0

這似乎並不合適。在你的C#代碼中,你建立了一個模型視圖投影矩陣,並用它來設置一個統一的值。但是,然後你的頂點着色器聲明單獨的'cameraView'和'projection'矩陣。哪裏'cameraView'從不使用。你確定這是一組一致的代碼嗎? –

+0

是的,我以前都使用過,現在我只是用C#將它們相乘。所以是的,其中一個是未使用的。 – pixartist

回答

1

我把這些矩陣按錯誤的順序相乘。