使用即时模式绘制纹理的OpenGL替代方案? 我正在编写一个简单的图形引擎,它使用OpenGL和C++在屏幕上绘制纹理。我绘制纹理的方法是使用下面的源代码——绘制是在我编写的“Sprite”类中包含的方法中完成的,该类由主场景的游戏循环调用 glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, m_textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glColor3f(1.0f, 1.0f, 1.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(m_pos.x, m_pos.y); glTexCoord2f(1.0f, 0.0f); glVertex2f(m_pos.x + m_size.x, m_pos.y); glTexCoord2f(1.0f, 1.0f); glVertex2f(m_pos.x + m_size.x, m_pos.y + m_size.y); glTexCoord2f(0.0f, 1.0f); glVertex2f(m_pos.x, m_pos.y + m_size.y); glEnd(); glDisable(GL_TEXTURE_2D);

使用即时模式绘制纹理的OpenGL替代方案? 我正在编写一个简单的图形引擎,它使用OpenGL和C++在屏幕上绘制纹理。我绘制纹理的方法是使用下面的源代码——绘制是在我编写的“Sprite”类中包含的方法中完成的,该类由主场景的游戏循环调用 glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, m_textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glColor3f(1.0f, 1.0f, 1.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(m_pos.x, m_pos.y); glTexCoord2f(1.0f, 0.0f); glVertex2f(m_pos.x + m_size.x, m_pos.y); glTexCoord2f(1.0f, 1.0f); glVertex2f(m_pos.x + m_size.x, m_pos.y + m_size.y); glTexCoord2f(0.0f, 1.0f); glVertex2f(m_pos.x, m_pos.y + m_size.y); glEnd(); glDisable(GL_TEXTURE_2D);,c++,opengl,graphics,2d,C++,Opengl,Graphics,2d,m_textureID是已使用OpenGL加载的纹理的id,m_pos是存储精灵的x和y位置的向量,m_size存储精灵的大小 我之所以发布这篇文章,是因为我从熟悉OpenGL的人那里听说,在屏幕上绘制许多不同的纹理是错误的。显然,如果屏幕上同时有许多图形,那么使用glBegin(GL_QUADS)和glEnd()调用glVertex可能会很慢,正确的方法是使用顶点指针 有没有人能给我一些建议(没有双关语),告诉我如何使用我上面描述的实现来加速这项技术的性能?还有什么我可能做错的吗?(我对Ope

m_textureID是已使用OpenGL加载的纹理的id,m_pos是存储精灵的x和y位置的向量,m_size存储精灵的大小

我之所以发布这篇文章,是因为我从熟悉OpenGL的人那里听说,在屏幕上绘制许多不同的纹理是错误的。显然,如果屏幕上同时有许多图形,那么使用glBegin(GL_QUADS)和glEnd()调用glVertex可能会很慢,正确的方法是使用顶点指针

有没有人能给我一些建议(没有双关语),告诉我如何使用我上面描述的实现来加速这项技术的性能?还有什么我可能做错的吗?(我对OpenGL和图形编程比较陌生。)


提前谢谢

您使用的是即时模式,这在当今严肃的3D图形编程中使用得不多(如果有的话)。事实上,在使用OpenGL ES(1.1和2.0)的移动设备上,它甚至不可用

至少,您应该使用顶点数组,这些数组是使用
glVertexPointer
glNormalPointer
glColorPointer
glTexCoordPointer
设置的,然后使用
glDrawArrays
glDrawElements
绘制的

下一步是通过
glGenBuffer
glBindBuffer
glBufferData
使用顶点缓冲区对象(VBO),将顶点数据推入GPU内存。您可以找到示例代码和