【问题标题】:Texture Mapping a Pyramid纹理映射金字塔
【发布时间】:2021-06-26 23:03:03
【问题描述】:

我正在尝试对我绘制的金字塔进行纹理处理。我正在尝试映射一个在所有侧面都具有相同方向的砖纹理,但是到目前为止我尝试过的所有纹理坐标都使我在金字塔的某些面上具有正确的方向,而在其他方面则具有翻转的方向。所附图片显示了我所指的内容,我试图让金字塔的所有面都具有如图所示的“正确”方向

我认为这是我的纹理坐标的问题。

这是我正在使用的顶点和纹理坐标:

GLfloat verts[] = {
        // Vertex Positions    // texture coords 
         0.5f,  0.5f, 0.0f,     1.0f, 1.0f, // Top Right Vertex 
         0.5f, -0.5f, 0.0f,     1.0f, 0.0f, // Bottom Right Vertex 

        -0.5f, -0.5f, 0.0f,      0.0f, 0.0f, // Bottom Left Vertex 
        -0.5f,  0.5f, 0.0f,      0.0f, 1.0f, // Top Left Vertex 

        
        0.0f, 0.0f, 1.0f,        0.5f, 0.5f// Pyramid top vertex 
    };

【问题讨论】:

    标签: opengl 3d textures texture-mapping


    【解决方案1】:

    您可能必须为每个顶点使用多个纹理坐标。基础的纹理坐标为:

    float basetexcoords[] = {
    1.0f, 1.0f,
    1.0f, 0.0f,
    0.0f, 0.0f,
    0.0f, 1.0f
    };
    

    每边的纹理坐标为:

    float sidetexcoords[] = {
    0.5f, 0.5f,
    1.0f, 0.0f,
    0.0f, 0.0f
    };
    

    一种可能的方法是在verts 数组中重复相同的顶点位置。虽然不是非常节省内存并且相当糟糕,但它是一个简单的解决方案。

    它的外观如下:

    float verts[] = {
    -0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
    -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
    0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
    0.5f, 0.5f, 0.0f, 1.0f, 1.0f,
    -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
    0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.5f, 0.5f,
    -0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
    0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.5f, 0.5f,
    0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
    0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.5f, 0.5f,
    0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
    -0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.5f, 0.5f,
    -0.5f, 0.5f, 0.0f, 0.0f, 0.0f,
    -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多