문제

간단한 2D OpenGL 애플리케이션을 만들고 있는데 일부 카메라 문제가 발생한 것 같습니다.(20,20)에 직사각형을 그리면 (25,20) 정도에 그려집니다.(100, 20)에 그리면 125 정도에 그려집니다.어떤 이유로 모든 것이 몇 % 오른쪽으로 이동하고 있습니다.

여기에 잘린 버전을 붙여넣었습니다.http://pastebin.com/m56491c4c

GLUT를 설정하는 방식에 문제가 있나요?나는 그것을 비활성화할 때 동일한 일이 발생하기 때문에 내 개체가 이상한 일을 하는 것이 아니라는 것을 알고 있습니다.

미리 감사드립니다.

도움이 되었습니까?

해결책

Reshape 함수 내부에서 투영 행렬을 설정해야합니다 (resize()), 또한 사용자가 창 크기 조정의 문제를 자동으로 해결합니다.

void resize(int w, int h)
{
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0, w, h, 0);
}

그런 다음 드로우 함수에서 행렬 모드가 모델 뷰인지 확인하십시오.

void draw()
{
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  ...
}

코드와 관련된 기타 문제 :

  • 당신은 아마도 전화해서는 안됩니다 glutPostRedisplay() 끝에 draw(). 이것은 CPU를 100%로 운영 할 것입니다. 대신 사용할 수 있습니다 glutTimerFunc() 여전히 몇 밀리 초마다 업데이트됩니다.
  • ~ 안에 processMouse(), 당신은 사용하고 있습니다 wsprintf() 배열에 char에스: wsprintf() 광범위한 캐릭터 배열을 취합니다 (wchar_t), 따라서 로컬 변수를 만들어야합니다 s 유형의 wchar_t[], 또는 사용 sprintf() 그리고 MessageBoxA() 대신에 wsprintf() 그리고 MessageBoxW() (어느 쪽 MessageBox() 유니 코드 애플리케이션을 컴파일 할 때 매크로로 확장됩니다. 당신은 또한 버퍼 오버플로에 취약합니다. 현실적으로는 매우 큰 것을 전달하지 않더라도 최소 12 자 이상의 버퍼를 사용해야합니다. x 값. 마지막으로 사용해야합니다 snprintf()/wsnprintf() 대신에 sprintf()/wsprintf() 버퍼 오버 플로우로부터 보호합니다.

다른 팁

ModelView 매트릭스에서 glOrtho2D를 호출하는 것 같습니다.그게 문제인지는 의심스럽습니다(이 경우에는 Projection이 ID여야 하기 때문에). 대신 Projection 행렬에서 이를 호출해야 합니다.

크기 조정 호출에서 w와 h도 인쇄해야 합니다. 창 크기가 실제로 생각한 것과 같은지 확인해야 합니다. (글루트가 어떻게 작동하는지는 모르겠지만 gluInitWindowSize()에는 테두리가 포함될 수 있으므로 상황이 엉망이 될 수 있습니다. 위로).

작업중인 시스템에 따라 다르지만 일반적으로 대부분의 Windows 좌표 시스템은 왼쪽 하단에서 시작하여 상단과 오른쪽으로 계산됩니다. 이 경우 Gluorth02D 호출이 잘못되었습니다.

당신은 :

gluOrtho2D(0, appWidth, appHeight, 0);

창의 상단이 바닥에 바닥에 쌓여 있습니다.

대부분의 경우 :

gluOrtho2D(0, appWidth, 0, appHeight);

내가 말했듯이 그것은 시스템에 따라 다르고, 당신과 함께 일하는 플랫폼. 대부분의 Linux 구현에 대해서만 말할 수 있습니다.

버그에 영향을 미치는 경우를 대비하여 확인해야 할 다른 것입니다.

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