1

OpenGL で単純なクワッドを描画しようとしています。深さを使用せず、z 座標として 0.0 でクワッドを描画しても、同じコードは失敗しません。
深度が有効になっていないか、まったくないようです:

#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>

int width=500, height=500, depth=500;


void init()
{
    glEnable(GL_DEPTH_TEST);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, width, height, 0);
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
    gluPerspective(45, 1, 1.0, 200.0);
}


void display()
{
    glClearColor(0.0, 0.0, 0.0, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor4f(1, 0, 0, 0);
    glBegin(GL_QUADS);
    glVertex3i(100, 100, 100);
    glVertex3i(100, 300, 100);
    glVertex3i(300, 300, 100);
    glVertex3i(300, 100, 100);
    glEnd();

    glutSwapBuffers();
}


int main(int argc, char * argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(width, height);
    glutCreateWindow("Test");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
    return 0;
}

黒いウィンドウしか見えませんが、その中に赤いクワッドが見えるはずです。

4

1 に答える 1

1

init()関数を次のように変更します。

void init()
{
    glEnable(GL_DEPTH_TEST);
    glViewport(0, width, height, 0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, 1, 1.0, 200.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
}

あなたの問題はgluLookAt()、モデル ビュー マトリックスを定義するために使用する必要がありますが、射影を掛けていることです。また、glViewport()呼び出しは行列計算とは無関係なので、関数の先頭に移動しました。本当に必要ではありませんが、私はそれがより明確だと思います。

于 2012-11-17T22:42:28.817 に答える