在OpenGL中,可以使用纹理映射(texture mapping)来将纹理绑定到四边形上。下面是一个示例代码,演示了如何绑定多个纹理到不同的四边形:
#include
GLuint texture1, texture2;
void loadTexture(const char* filename, GLuint& texture)
{
// 加载图片
FILE* file = fopen(filename, "r");
unsigned char* imageData;
// 读取图片数据
// ...
// 生成纹理
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
// 设置纹理参数
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 加载图片数据到纹理
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
glGenerateMipmap(GL_TEXTURE_2D);
// 释放图片数据
// ...
}
void init()
{
// 加载纹理
loadTexture("texture1.jpg", texture1);
loadTexture("texture2.jpg", texture2);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// 绑定第一个纹理
glBindTexture(GL_TEXTURE_2D, texture1);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
// 绑定第二个纹理
glBindTexture(GL_TEXTURE_2D, texture2);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
glFlush();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(800, 600);
glutCreateWindow("OpenGL Texture Mapping");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
这个示例中,loadTexture
函数用于加载图片并生成纹理。init
函数用于初始化OpenGL环境和加载纹理。display
函数用于绘制场景,其中通过glBindTexture
函数将纹理绑定到当前的活动纹理单元(GL_TEXTURE0
)上,并使用glTexCoord2f
函数为每个顶点指定纹理坐标。在main
函数中,使用Glut库创建窗口并设置显示回调函数为display
函数,然后进入主循环。
你可以根据自己的需求,修改纹理文件路径和顶点坐标,以满足你的具体需求。
上一篇:绑定对象未释放