문제

OpenGL에서 간단한 회전을 수행하려고 하는데 요점이 누락된 것 같습니다.나는 OpenGL 회전을 더 일반적으로 설명하는 빠른 설명이나 링크만큼 구체적인 수정 사항을 찾고 있지 않습니다.

현재 다음과 같은 코드가 있습니다.

glPushMatrix();
  glRotatef(90.0, 0.0, 1.0, 0.0);
  glBegin(GL_TRIANGLES);        
    glVertex3f( 1.0, 1.0, 0.0 );        
    glVertex3f( 3.0, 2.0, 0.0 );        
    glVertex3f( 3.0, 1.0, 0.0 );        
  glEnd();
glPopMatrix();

그러나 결과는 90도 회전된 삼각형이 아닙니다.

편집하다흠 Mike Haboustak에게 감사드립니다. 내 코드가 glOrtho를 사용하는 SetCamera 함수를 호출하는 것으로 나타났습니다.저는 OpenGL을 처음 접해서 이것이 무엇을 의미하는지 전혀 알지 못하지만 이를 비활성화하고 Z축으로 회전하면 원하는 결과를 얻을 수 있습니다.

도움이 되었습니까?

해결책

1단위 직선이 나오나요?90도 썩은 것 같습니다.Y 주변에서는 깊이가 없는 삼각형의 측면을 보게 될 것입니다.

대신 Z축을 중심으로 회전하여 더 의미 있는 결과가 나오는지 확인해야 합니다.

OpenGL에는 기하학 표시와 관련된 두 가지 행렬인 ModelView와 Projection이 있습니다.둘 다 데이터가 화면에 표시되기 전에 좌표에 적용됩니다.먼저 ModelView 행렬이 적용되어 모델 공간의 데이터를 뷰 공간으로 변환합니다.그런 다음 투영 매트릭스가 적용되어 2D 모니터의 "투영"을 위해 뷰 공간의 데이터를 변환합니다.

ModelView는 여러 개체를 "세계"의 해당 위치에 배치하는 데 사용되며 Projection은 개체를 화면에 배치하는 데 사용됩니다.

귀하의 코드는 괜찮은 것 같으므로 문서를 읽으면 glPushMatrix()와 같은 함수의 특성이 무엇인지 알고 있다고 가정합니다.Z를 중심으로 회전하는 것이 여전히 이해되지 않는 경우 glMatrixMode를 호출하여 ModelView 행렬을 편집하고 있는지 확인하세요.

다른 팁

glRotatef 호출 앞에 다음을 추가하여 modelview 행렬을 수정하는지 확인하세요.

glMatrixMode(GL_MODELVIEW);

그렇지 않으면 대신 투영이나 텍스처 매트릭스를 수정하게 될 수도 있습니다.

"허용된 답변"은 완전히 정확하지 않습니다. 이 코드 이전에 이상한 작업을 수행하지 않는 한 Z 주위를 회전해도 이 삼각형을 보는 데 도움이 되지 않습니다.이 경우 glOrtho(...) 호출을 제거하면 문제가 해결되었을 수 있지만 여전히 몇 가지 다른 문제가 있습니다.

작성된 코드에는 두 가지 주요 문제가 있습니다.

  • 이전에 카메라를 배치한 적이 있나요?OpenGL에서 카메라는 원점에 위치하며 Z축을 내려다보고 양의 Y는 위쪽을 향합니다.이 경우 삼각형은 눈과 동일한 평면에 그려지지만 오른쪽 위쪽으로 그려집니다.매우 이상한 투영 행렬이 없으면 볼 수 없습니다.gluLookat()은 이 작업을 수행하는 가장 쉬운 명령이지만 현재 행렬(MODELVIEW여야 함)을 이동하는 모든 명령을 작동하도록 만들 수 있습니다.

  • OpenGL의 기본값은 오른쪽 또는 시계 반대 방향 좌표계인 반면 왼손 또는 시계 방향 방법으로 삼각형을 그립니다.즉, 뒷면을 컬링하는 경우(아마도 그렇지 않을 수도 있지만 더 발전함에 따라 이동할 가능성이 높음) 예상대로 삼각형이 표시되지 않습니다.문제를 확인하려면 오른손을 얼굴 앞에 놓고 그것이 X-Y 평면에 있다고 상상하면서 정점 (1,1)에서 (3,2)에서 (3,1)을 그리는 순서대로 손가락을 움직입니다. ).이렇게 하면 엄지손가락이 얼굴 반대쪽을 향하게 됩니다. 이는 삼각형의 뒷면을 보고 있다는 의미입니다.OpenGL에서 흔히 사용되는 방법이므로 오른손으로 얼굴을 그리는 습관을 들여야 합니다.

제가 추천할 수 있는 가장 좋은 방법은 NeHe 튜토리얼을 사용하는 것입니다. http://nehe.gamedev.net/.여러 시스템에서 OpenGL을 설정하는 방법을 보여 주는 것으로 시작하여 삼각형 그리기로 이동하고 천천히 그리고 확실하게 고급 주제로 계속 진행됩니다.따라하기가 매우 쉽습니다.

OpenGL을 처음 봤을 때, NeHe 튜토리얼 (왼쪽 메뉴 참조)은 매우 귀중했습니다.

나는 책을 추천하고 싶습니다:

3D 컴퓨터 그래픽:OpenGL을 이용한 수학적 소개 사무엘 R.키스

이는 매우 명확한 설명을 제공하며 수학은 그래픽이 아닌 영역에도 널리 적용 가능합니다.또한 직교 투영과 직교 투영에 대한 철저한 설명을 찾을 수 있습니다.관점 변환.

투영 행렬과 관련하여 여기에서 시작하기에 좋은 소스를 찾을 수 있습니다.

http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx

한 가지 유형의 투영 행렬을 구성하는 방법에 대해 조금 설명합니다.직교 투영은 이러한 행렬의 매우 기본/원시적 형태이며 기본적으로 수행되는 작업은 3개 축 좌표 중 2개를 가져와 화면에 투영하는 것입니다(여전히 축을 뒤집고 크기를 조정할 수 있지만 워프나 원근 효과는 없습니다). .

행렬 변환은 3D로 렌더링할 때 가장 중요한 것 중 하나이며 기본적으로 3개의 행렬 단계가 포함됩니다.

  • Transform1 = 월드에 대한 객체 좌표계(예: 객체 회전 및 크기 조정)
  • Transform2 = 카메라에 대한 세계 좌표계(객체를 올바른 위치에 배치)
  • Transform3 = 화면 공간에 대한 카메라 좌표계(화면에 투영)

일반적으로 3 행렬 곱셈 결과는 WorldViewProjection 행렬(이 용어를 접한 경우)이라고 합니다. 모델 공간에서 세계를 거쳐 카메라로, 마지막으로 화면 표현으로 좌표를 변환하기 때문입니다.

재미있게 보내세요

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top