GL_POINT_SPRITE_ARB渲染问题

时间:2012-08-26 08:23:56

标签: c++ opengl particle-system

我正在学习一些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();

这只会渲染纹理四边形而不是点。当我改变顺序(第一个渲染点然后是四边形)时,它们都出现在屏幕上(纹理点和纹理四边形)。

我在这里做错了什么或这是正确的行为?

有关我的电脑的一些信息很有帮助 - 使用AMD Mobility Radeon HD 4550(Catalyst 12.6驱动程序)构建Linux 64位

1 个答案:

答案 0 :(得分:0)

我今天遇到了这个问题。这似乎解决了我的问题:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);  

我希望它正在清除执行它的深度缓冲区。我知道这是一个非常古老的问题,但万一其他人偶然发现同一个问题......