欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenGl之纹理

程序员文章站 2022-07-04 10:20:48
...

纹理

定义

纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。

纹理坐标

为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。

纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角

纹理环绕方式

当把纹理的坐标设置到范围之外的时候,将会重复这个纹理。

纹理过滤

加载与创建纹理

纹理的加载

使用第三方库加载即可,只要获取到图像的数据就行了 此处使用 stbiImage库
/#define STB_IMAGE_IMPLEMENTATION
/#include “stb_image.h”//纹理渲染头文件

生成纹理

int width, height, nrChannels;
auto data = stbi_load("res/wood.jpg", &width, &height, &nrChannels, 0);
unsigned int texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);//创建一个2D纹理
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(data);//释放纹理内存

使用纹理