2011-10-27 19 views
1

我有一個使用OpenGL glControl與C#創建的形狀。我需要形狀並排移動,並在每次碰到窗戶牆(邊緣)時改變方向。我不知道如何讓程序來檢測窗口的邊緣......使用OpenGl和C移動形狀和改變窗口邊緣的方向#

這是我創建了一個方法,被稱爲在油漆區:

 private void ShapeRend() 
     { 
      Matrix4 lookat = Matrix4.LookAt(0, 0, 5, 0, 0, 0, 0, 1, 0); 
     GL.MatrixMode(MatrixMode.Modelview);       
     GL.LoadMatrix(ref lookat);               


     GL.Rotate(angle, 0.0f, 1.0f, 0.0f); 
     angle += 0.5f; 


     //GL.Translate(x,0,0); 
     //Change to -x 

     GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); 

     DrawSphere(); 

     glControl1.SwapBuffers(); 
    } 

我需要知道,如果我可以使用GL.Translate移動形狀,或者如果有其他方法。我真的迷失了。欣賞任何提示。

回答

0

首先,我認爲你正在做你的變革倒退。如果你先(代碼)旋轉,然後翻譯,你會得到一個螺旋形的對象。根據我的理解,你希望你的球體圍繞自身旋轉並沿x軸平移,所以一定要反轉你的轉換順序。

現在爲您的主要問題:您需要計算球體部分(真正的圓)和矩形之間的交點。由於您只能沿x軸工作,因此更容易。讓window_size沿x軸的窗口大小爲一半。當x + sphere_radius >= window_size,你擊中正X軸「牆」。當x - sphere_radius <= -window_size,你擊中負x軸「牆」。

要了解有關投影和模型視圖矩陣的更多信息,建議閱讀OpenGL red book。現在已經過時了,但有些部分仍然是最新的。對於你的情況,特別看看第3章。