2011-10-27 1 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 장을 특히보십시오.

관련 문제