【问题标题】:OpenGL ES : Mapping texture on a cubeOpenGL ES:在立方体上映射纹理
【发布时间】:2012-09-19 12:29:04
【问题描述】:

我正在制作一个天空盒(在它的 6 个面上每个面都有不同纹理的立方体),这就是我所做的:

我定义了我的顶点:

const float vertices[8u][3u] = {
    {-1.0f, -1.0f, -1.0f},
    {-1.0f, -1.0f, 1.0f},
    {-1.0f, 1.0f, -1.0f},
    {-1.0f, 1.0f, 1.0f},
    {1.0f, -1.0f, -1.0f},
    {1.0f, -1.0f, 1.0f},
    {1.0f, 1.0f, -1.0f},
    {1.0f, 1.0f, 1.0f}
};

我根据顶点数组定义我的三角形(四边形在 ES 版本中不可用):

const unsigned short elements[8u][3u] = {
    {4u, 6u, 2u},
    {4u, 0u, 2u},
    {6u, 3u, 2u},
    {6u, 3u, 7u},
    {7u, 1u, 5u},
    {7u, 1u, 3u},
    {5u, 0u, 4u},
    {5u, 0u, 1u}
};

据我所知,我现在需要定义纹理坐标,我尝试了很多不同的方法,现在看起来像这样:

float texCoords[4u][2u] = {
    {0.0f, 0.0f},
    {1.0f, 0.0f},
    {1.0f, 1.0f},
    {0.0f, 1.0f}
};

编辑:天空盒绝对不会显示自己,我只看到一个 2d 平面图像,其中我的纹理以一种奇怪的方式重复。绝对没有立方体

绘图部分正在工作,我认为我的问题是基于纹理坐标,对吗?我做错了什么?

【问题讨论】:

  • 您的问题到底是什么?你写了那幅画作品,但不是,什么不起作用。
  • 我的意思是绘图功能应该可以工作。我的问题是显示器绝对不是一个立方体,而是一个 2D 平面图像,我的纹理在其上随机重复
  • 好吧,没有截图,也没有显示功能的源代码,我只能做比推测更糟糕的事情。我需要您提供更多信息,以便提供有用的帮助。

标签: opengl-es textures texture-mapping


【解决方案1】:

我说的对吗?我做错了什么?

凝视着我的水晶球……不,我不明白你的问题是什么,而且你没有告诉我们。

无论如何,你的纹理坐标确实是错误的,你的数组只包含 4 个。但是你有一个 8 个顶点的立方体。然而,要让它成为一个天空盒,您需要一个 24 个顶点的立方体,因为纹理坐标是顶点的一部分,对于由 6 个纹理组成的天空盒,您不能在某些顶点上共享纹理坐标。

但是我建议您改用立方体贴图纹理,它有一个很大的好处,您可以使用顶点坐标,因为您已经拥有它们,也可以用于纹理坐标。

【讨论】:

    【解决方案2】:

    抱歉,我的问题不清楚。 我真的不明白纹理坐标的概念是什么。现在我想我做到了: 告诉你希望每张脸被你的纹理填满多少。我的例子是完全填充。 这是我的新(看起来像)工作代码,以防它可以帮助某人:

    //The 24 vertex of the 3d cube (the skybox)
    static const float vertices[24u][3u] = {
            {-1.0f, -1.0f, -1.0f}, //face 1 (front)
            {-1.0f, 1.0f, -1.0f},
            {1.0f, -1.0f, -1.0f},
            {1.0f, 1.0f, -1.0f},
    
            {1.0f, 1.0f, 1.0f}, //face 2 (back)
            {1.0f, -1.0f, 1.0f},
            {-1.0f, 1.0f, 1.0f},
            {-1.0f, -1.0f, 1.0f},
    
            {-1.0f, -1.0f, -1.0f}, //face 3 (left)
            {-1.0f, -1.0f, 1.0f},
            {-1.0f, 1.0f, -1.0f},
            {-1.0f, 1.0f, 1.0f}, 
    
            {1.0f, 1.0f, 1.0f}, //face 4 (right)
            {1.0f, 1.0f, -1.0f},
            {1.0f, -1.0f, 1.0f},
            {1.0f, -1.0f, -1.0f},
    
            {-1.0f, 1.0f, -1.0f}, // face 5 (up)
            {-1.0f, 1.0f, 1.0f},
            {1.0f, 1.0f, 1.0f},
            {1.0f, 1.0f, -1.0f},
    
            {1.0f, -1.0f, 1.0f}, //face 6 (bot)
            {1.0f, -1.0f, -1.0f},
            {-1.0f, -1.0f, -1.0f},
            {-1.0f, -1.0f, 1.0f},
    };
    
    //Coordinate of the textures
    float texCoords[24u][2u] = {
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},
    
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},
    
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},
    
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},
    
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},
    
            {0.0f, 0.0f},
            {0.0f, 1.0f},
            {1.0f, 1.0f},
            {1.0f, 0.0f},        
    };
    
    //Defining triangles based on the vertice array indexes
    const unsigned short elements[12u][3u] = {
            {0, 2, 1},
            {2, 1, 3},
    
            {4, 5, 6},
            {5, 6, 7},
    
            {8, 9, 10},
            {9, 10, 11},
    
            {12, 13, 14},
            {13, 14, 15},
    
            {16, 17, 18},
            {17, 18, 19},
    
            {20, 21, 22},
            {21, 22, 23}
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多