2009-09-10 189 views
1

我移植1-1在C這個代碼++/OpenGL的,以C#SharpGL:SharpGL瘋狂

float[] cameraAngle = { 0, 0, 0 }; 
     float[] cameraPosition = { 0, 0, 10 }; 
     float[] modelPosition = { 0, 0, 0 }; 
     float[] modelAngle = { 0, 0, 0 }; 

     float[] matrixView = new float[16]; 
     float[] matrixModel = new float[16]; 
     float[] matrixModelView = new float[16]; 

     // clear buffer 
     gl.ClearColor(0.1f, 0.1f, 0.1f, 1); 
     gl.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT | OpenGL.STENCIL_BUFFER_BIT); 

     // initialze ModelView matrix 
     gl.PushMatrix(); 
     gl.LoadIdentity(); 

     // ModelView matrix is product of viewing matrix and modeling matrix 
     // ModelView_M = View_M * Model_M 
     // First, transform the camera (viewing matrix) from world space to eye space 
     // Notice all values are negated, because we move the whole scene with the 
     // inverse of camera transform 
     gl.Rotate(-cameraAngle[0], 1, 0, 0); // pitch 
     gl.Rotate(-cameraAngle[1], 0, 1, 0); // heading 
     gl.Rotate(-cameraAngle[2], 0, 0, 1); // roll 
     gl.Translate(-cameraPosition[0], -cameraPosition[1], -cameraPosition[2]); 

     // we have set viewing matrix upto this point. (Matrix from world space to eye space) 
     // save the view matrix only 
     gl.GetFloat(OpenGL.MODELVIEW_MATRIX, matrixView); // save viewing matrix 
     //========================================================================= 
     // always Draw the grid at the origin (before any modeling transform) 
     //DrawGrid(10, 1); 

     // In order to get the modeling matrix only, reset OpenGL.MODELVIEW matrix 
     gl.LoadIdentity(); 

     // transform the object 
     // From now, all transform will be for modeling matrix only. (transform from object space to world space) 
     gl.Translate(modelPosition[0], modelPosition[1], modelPosition[2]); 
     gl.Rotate(modelAngle[0], 1, 0, 0); 
     gl.Rotate(modelAngle[1], 0, 1, 0); 
     gl.Rotate(modelAngle[2], 0, 0, 1); 

     // save modeling matrix 
     gl.GetFloat(OpenGL.MODELVIEW_MATRIX, matrixModel); 
     //========================================================================= 
     // re-strore OpenGL.MODELVIEW matrix by multiplying matrixView and matrixModel before drawing the object 
     // ModelView_M = View_M * Model_M 
     gl.LoadMatrixf(matrixView);    // Mmv = Mv 
     gl.MultMatrixf(matrixModel);    // Mmv *= Mm 

     // save ModelView matrix 
     gl.GetFloat(OpenGL.MODELVIEW_MATRIX, matrixModelView); 
     //========================================================================= 

     // Draw a teapot after ModelView transform 
     // v' = Mmv * v 
     //DrawAxis(4); 
     //DrawTeapot(); 

     gl.PopMatrix(); 

它看起來並不像模型視圖矩陣得到相乘,結果是單位矩陣!

什麼可能是錯誤的?

謝謝

+0

結果是什麼?哪裏?什麼時候?我不明白這個問題。代碼推送一個矩陣,做一些事情,然後彈出它。 – user61405 2009-09-13 14:04:38

回答

3

glMatrixMode錯了?

+0

+1:大聲笑! – Rekin 2011-01-08 21:43:35