OpenGL中显示背景贴图

转载请声明出处:http://blog.csdn.net/xiaoge132/article/details/51448326

demo下载

导言:

通常在OpenGL里面绘制的都是默认的黑色背景,对于有些时候,太过于单调了,现在我们可以对它加上背景,实现一个不错的图形.

在网上看到人家要实现星空图,找到一张星空图片贴在背景上面.

看一下效果图




原理:

看一下下面的这张图:


这是OpenGL里面摄像机的原理图,我们要绘制的物体在离摄像机近的地方,那个离摄像机远的矩形,就是要绘制背景的地方.


先定义个导入图片的函数

LoadTexture(const char * filename, int width, int height)
{

	GLuint texture;
	unsigned char * data;
	FILE * file;

	//读文件
	file = fopen(filename, "rb");
	if (file == NULL) return 0;

	data = (unsigned char *)malloc(width * height * 3);
	fread(data, width * height * 3, 1, file);
	fclose(file);

	glGenTextures(1, &texture);
	glBindTexture(GL_TEXTURE_2D, texture);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);


	//线性滤图
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);


	
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

	//生成纹理
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
	free(data); //释放纹理
	return texture; 
	
}

在后面我们就可以调用这个函数来实现纹理的导入了.


接着再定义个设置背景的函数

Background()
{

	glBindTexture(GL_TEXTURE_2D, texture);

	glBegin(GL_QUADS);
	glTexCoord2d(0.0, 0.0); glVertex2d(-1.0, -1.0);
	glTexCoord2d(1.0, 0.0); glVertex2d(+1.0, -1.0);
	glTexCoord2d(1.0, 1.0); glVertex2d(+1.0, +1.0);
	glTexCoord2d(0.0, 1.0); glVertex2d(-1.0, +1.0);
	glEnd();
        return ;
}

最后在绘制函数里面调用并调整大小,就可以得到我们想要的背景了.

	glDisable(GL_DEPTH_TEST);
	glLoadIdentity();

	
	//导入纹理
	texture = LoadTexture("C:\\Users\\Administrator\\Desktop\\zuixin\\zuixin\\UI\\xiaoge.bmp", 640, 640); 
	
	glEnable(GL_TEXTURE_2D);

	glPushMatrix();
		glScalef(100, 70, 1);
		glTranslatef(0, 0, -150);
		Background();					//背景方块
	glPopMatrix();

俗话说的好,不给源码的博客不是好博客

demo下载



  • 16
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值