2009-03-15 55 views
4

OpenGLウィンドウのサイズを変更すると何らかの理由ですべてが崩れます。画像が歪んでしまい、座標が動かず、すべてが単に崩れてしまいます。私はGlutを歌ってそれを設定する。OpenGLウィンドウのサイズを変更すると、ウィンドウが開きます

//Code to setup glut 
glutInitWindowSize(appWidth, appHeight); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); 
glutCreateWindow("Test Window"); 

//In drawing function 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

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

OpenGLアプリケーションは厳密に2Dです。

これが最初のように、それがどのように見えるかです:これは、それがどのように見えるかですhttp://www.picgarage.net/images/Corre_53880_651.jpeg

などのリサイズ後:http://www.picgarage.net/images/wrong_53885_268.jpeg

+0

画像は使用できなくなりました。 –

答えて

17

あなたはGLUT「再構築」をフックすることを忘れてはならないイベント:

glutReshapeFunc(resize); 

ビューポートをリセットする:

void resize(int w, int h) 
{ 
    glViewport(0, 0, width, height); //NEW 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0, w, h, 0); 
} 

透視投影で新しいアスペクト比を考慮する必要があります。

void resizeWindow(int width, int height) 
{ 
    double asratio; 

    if (height == 0) height = 1; //to avoid divide-by-zero 

    asratio = width/(double) height; 

    glViewport(0, 0, width, height); //adjust GL viewport 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(FOV, asratio, ZMIN, ZMAX); //adjust perspective 
    glMatrixMode(GL_MODELVIEW); 
} 
+0

C++で作業しているので、Cスタイルのキャストをstatic_cast <と置き換えてください:) – aib

関連する問題