Open GL 使用纹理的简单示例

本文详细介绍了使用OpenGL进行纹理映射的基本步骤,包括初始化纹理、设置纹理参数、加载纹理数据和在三角形上应用纹理。通过一个简单的示例,演示了如何在OpenGL环境中创建和使用纹理,适用于初学者和希望深入了解OpenGL纹理处理的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

#include <gl/freeglut.h>
#include <iostream>

using namespace std;

unsigned int texId = 0;
unsigned int tex[10000];

void display(){

	glClearColor(1, 1, 0, 0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glTranslatef(-0.5, -0.5, -1);

	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
	glBindTexture(GL_TEXTURE_2D, texId);

	glBegin(GL_TRIANGLES);
		glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
		glTexCoord2f(1, 0); glVertex3f(0, 1, 0);
		glTexCoord2f(0, 1); glVertex3f(1, 0, 0);
	glEnd();

	glutSwapBuffers();
}

void gen(){
	for(int i = 0; i < 100; i++){
		for(int j = 0; j < 100; j++){
			int* ch = (int*)(tex + i * 100 + j);
			if(i / 5 % 2 == 0 || j / 5 % 2 == 0){
				*ch = 255 << 24;  // ABGR
			}else{
				*ch = -1;
			}
		}
	}
}

void init(){
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60, 1, 0.01f, 100);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_TEXTURE_2D);

	//产生一个材质
	glGenTextures(1, &texId);
	glBindTexture(GL_TEXTURE_2D, texId);
	gen();

	//必须要这几句,否则纹理无法显示
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 100, 100, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex);

}


int main(int argc, char** argv){

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
	glutInitWindowSize(800, 800);
	glutInitWindowPosition(100, 100);
	glutCreateWindow("my dear window");
	glutDisplayFunc(display);
	glutIdleFunc(display);
	init();
	glutMainLoop();

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值