Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

Mesh.SetVertexBufferData

Declaration

public void SetVertexBufferData(NativeArray<T> data, int dataStart, int meshBufferStart, int count, int stream, Rendering.MeshUpdateFlags flags);
public void SetVertexBufferData(T[] data, int dataStart, int meshBufferStart, int count, int stream, Rendering.MeshUpdateFlags flags);
public void SetVertexBufferData(List<T> data, int dataStart, int meshBufferStart, int count, int stream, Rendering.MeshUpdateFlags flags);

Параметры

Параметр Описание
данные Исходный контейнер, из которого копируются данные вершин.
dataStart Первый элемент в данных, из которых будет копироваться.
meshBufferStart Первый элемент в вершинном буфере сетки для получения данных.
Количество Число элементов типа T, копируемых из контейнера data в буфер Mesh.
поток Поток вершинного буфера, для которого устанавливаются данные (по умолчанию 0). Значение должно находиться в диапазоне от 0 до 3.
флаги Флаги, управляющие поведением функции, см. MeshUpdateFlags.

Описание

Устанавливает данные внутри потока вершинного буфера, копируя элементы из исходного контейнера в целевой диапазон внутри буфера Mesh.

Простое использование Mesh скриптов API предполагает использование функций, таких как vertices, normals для настройки данных вершин.

Для более сложных случаев использования, требующих максимальной производительности, вы можете использовать расширенный API, который имеет функции, такие как SetSubMesh, SetIndexBufferParams, SetIndexBufferDataи SetVertexBufferParams. Этот расширенный API дает доступ к базовым структурам данных сетки, которые в основном работают с необработанными буферами индекса, буферами вершин и данными подмножеств сетки.

Вы можете использовать SetVertexBufferData для установки данных вершин напрямую, без использования преобразований формата для каждого атрибута вершины. Предоставляемый макет данных должен соответствовать макету вершин сетки (см. SetVertexBufferParams, GetVertexAttributes). Частичное обновление данных также возможно с помощью параметров dataStart, meshBufferStart, count.

using UnityEngine;
using UnityEngine.Rendering;
using Unity.Collections;

public class Example : MonoBehaviour { // Vertex with FP32 position, FP16 2D normal and a 4-byte tangent. // In some cases StructLayout attribute needs // to be used, to get the data layout match exactly what it needs to be. [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] struct ExampleVertex { public Vector3 pos; public ushort normalX, normalY; public Color32 tangent; }

void Start() { var mesh = new Mesh(); // specify vertex count and layout var layout = new[] { new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float16, 2), new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.UNorm8, 4), }; var vertexCount = 10; mesh.SetVertexBufferParams(vertexCount, layout);

// set vertex data var verts = new NativeArray<ExampleVertex>(vertexCount, Allocator.Temp);

// ... fill in vertex array data here...

mesh.SetVertexBufferData(verts, 0, 0, vertexCount); } }

Дополнительные ресурсы: ,SetVertexBufferParams,, ,SetIndexBufferParams,, ,SetIndexBufferData,, ,SetSubMesh,, ,MeshUpdateFlags,, ,AcquireReadOnlyMeshData,.