opengl学习之手忙脚乱写毕设(三)

本文介绍了纹理映射的原理,包括设置UV坐标来指定图形的颜色,以及纹理环绕和过滤方式。GL_NEAREST和GL_LINEAR用于纹理过滤,glTexImage2D用于加载图像数据到纹理。此外,文章还强调了纹理图尺寸应遵循2^N的规律,以适应硬件要求。另外,提到了在使用OpenGL时,可能需要GLM库进行空间变换。
摘要由CSDN通过智能技术生成

个人学习笔记

今天学纹理!!学不会不睡觉
chapter3.0:纹理
纹理映射的原理:
由于图片的长宽各不相同,所以设置宽高从0开始,1结束,便于插值。给我们想画的图形的每个顶点设置uv坐标,就可以通过 uv坐标*图片实际的长宽 来知道到底用图片的哪个点上的颜色
在这里插入图片描述
纹理环绕方式:当顶点uv坐标超出默认范围0-1时,选择不同的选项以获取不同的视觉效果输出。
在这里插入图片描述
纹理过滤:纹理像素低时采用的纹理过滤方式,GL_NEAREST和GL_LINEAR
texture unit:texture锚定点,用来分别指认很多纹理贴图,如GL_TEXTURE0-GL_TEXTURE15

实战:
在fragmentshader中调取,用纹理坐标找到像素,对输出颜色赋值

FragColor = texture(ourTexture, TexCoord);//通过texcoord纹理坐标,取出ourtexture这张图片中的对应像素点,赋值给fragcolor输出颜色
_pImage = ffImage::readFromFile("res/wall.jpg");//读取res文件夹中的wall图片当做纹理
 glGenTextures(1, &_texture);//先生成
glBindTexture(GL_TEXTURE_2D, _texture);//再bind,平面纹理
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_NEAREST);//设置纹理采样方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _pImage->getWidth(), _pImage->getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, _pImage->getData());
//读入,存储格式GL_RGBA,宽度,高度,传入图片数据

注:摘抄一段此文中的内容,可以解释为什么有时候纹理图在程序中显示为黑白色https://www.cnblogs.com/lookof/archive/2009/12/30/1636289.html
纹理图一般也是正方形,且边长应该满足2^N的规律,比如纹理图尺寸可以为4x4,8x8,16x16,… 512x512。 为什么纹理图是这样的规律?这是由于硬件的原因。把纹理图交给渲染API处理时,显卡硬件便接手此事。“纹理贴图”属于硬件渲染管线中的一个环节,而显卡做此操作时,要求提供的纹理图边长应该是2^N。

chapter3.1:空间
因为摄像机需要用到变换,所以下载一个相关的GLM 文件。具体操作见https://blog.csdn.net/Wonz5130/article/details/83116009
https://github.com/g-truc/glm/releases/tag/0.9.8.0

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值