我有一个名为DrawImage
的绘图函数,但它非常混乱,并且仅与一种特定形式的reshape函数配合使用,因此我有两个问题:
- 如何在OpenGL中绘制纹理?我只想创建一个函数,该函数获取纹理、x、y、宽度、高度和可能的角度并将其绘制和绘制到给定参数。我希望按照GL_QUAD正常方式进行绘制,但我不确定如何做了。人们说我应该使用SDL或SFML来做到这一点,这是推荐的吗?如果是,你能否给我一个简单的加载纹理和绘制纹理的函数?我目前正在使用SOIL来加载纹理。
函数如下:
void DrawImage(char filename, int xx, int yy, int ww, int hh, int angle)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, filename);
glLoadIdentity();
glTranslatef(xx,yy,0.0);
glRotatef(angle,0.0,0.0,1.0);
glTranslatef(-xx,-yy,0.0);
// Draw a textured quad
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(xx,yy);
glTexCoord2f(0, 1); glVertex2f(xx,yy + hh);
glTexCoord2f(1, 1); glVertex2f(xx + ww,yy + hh);
glTexCoord2f(1, 0); glVertex2f(xx + ww,yy);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glEnd();
}
有人告诉我,在
glBegin
和glEnd
之间不能调用glDisable
、glPopMatrix
或glMatrixMode
。问题是——没有这些调用,代码就无法正常工作。有什么办法可以让它在没有这些调用的情况下正常工作吗?关于
glutReshapeFunc
,文档说明它接收一个指向具有2个参数(宽度和高度)的函数的指针。到目前为止,我只创建了一个不带参数的函数,你有什么想法怎样编写一个重塑函数,它可以接收宽度和高度,并实际执行重塑所需的操作。还有一个小问题:当涉及到OpenGL这样的GUI时,C++比C更好吗?就我所知,只有面向对象编程才是关键,我没有遇到任何OOP可以解决而C不能解决的问题(我是指在OpenGL中)。
不需要回答所有问题——第1个问题对我来说基本上是最重要的 :P