2011-12-19 162 views
1

我正在使用openTk開發我的第一個項目。我正在爲3D模型旋轉創建虛擬圓球。它工作正常,但我需要添加不會隨着模型旋轉的圓。這個圓圈應該可視化弧球。 我的代碼來實現順序爲:OpenTK圓圈旋轉

private void SetCamera() 
{ 
    GL.MatrixMode(MatrixMode.Modelview); 
    Matrix4 scale = Matrix4.Scale(magnification/diameter); 
    Matrix4 translation1 = Matrix4.CreateTranslation(-center); 
    Matrix4 rotation = Matrix4.CreateFromAxisAngle(axisOfRotation, angleOfRotation*(float)numericSensitivity.Value); 
    Matrix4 translation2 = Matrix4.CreateTranslation(0.0f, 0.0f, -1.5f); 
    if (rotationChanged) 
    { 
     oldRotation *= rotation; 
     rotationChanged = false; 
    } 
    modelview = translation1 * scale * oldRotation * translation2; 
    GL.LoadMatrix(ref modelview); 
} 

所以我想問一下,如果有某種方式如何繪製循環,這是西港島線由該rotattion不受影響(將在屏幕上相同的位置)。

+0

他們的方式,我過去做過......只需使用常規的projecton矩陣渲染所有3D素材,然後將其交換爲「2d矩陣」並渲染其餘的用戶界面 – mpen 2012-01-05 08:09:05

回答

0

如果我正確理解您的問題,那麼您所要做的就是在繪製圓之前將模型視圖矩陣重新設置爲標識。您可以使用PushMatrix()和PopMatrix()函數輕鬆完成此操作。例如:

//Draw normal things 

GL.MatrixMode(MatrixMode.Modelview); 
GL.PushMatrix(); 
GL.LoadIdentity(); 

//Draw un-rotated circle 

GL.PopMatrix(); 

PushMatrix()將當前矩陣保存到堆棧中,並且PopMatrix()從該堆棧彈出頂部矩陣。這意味着PopMatrix()會在您完成圓圈後將您帶回到正常的旋轉參照系。