如何在使用glDrawElements渲染的3d立方体上正确映射纹理坐标?

时间:2016-07-01 04:08:16

标签: c++ opengl 3d textures texture-mapping

我最近学会了如何在OpenGL中进行纹理处理。我一直在做的是这样的事情:

GLfloat vertexdata = {
    -1.0f, -1.0f, 0.0f,    0.0, 0.0,  //first three are xyz, next two are tex coords
    0.0f, 1.0f, 0.0f,      0.5f, 1.0f, 
    ...
};

然后我将其缓冲到gpu,创建/缓冲区索引,并创建一个VAO obj并使用glDrawElements进行绘制。现在这对于像三角形或正方形这样的东西很有用,问题是现在我正在尝试绘制一个立方体。由于某种原因,这不是一个正确的工作。那是为什么?

顶点数据:

static GLfloat data[] = {

    0.5f, 0.5f, 0.5f,      1.0f, 1.0f,
    0.5f, -0.5f, 0.5f,     1.0f, 0.0f,
    -0.5f, -0.5f, 0.5f,    0.0f, 0.0f,
    -0.5f, 0.5f, 0.5f,     0.0f, 1.0f,

    0.5f, 0.5f, -0.5f,     1.0f, 1.0f,
    0.5f, -0.5f, -0.5f,    1.0f, 0.0f,
    -0.5f, -0.5f, -0.5f,   0.0f, 0.0f,
    -0.5f, 0.5f, -0.5f,    0.0f, 1.0f,
};

static GLuint indices[] = {
    0, 1, 2, 3, 2, 0, //front face
    0, 4, 1, 4, 5, 1, //right face
    3, 2, 7, 2, 6, 7, //left face
    4, 5, 6, 7, 6, 4, //back face
    3, 7, 0, 0, 4, 7, //top face
    2, 1, 5, 2, 6, 5,  //bottom face
};

下图显示了结果(我打算让蝙蝠侠徽标在每张脸上出现一次,如下所示:http://learnopengl.com/img/getting-started/textures_combined2.pngenter image description here

0 个答案:

没有答案