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);//释放纹理内存
使用纹理
上一篇: openGL之材质
下一篇: LINQ简单使用与XML的转换