2

私はいくつかの OpenGL の基礎を学んでおり、パーティクル システムを作成することにしたとき、いくつかの問題に遭遇しました。GL_POINT_SPRITE で GL_POINT をレンダリングしようとすると、最初にレンダラーでない限り画面に表示されません。レンダリングに使用しているコード:

glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();
    glColor3f(1.0f,1.0f,1.0f);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, t->id());
    glBegin(GL_QUADS);
        glTexCoord2f(0.0f,0.0f);
        glVertex2f(10,10);

        glTexCoord2f(1.0f,0.0f);
        glVertex2f(100,10);

        glTexCoord2f(1.0f,1.0f);
        glVertex2f(100,100);

        glTexCoord2f(0.0f,1.0f);
        glVertex2f(10,100);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glPopMatrix();

    glPushMatrix();
    glColor3f(1.0f,1.0f,1.0f);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_POINT_SPRITE_ARB);
    glBindTexture(GL_TEXTURE_2D, t->id());
    glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
    glPointSize(32);
    glBegin(GL_POINTS);
    glVertex2f(300,300);
    glEnd();
    glDisable(GL_POINT_SPRITE);
    glDisable(GL_TEXTURE_2D);
    glPopMatrix();

SDL_GL_SwapBuffers();

これはテクスチャ付きのクワッドのみをレンダリングし、ポイントはレンダリングしません。順序を変更すると (最初のレンダー ポイント、次にクワッド)、両方が画面に表示されます (テクスチャ ポイントとテクスチャ クワッド)。

ここで何か間違ったことをしていますか、それともこれは正しい動作ですか?

私の PC に関する情報が役立つかもしれません - AMD Mobility Radeon HD 4550 を搭載した Arch Linux 64 ビット (Catalyst 12.6 ドライバー)

4

1 に答える 1

0

今日、この問題がありました。これは私のためにそれを修正するように見えました:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);  

それを行った深度バッファをクリアしていると思います。これは非常に古い質問であることは承知していますが、他の誰かが同じ問題に遭遇した場合に備えて......

于 2013-08-11T22:25:39.940 に答える