我正在学习一些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位
答案 0 :(得分:0)
我今天遇到了这个问题。这似乎解决了我的问题:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
我希望它正在清除执行它的深度缓冲区。我知道这是一个非常古老的问题,但万一其他人偶然发现同一个问题......