我正在编写一个简单的图形引擎,使用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);
m_textureID是已经使用OpenGL加载的纹理的id,m_pos是存储sprite的x和y位置的向量,m_size存储sprite的大小。
我发布这个的原因是因为我从熟悉OpenGL的人那里听说这是在屏幕上绘制许多不同纹理的错误方法。显然,如果屏幕上有很多图形,那么在调用glVertex时使用glBegin(GL_QUADS)和glEnd()可能会很慢,并且正确的方法是使用顶点指针。
任何人都可以使用我上面描述的实现方式向我提供有关如何加快此技术性能的任何指示(没有双关语)?还有什么我可能做错了吗? (我对OpenGL和图形编程比较陌生。)
提前致谢!
答案 0 :(得分:7)