2011-10-27 26 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章。