2011-12-06 4 views
0

비행기 개체가 있습니다. 앞으로 이동하고 좌우로 회전 할 수 있기를 원합니다. 나는 비행기가 직면하고있는 방향으로 나아갈 것을 원한다.OpenGL에서 문제 회전 및 변환

이것은 코드이지만 작동하지 않습니다. 어디에서 잘못 될까요?

directionX=sin(heading*M_PI/180.0); 
    directionZ=-cos(heading*M_PI/180.0); 

    if(keys['W']){ 
     eyeX += directionX; 
     eyeZ += directionZ; 
    } 
    if(keys['S']){ 
     eyeX -= directionX; 
     eyeZ -= directionZ; 
    } 
    if(keys[VK_LEFT]) 
     heading -= 1; 
    if(keys[VK_RIGHT]) 
     heading += 1; 

평면은 호를 사용하여 회전하며 eyeX에게 & eyeZ로 환산된다.

//Aircraft 
     glPushMatrix(); 
      glRotatef(-heading, 0,1,0); 
      glTranslatef(eyeX,eyeY,eyeZ); 
      model.speedDisplayFaceNormals(); 
      //model.drawBoundingBox(); 
      //model.drawOctreeLeaves(); 
     glPopMatrix(); 
+1

어떻게 작동하지 않는지 더 자세히 설명해야합니다. 좌표축의 방향을 선택하는 방법을 설명하는 것도 의미가 있습니다. – unwind

+0

또한 glRotate/glTranslate 코드 또는이 물건이 실제로 매트릭스에 영향을주는 코드를 게시하십시오. –

+0

Ive가 어떻게 사용되는지 추가했습니다 .. – user195257

답변

2

이 당신이 얻고있는 실제 동작을 모른 채 어둠 속에서 샷의 일종이다,하지만 당신은 glRotatefglTranslatef에 호출의 순서를 전환하려고 할 수 있습니다.

+0

이것은 거의 확실히 문제입니다. 그의 코드에서 먼저 대상을 '눈'으로 이동시킨 다음 (0, 0, 0)에있는 Y 축을 중심으로 회전합니다. '눈'이 원점에서 멀리 떨어져 있으면 거대한 호. –

0

OpenGL에서 눈은 0,0,0에 있으며 음의 Z 축을 보입니다. 따라서 눈/카메라 좌표 기반 시스템을 사용하려면 처음부터 다음 순서로 두 가지 작업을 수행해야합니다.

1 - 시스템의 카메라 방향에 따라 장면 회전 2 - glTranslatef (-EyeX, -EyeY, -yeZ) 장면 좌표계에서 0,0,0으로 이동합니다.

그러면 개체의 위치로 변환하고 그에 따라 회전하고 렌더링 할 수 있습니다. 몇 년 전에이 메모를 몇 년 전에 만들었습니다. 이것은 플레이어 위치 1 인칭 스타일을 나타내는 아이 좌표를 볼 때 내가했던 일입니다.

관련 문제