index | 要获取的顶点缓冲区(某些网格可能有多个)。参见 vertexBufferCount。 |
IntPtr 指向底层图形 API 顶点缓冲区的指针。
检索指向顶点缓冲区的本地(底层图形 API)指针。
使用此函数检索与网格顶点缓冲区对应的指针/句柄,因为它在本地图形 API 中表示。这可用于从 原生代码插件 启用网格操作。
大多数网格仅包含一个顶点缓冲区,但有些(例如某些平台上的蒙皮网格)可能包含多个。使用 vertexBufferCount 查询顶点缓冲区数量。
顶点缓冲区的数据布局通常取决于许多因素,特别是对于压缩的网格(请参阅 播放器设置 > 网格压缩设置)并标记为不可读的网格。对于简单的情况,布局通常如下所示float3 position
(12 字节)
float3 normal
(12 字节)
byte4 color32
(4 字节)或 float4 color
(16 字节)
float2|float3|float4 uv
(8、12 或 16 字节)
float2|float3|float4 uv2
(8、12 或 16 字节)
float2|float3|float4 uv3
(8、12 或 16 字节)
float2|float3|float4 uv4
(8、12 或 16 字节)
float4 tangent
(16 字节)
所有顶点组件都是可选的,例如,网格可能只包含位置 + 法线 + 一个 2D 纹理坐标。在这种情况下,缓冲区中的顶点数据大小将为 12+12+8=32 字节。
您可以使用 HasVertexAttribute、GetVertexAttributeOffset、GetVertexBufferStride 方法查询有关网格顶点属性布局的信息。
返回的数据类型取决于底层图形 API
对于大多数用例(即从原生代码写入网格数据),您需要在获取本地缓冲区指针之前将网格标记为“动态”(请参阅 MarkDynamic)。通常,这会将缓冲区切换为可由 CPU 写入。
请注意,在使用多线程渲染时调用此函数将与渲染线程同步(一项缓慢的操作),因此最佳实践是在初始化时仅设置必要的缓冲区指针。
其他资源:原生代码插件、GetNativeIndexBufferPtr、vertexBufferCount、vertexCount。