代码之家  ›  专栏  ›  技术社区  ›  willeM_ Van Onsem

具有应用于顶点和法线的索引的元素

  •  1
  • willeM_ Van Onsem  · 技术社区  · 14 年前

    如果有两个数组(一个用于法线,一个用于顶点)并且使用顶点和法线之间交错的索引缓冲区,是否可以使用gldravelements方法。

    // 8 of vertex coords
    GLfloat vertices[] = {...};
    // 6 of normal vectors
    GLfloat normals[] = {...};
    // 48 of indices (even are vertex-indices, odd are normal-indices)
    GLubyte indices[] = {0,0,1,0,2,0,3,0,
                         0,1,3,1,4,1,5,1,
                         0,2,5,2,6,2,1,2,
                         1,3,6,3,7,3,2,3,
                         7,4,4,4,3,4,2,4,
                         4,5,7,5,6,5,5,5};
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, vertices);
    glNormalPointer(3, GL_FLOAT, 0, normals);
    glDrawElements(GL_QUADS,...);//?see Question
    
    1 回复  |  直到 14 年前
        1
  •  4
  •   akira    14 年前

    不,看到了吗 documentation 属于 glDrawElements()

    glInterleavedArrays (见 here

    float data[] = { v1, v2, v3, n1, n2, n3 .... };
    glInterleavedArrays(GL_N3F_V3F, 0, data);
    glDrawElements(...);
    

    或通过:

    float data[] = { v1, v2, v3, n1, n2, n3 };
    glVertexPointer(3, GL_FLOAT, sizeof(float) * 3, data);
    glNormalPointer(3, GL_FLOAT, sizeof(float) * 3, data + sizeof(float) * 3);
    glDrawElements(...);
    

    glInterleavedArrays() 只是一些糖而已 glinterleavedarray() 还有朋友。