2013-11-27 3 views
1

2D 용으로 오르토를 설정했습니다. 창 크기를 조정할 때 창에 그려지는 내용이 늘어나거나, 창에 검은 색 막대가 표시되거나 크기가 조정되었거나 적어도 내용의 종횡비를 유지하므로 전혀 늘어나지 않습니다. 나는 여기서 본 몇 가지 구현을 시도했지만 아무 것도 실제로 작동하지 않는다.OpenGL이 창 크기를 늘리는 것을 방지합니다.

편집 : 죄송합니다 사람은 창 크기가 5000

Protected Overrides Sub OnResize(ByVal e As EventArgs) 
     MyBase.OnResize(e) 

     GL.Viewport(0, 0, Width, Height) 

     GL.MatrixMode(MatrixMode.Projection) 
     GL.LoadIdentity() 
     GL.Ortho(-1.0, testvalue, testvalue , 1.0, 0.0, 4.0) 
    End Sub 

testvalue 순간 금발 순간의 약간 있었다의는 800x800

+0

치수를 변경할 때 "ortho"그래픽 투영 매트릭스를 사용하여 실제 코드를 포함하십시오. 원하는 방식대로 작동하려면 창 크기를 조정하기 전과 후에 가로 세로 비율을 보정하는 수학이 필요합니다. –

+0

수정 됨! 나는 가로 세로 비율에 시험 값을 곱해서 종횡비를 통합하려고 시도했지만 그다지 위험하지 않았고 실제로 비율을 유지하지 못했습니다. –

답변

0

나는 내가해야만하는 것을 알아 냈습니다.

Dim ar As Single = Width/Height 
GL.Viewport(0, 0, 800 * ar, 800 * ar) 

이 모든 연신 방지 폭이 높이보다 큰 경우에는 단순히 우측의 검정색 막대 배치 : 오히려 오르토 부분의 종횡비를 이용하는 것보다, I와 같은 뷰 포트를 사용 .

0

오르 명령하는 단계는 다음과 같은 매개 변수 : 왼쪽, 오른쪽 , bottom, top, zNear, zFar 추가 정보 : http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml '너비'를 오른쪽에 연결하고 '높이'를 하단에 연결하고 너비 및 높이 값이 새 창 크기를 반영하는지 확인하십시오.

예 :

GL.Viewport(0, 0, Width, Height) 
GL.MatrixMode(MatrixMode.Projection) 
GL.LoadIdentity() 
GL.Ortho(0.0, Width, Height, 0.0, 1.0, 2.0) 

는 2D 당신의 zNear 및 zFar은 매우 작은 수 있습니다 후에 만 ​​것 때문에, 단지 zNear 및 zFar 사이에 렌더링 할 수 있는지 확인하고 zNear으로 0.0을 사용하지 않는, 내가 추천 zNear에 대해 0.1 이상을 사용하십시오.

+0

죄송합니다. OP가 업데이트되었습니다. –

0

크기를 조정하면 Windows에서 자체 메시지 펌프를 생성하여 메시지 펌프를 우회하여 이벤트를 처리합니다. 스레드에서 업데이트/렌더링을 실행하는 것을 포함하여 크기 조정 도중 렌더링 할 수있는 해결 방법 (해킹)이 있습니다. 이것은 OpenGL은 물론 D3D의 문제입니다.

토론 here on an old Gamedev thread이 있습니다.

관련 문제