我可以将单个顶点索引与具有所有属性(位置、法线、texCoord)的顶点缓冲区一起使用吗

can i use a single vertex index with a vertex buffer with all attributes (position, normal, texCoord)

我正在使用 COLLADA 加载 3D 资产,我想将位置、法线和纹理坐标数据交织到一个结构数组中,并使用顶点索引绘制对象,但是顶点属性的数量不同(例如:位置有 24 个值,法线有 36 个值等),我能够通过将属性重新排列到预定义的结构数组中来加载模型,但是这次我必须在不使用索引缓冲区的情况下加载模型,是否可以交错这些属性放入一个数组并使用索引缓冲区?什么是加载模型的最佳方法,以提供最佳性能增益。

我的结构看起来像这样

struct vertexAttribs
{
    glm::vec3 position;
    glm::vec3 normals;
    glm::vec2 texCoord;
}

使用索引缓冲区是一个孤注一掷的交易。要么所有属性都使用索引缓冲区,要么没有属性使用它。

你会有一个 VkVertexInputBindingDescriptionstride = sizeof(vertexAttribs) 和一个 VkVertexInputAttributeDescription 用于其中的每个属性,并使用相同的匹配 offsets 和 formats binding 作为 VkVertexInputBindingDescription.