C++ GL_POINT_SPRITE_ARB渲染问题
我正在学习一些OpenGL的基础知识,当我决定制作一个粒子系统时,我遇到了一些问题。 当我试图用GL_POINT_精灵渲染GL_POINT时,它们不会显示在屏幕上,除非它们首先是渲染器。 我用于渲染的代码: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-
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图形,禁用深度缓冲和加载纹理。