我试图提高一些网格生成的性能,所以我想从使用SetVertices()改为SetVertexBufferParam/Data模式。这就是我所拥有的:
// verts is a NativeArray<float3>
// numVerts is the length of verts
Mesh mesh = new Mesh();
// this works and creates a series of flat faces
mesh.SetVertices(verts);
// this creates a mesh but it's very wrong
mesh.SetVertexBufferParams(numVerts,
new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3),
new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3));
mesh.SetVertexBufferData(verts, 0, 0, numVerts);
// afterwards I set indices, norms, etc.使用SetVertexBufferData所期望的结果与结果:


我做错什么了?
发布于 2022-08-24 07:23:24
参见Mesh.SetVertexBufferData,特别是VertexAttributeDescriptor
通常你使用你自己的顶点结构。你正在传递一个布局
new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3),
new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3)它需要一个由6×Float32组成的输入结构,例如。
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct YourVertex
{
public Vector3 position;
public Vector3 normal;
}但实际上,您只提供了float3数据,这些数据仅足以
new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3)在本机数组中,您基本上只需要获得
float, float, float, float, float, float, float, float, float, float, ...这是布局的工作,确定如何准确地解释这些内容。因此,由于您告诉布局需要一个3x Float32位置+3x Float32法线,所以它试图始终将3个浮点数应用到该位置,并将3个浮点数应用到正常位置。
=>实际上属于下一个顶点的这3种浮标在正常情况下有点“丢失”/应用不当
https://stackoverflow.com/questions/73466626
复制相似问题