2016-06-04 4 views
0

얼굴을 구별 할 수 있도록 직사각형 평행 육면체를 그려주는 코드 부분입니다.OpenGL - 잘못된 방향으로 회전합니다.

glMatrixMode(GL_MODELVIEW);  // To operate on model-view matrix 
glLoadIdentity();     // Reset the model-view matrix 

glNewList(1, GL_COMPILE); 
glBegin(GL_QUADS); 
    glVertex3f(-1, -1, 1.0f); 
    glVertex3f(1, -1, 1.0f); 
    glVertex3f(1, 1, 1.0f); 
    glVertex3f(-1, 1, 1.0f); 
glEnd(); 
glEndList(); 

glTranslatef(0, 0, -50); 

deg += 0.03; 
glRotatef(deg, 0, 1, 0); 

glScalef(10, 10, 20); 

glColor3f(1, 0, 0); //red 
glCallList(1); 

glColor3f(1, 1, 0); //yellow 
glRotatef(90, 0, 1, 0); 
glCallList(1); 

glColor3f(0, 1, 0); //green 
glRotatef(90, 0, 1, 0); 
glCallList(1); 

glColor3f(0, 1, 1); //cyan 
glRotatef(90, 0, 1, 0); 
glCallList(1); 

glColor3f(0, 0, 1); //blue 
glRotatef(90, 1, 0, 0); 
glCallList(1); 

glColor3f(1, 0, 1); //magenda 
glRotatef(180, 1, 0, 0); 
glCallList(1); 

이것은 또한 idleFunc의 콜백이기 때문에 객체가 항상 회전합니다. 내 문제는 개체를 그릴 때 사용하는 회전이 반드시 필요한 것보다 반대 다. 앞면은 빨간색으로 그려지지만 노란색은 왼쪽이 아닌 오른쪽으로 이동하고 시안 색은 왼쪽으로 이동합니다. 위쪽과 아래쪽에도 똑같이 발생합니다 (파란색은 아래쪽에, magenda는 위쪽에 있음).

무엇이 더 이상합니까? 전체 개체를 회전시키는 회전은 예상대로 오른쪽 규칙을 따릅니다.

+1

예상에 대한 추론을 제공해야 할 수도 있습니다. 노란 얼굴 만보고 있으면 예상대로 정확하게 들립니다. 원래의면은 z 축의 양의 방향에 배치됩니다. 그런 다음 노란 얼굴의 경우 y 축을 중심으로 90도 회전합니다. y 축을 기준으로 90도 회전하면 양의 z 축이 양의 x 축으로 회전합니다. 어느 것이 오른쪽을 가리키고, 그래서 노란색 얼굴이 오른쪽으로 끝납니다. –

+0

네가 맞아. 나는 물체가 움직이고 축이 자신의 위치에 머물러 있다고 생각했기 때문에 붉은 색 얼굴이 x 축으로 가고 왼쪽이 앞에오고 노란색으로 페인트를 칠 것으로 예상했습니다. 나는 내 실수를 지금 보았다. 감사. – Savvas

답변

0

레토 코라 디 (Reto Koradi)가 자신의 의견에서 말했듯이, 나는 내 마음이 바뀌었던 것 같습니다. 나는 전체 비행기가 회전하고 투영의 오른쪽에 큐브를 보낼 것을 기대했기 때문에 왼쪽이 앞에 오면 노란색이됩니다.

물론 회전하는 축이며 그려진 것은 이후의 변형에 영향을받지 않습니다. 그래서 실제로 일어나는 것은 빨강이 앞에 그려지고, 그 다음에 z 축이 오른쪽으로 가고 노란색이 거기에 그려지는 것입니다. 나머지도 마찬가지입니다.

관련 문제