gpt4 book ai didi

opengl - 如何对用三角形绘制的 "perfect cube"进行纹理处理?

转载 作者:行者123 更新时间:2023-12-02 09:37:34 24 4
gpt4 key购买 nike

我正在尝试在立方体上映射纹理,该立方体基本上是一个具有 8 个顶点和 14 个索引的三角形带:

static const GLfloat vertices[8] =
{
-1.f,-1.f,-1.f,
-1.f,-1.f, 1.f,
-1.f, 1.f,-1.f,
-1.f, 1.f, 1.f,
1.f,-1.f,-1.f,
1.f,-1.f, 1.f,
1.f, 1.f,-1.f,
1.f, 1.f, 1.f
};

static const GLubyte indices[14] =
{
2, 0, 6, 4, 5, 0, 1, 2, 3, 6, 7, 5, 3, 1
};

正如你所看到的,它开始用 4 个索引 2, 0, 6, 4 绘制背面,然后用 3 个索引 5, 0, 1 绘制底部,然后从仅三角形开始 1, 2, 3 是左侧的三角形,3, 6, 7 是顶部的三角形,依此类推...

我有点迷失如何在这个立方体上映射纹理。这是我的纹理(你明白了):

cube texture

我设法让背面有纹理,并且以某种方式可以在前面添加一些东西,但其他 4 个面完全困惑,我有点困惑着色器如何处理与纹理坐标相关的三角形。

我能达到的最好成绩是:

my minion cube

您可以清楚地看到侧面的三角形。这些是我的纹理坐标:

static const GLfloat texCoords[] = {
0.5, 0.5,
1.0, 0.5,
0.5, 1.0,
1.0, 1.0,
0.5, 0.5,
0.5, 1.0,
1.0, 0.5,
1.0, 1.0,
// ... ?
};

但是每当我尝试添加更多坐标时,它都会完全创建一些不同的东西,我无法解释真正的原因。知道如何改进吗?

最佳答案

您遇到的心理障碍是假设您的立方体只有 8 个顶点。是的,核心位置只有8个。但是与该角相邻的每个面显示图像的不同部分,因此在该角处具有不同的纹理坐标。

顶点是

的元组
  • 位置
  • 纹理坐标
  • ...
  • 您可以提出的任何其他属性

一旦其中一个属性发生变化,您就会处理一个完全不同的顶点。这对您来说意味着您要处理 8 个角位置,但每个角有 3 个不同的顶点,因为该角处存在具有不同纹理坐标的相交面。因此,您实际上需要 24 个顶点来组成 6 个不同的面,而这些面根本不共享任何顶点。

为了让初学者更容易,不要将顶点位置和纹理坐标放入不同的数组中。而是这样写:

struct vertex_pos3_tex2 {
float x,y,z;
float s,t;
} cube_vertices[24] =
{
/* 24 vertices of position and texture coordinate */
};

关于opengl - 如何对用三角形绘制的 "perfect cube"进行纹理处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25503789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com