2015-07-03 67 views
0

我一直在關注C++ OpenGL Matrices Tutorial並試圖將其轉換爲C#OpenTK,而不使用MVP矩陣我在屏幕上繪製了一個紅色三角形,但每當我嘗試使用它時,我都得不到任何繪圖或至少看不出任何內容,不管我在哪裏放置相機。OpenTK - 模型視圖投影問題

有下面的代碼片段,但你可以查看整個source code here

這是C#代碼來構建MVP矩陣

/Attempt to build our model view projection matrix 

//We use an Identity matrix for the model 
Matrix4 _model = Matrix4.Identity; 

Matrix4 _projection = Matrix4.CreatePerspectiveFieldOfView(1.0f, 4.0f/3.0f, 0.1f, 100.0f); 

//Camera will be as 4,3,3 looking at origin, and set up direction to 1 
Matrix4 _view = Matrix4.LookAt(new Vector3(4,3,3), new Vector3(0,0,0), new Vector3(0,1,0)); 

//combine into our model view projection 
Matrix4 _model_view_projection = _projection * _view * _model; 

然後我們通過這個矩陣到頂點着色器,該vPosition元素從C#代碼

#version 330 

uniform mat4 viewProjection; 

in vec3 vPosition; 

void main() 
{ 
    //This line doesn't work 
    gl_Position = viewProjection * vec4(vPosition, 1); 

    //This line works 
    //gl_Position = vec4(vPosition, 1); 
} 
+0

如何將矩陣傳遞給着色器?有時最好將它們一個接一個地傳遞,並將它們結合到頂點着色器中 – greedsin

+0

而且您的視圖矩陣的角度爲1,您可以將其設置在45和60之間 – greedsin

+0

@ lolio會嘗試。另外,fov參數以弧度表示,所以1.0f大致爲60度 –

回答

1

錯誤代碼通過VEC 3個頂點:

Matrix4 _model_view_projection = _projection * _view * _model; 

必須是:

Matrix4 _model_view_projection = _model * _view * _projection; 
// For OpenTK, Pencil.Gaming ... 

這是因爲OpenTK使用行爲主的矩陣(它們是移位的)。在C#中,你必須以這種方式乘以矩陣(不在着色器中)。