2013-03-16 3 views
0

OpenGL Superbible (4th Edition)을 통해 작업하고 있습니다. 4 장은 핵에 대해 전자를 회전시키는 예를 보여줍니다. (하나의 큰 구체에 대한 기본적으로 작은 구체).OpenGL의 번역 및 회전?

여기는 핵 (다른 구)에 대한 특정 위치에 전자 (구)를 그려주는 렌더링 함수의 추출물입니다. fElect1은 렌더링 할 각 호출에서 10 도씩 증가하는 각도입니다.

glPushMatrix(); 
glRotatef(360.0f-45.0f,0.0f, 0.0f, 1.0f); 
glRotatef(fElect1, 0.0f, 1.0f, 0.0f); 
glTranslatef(0.0f, 0.0f, 60.0f); 
glColor3ub(56,136,21); 
glutSolidSphere(6.0f, 15, 15); 
glPopMatrix() 

그래서 그는 z 축을 중심으로 315도 회전시킵니다. 그런 다음 새로 회전 한 y 축에 대한 뷰를 각도 fElect1만큼 회전 한 다음 구를 그립니다. 즉 그는 y- 축을 중심으로 전자의 궤도를 시뮬레이션하려고합니다. 결과는 전자가 구에 대한 '기울어 진'궤도 (x 축이 315도 기울어 져 있기 때문에 기울어 짐)에서 움직이는 것처럼 보입니다.

하지만 제 질문은 - 왜 그는 z 축을 번역합니까? 이것은 전자가 핵이 경로의 중심에 있지 않는 일종의 궤도를 가지고 있다는 것을 의미하지 않을까요? 그러나 시뮬레이션을 실행할 때 그렇게 보이지 않습니다.

답변

1

아마 당신이 잘못된 방향에서 작업을 생각하고 있다고 생각합니다. 그들은 GL에서 적용되는 방식으로, 가장 '글로벌'변환을 먼저 적용하고 가장 '로컬'변환을 먼저 적용합니다. 따라서 무언가가 어떻게 변형 될 것인지 생각할 때, 역순으로 생각할 수 있습니다.

그래서 :

당신의 영역이 (
  • 그것은 다음 Y 축을 중심으로 회전
  • 이 Z. 60 개 단위에 의해 번역 기원
  • 에서 생성되는
    • 그래서 지금 궤도를 돌고있다 원점은 XZ 평면에서 60 단위 거리).
    • 마지막으로 모든 것이 Z 축을 중심으로 회전되어 기울기가 생성됩니다.
    • 이것은 '원자'에 이미 적용된 변환과 카메라와 같은 이전 변환으로 변환됩니다.
  • +0

    변형이 적용되는 순서에 대해 그가 말한 부분을 놓쳐 버렸을 것입니다. 이것은 훨씬 더 의미가 있습니다. – BeeBand

    관련 문제