C++ GL_POINT_SPRITE_ARB渲染问题

C++ GL_POINT_SPRITE_ARB渲染问题,c++,opengl,particle-system,C++,Opengl,Particle System,我正在学习一些OpenGL的基础知识,当我决定制作一个粒子系统时,我遇到了一些问题。 当我试图用GL_POINT_精灵渲染GL_POINT时,它们不会显示在屏幕上,除非它们首先是渲染器。 我用于渲染的代码: glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glColor3f(1.0f,1.0f,1.0f); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, t-

我正在学习一些OpenGL的基础知识,当我决定制作一个粒子系统时,我遇到了一些问题。 当我试图用GL_POINT_精灵渲染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();
这仅渲染带纹理的四边形,而不渲染点。当我更改顺序时,首先渲染点,然后是四边形,它们都显示在屏幕上“纹理点”和“纹理四边形”

我是做错了什么,还是这是正确的行为


关于我的电脑的一些信息可能会有所帮助-Arch Linux 64位与AMD Mobility Radeon HD 4550 Catalyst 12.6驱动程序配合使用

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

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);  

我想是清除了深度缓冲区。我知道这是一个非常古老的问题,但为了防止其他人偶然发现相同的问题……

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

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);  

我想是清除了深度缓冲区。我知道这是一个非常古老的问题,但为了防止其他人偶然发现相同的问题……

这正是您正在运行的代码,还是从不同的地方剪切粘贴的?您能否显示在一个代码块中工作的确切代码,然后是在单独的代码块中不工作的确切代码?如果这是您真正的代码,那么我认为这不会有任何区别。这段代码在主函数中的while循环中运行。其余的代码是SDL初始化和设置OpenGL ortho以正确显示2d图形,禁用深度缓冲区和加载纹理。这正是您正在运行的代码,还是从不同的位置剪切和粘贴?您能否显示在一个代码块中工作的确切代码,然后是在单独的代码块中不工作的确切代码?如果这是您真正的代码,那么我认为这不会有任何区别。这段代码在主函数中的while循环中运行。剩下的代码是SDL初始化和设置OpenGL ortho以正确显示2d图形,禁用深度缓冲和加载纹理。