纹理映射与旋转

1. 纹理映射

在 OpenGL 中,可以使用 sampler2D 进行 2D 纹理采样:

1
uniform sampler2D ourTexture;

该变量用于在片元着色器中获取 2D 纹理的像素值。


2. 加入纹理过滤与旋转

步骤 1:转换为立方体

  • 矩形 -> 立方体:原始矩形的顶点坐标扩展为 24 个顶点,以适应立方体的六个面。
  • 每个面使用四个顶点,并绑定对应的纹理坐标。

示例顶点数据(包含位置和纹理坐标):

1
2
3
4
5
6
7
8
GLfloat vertices[] = {
// 位置 // 纹理坐标
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f,
0.5f, -0.5f, -0.5f, 1.0f, 0.0f,
0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 1.0f,
// 其余五个面省略...
};

步骤 2:应用纹理过滤

为了提升渲染质量,可以使用 线性过滤

1
2
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

这样,在放大或缩小时,纹理会进行平滑过渡,避免像素化。


步骤 3:添加旋转

使用 glm::rotate 在片元着色器中动态旋转:

1
model = glm::rotate(model, (GLfloat)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));

这里 glfwGetTime() 让物体随着时间旋转,旋转轴为 (0.5, 1.0, 0.0)


图片1
这样,我们就成功将纹理映射应用到了立方体,并添加了旋转效果!🚀