我可以将单个顶点索引与具有所有属性(位置、法线、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;
}
使用索引缓冲区是一个孤注一掷的交易。要么所有属性都使用索引缓冲区,要么没有属性使用它。
你会有一个 VkVertexInputBindingDescription
和 stride = sizeof(vertexAttribs)
和一个 VkVertexInputAttributeDescription
用于其中的每个属性,并使用相同的匹配 offset
s 和 format
s binding
作为 VkVertexInputBindingDescription
.
我正在使用 COLLADA 加载 3D 资产,我想将位置、法线和纹理坐标数据交织到一个结构数组中,并使用顶点索引绘制对象,但是顶点属性的数量不同(例如:位置有 24 个值,法线有 36 个值等),我能够通过将属性重新排列到预定义的结构数组中来加载模型,但是这次我必须在不使用索引缓冲区的情况下加载模型,是否可以交错这些属性放入一个数组并使用索引缓冲区?什么是加载模型的最佳方法,以提供最佳性能增益。
我的结构看起来像这样
struct vertexAttribs
{
glm::vec3 position;
glm::vec3 normals;
glm::vec2 texCoord;
}
使用索引缓冲区是一个孤注一掷的交易。要么所有属性都使用索引缓冲区,要么没有属性使用它。
你会有一个 VkVertexInputBindingDescription
和 stride = sizeof(vertexAttribs)
和一个 VkVertexInputAttributeDescription
用于其中的每个属性,并使用相同的匹配 offset
s 和 format
s binding
作为 VkVertexInputBindingDescription
.