2
我正在学习一些OpenGL基础知识,当我决定创建一个粒子系统时,我遇到了一些问题。 当我尝试使用GL_POINT_SPRITE呈现GL_POINT时,它们不会显示在屏幕上,除非它们首先是渲染器。我使用的渲染 代码:GL_POINT_SPRITE_ARB渲染问题
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();
这只是呈现一个纹理四而不是点。当我改变顺序时(第一个渲染点然后是四边形),它们都出现在屏幕上(纹理点和纹理四边形)。
我在这里做错了什么或者这是正确的行为?
我的电脑的一些信息migh是有帮助的 - Arch Linux的64位与AMD的Mobility Radeon HD 4550(催化剂12.6驱动程序)
这是**正好**您正在运行的代码,或者是此剪切和粘贴来自不同的地方?你能显示在一个代码块中工作的确切代码,后面是在单独的块中不起作用的确切代码吗?如果这是你的真实代码,那么我认为它应该没有任何区别。 – Tim
此代码在main函数的while循环中运行。其余的代码是SDL初始化并设置OpenGL ortho以正确显示二维图形,禁用深度缓冲区和加载纹理。 – winglot