2012-06-05 7 views
2

전체 화면 모드에 문제가 있습니다. 내 창을 800x600으로 설정할 수 있지만 전체 화면 해상도로 설정하면 확대됩니다. 이것은 종횡비의 변화 때문이라고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까?종횡비 OpenGL에서 늘이기

편집 # 1

는 여기에 일이 일어나고 무엇을보고의 스크린 샷입니다.

image

왼쪽 : 800 × 600

오른쪽 : 1366x768 배경

편집 # 2

내 initGraphics 기능을 할 때마다 나는 다시 크기 호출되는 창 (WM_SIZE).

void initGraphics(int width, int height) { 
    float aspect = (float)width/(float)height; 
    glViewport(0, 0, width, height); 
    glEnable(GL_TEXTURE_2D); 
    glEnable(GL_BLEND); //Enable alpha blending 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0.0, width, height * aspect, 0.0); 
    glMatrixMode(GL_MODELVIEW); 
} 
+1

투영 매트릭스는 어떻게 생겼습니까? – Thomas

답변

4

해결책 : 진짜 문제는 당신이 gluOrtho2D 기능을 오용 한 것이 었죠. 대신이 사용하는 :

gluOrtho2D(0.0, width, height * aspect, 0.0); 

를 올바른 형태로 전환하기 위해 필요한이 :

gluOrtho2D(0.0, width, 0.0, height); 

후자는 그래서, 뷰포트의 전체 폭과 높이를 채우는 차원 직교 투영을 생성 스트레칭이 발생하지 않습니다.

ORIGINAL 답변 : 당신은 새로운 화면 비율을 차지하기 위해 영사를 수정해야

.

먼저 새 창 크기를 glViewport으로 설정하십시오. 뷰포트를 설정 한 후에는 매트릭스 모드를 glMatrixMode으로 호출하여 투영으로 전환 한 다음 마지막으로 width/height으로 새 종횡비를 계산하고 gluPerspective에 새 종횡비를 전달해야합니다. 똑 바른 glFrustumgluPerspective 대신에 사용할 수도 있습니다. 과 동일한 효과를 내기 위해 gluPerspective의 출처를 찾을 수 있습니다. 이 같은

뭔가 :

float aspectRatio = width/height; 
    glMatrixMode(GL_PROJECTION_MATRIX); 
    glLoadIdentity(); 
    gluPerspective(fov, aspectRatio, near, far); 
+0

'glLoadIdentity()'를 잊지 마세요. 프로젝션 매트릭스가 서로의 꼭대기에 원근감을 적용 할 수도 있습니다. – cobbal

+0

@cobbal 좋은 점 ill add that –

+0

Ortho를 사용하지만 동일한 과정입니다. –

2

창 크기를 조정 한 후 새로운 화면 비율을 반영하기 위해 투영 행렬을 조정해야합니다. 클래식 OpenGL을 사용하는 경우 행렬 모드를 GL_PROJECTION으로 전환하고 항등 행렬을로드 한 다음 가로 세로 비율로 조정 한 세로 치수가있는 glOrtho 또는 gluPerspective를 호출합니다 (이미지의 가로 스프레드가 원래 창에 있었다).

+0

저는이 일을하고 있지만 어떤 결과도 보이지 않습니다. gluOrtho2D (0.0, width, height * (width/height), 0.0); –

+0

그냥 추측 - 높이 및 너비 정수입니까? 해당 분수를 계산하기 전에 하나 또는 둘 다 복식으로 변환하려고합니다. 그렇지 않으면 1을 곱해서 계산할 수 있습니다. –

+0

차이가 없습니다. 이미지는 창문의 크기에 관계없이 어떤 방향으로도 늘어납니다. –