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

Texture3D.GetPixelData

Declaration

public NativeArray<T> GetPixelData(int mipLevel);

Параметры

Параметр Описание
mipLevel Уровень mipmap для чтения. Диапазон 0 до текстуры Texture.mipmapCount. Значение по умолчанию 0.

Возвращаемое значение

NativeArray<T> Основной массив, который указывает непосредственно на буфер данных текстуры в памяти CPU.

Описание

Получает необработанные данные из текстуры.

Этот метод возвращает NativeArray<T0> который указывает непосредственно на данные текстуры на CPU и имеет размер уровня mipmap. Массив не содержит копию данных, поэтому GetPixelData не выделяет памяти.

Например, если текстура имеет размер 16 × 16 × 16 пикселей и формат RGBA32, и вы установили mipLevel до 1, метод возвращает массив с 512 элементами (8 × 8 × 8 пикселей) и размером 2048 байт, если вы используете Color32 для T (4 байта на пиксель). Вы можете использовать экспериментальный GraphicsFormatUtility.ComputeMipmapSize API для вычисления размера уровня mipmap.

Обычно структура используется для T который соответствует структуре пикселя в текстуре, например, Color32 если формат текстуры использует RGBA пикселей в 32-битном формате, например TextureFormat.RGBA32.

Вы можете читать и записывать в возвращенный массив, чтобы получить и изменить данные непосредственно в памяти CPU. Если вы записываете в массив, то затем вы должны вызвать Apply метод загрузки текстуры на GPU.

Используйте возвращенный массив немедленно. Если вы сохраняете массив и используете его позже, он может не указывать на правильное место в памяти, если текстура была изменена или обновлена.

Если вы используете маленький тип для T такие как byte, GetPixelData может не сработать, поскольку NativeArray превышает максимальную длину (Int32.MaxValue). Чтобы этого избежать, используйте более крупный тип или структуру.

GetPixelData бросает исключение, когда оно не срабатывает.

Дополнительные ресурсы: Apply, SetPixels, SetPixels32, GetPixelData.

using UnityEngine;

public class ExampleScript : MonoBehaviour { public void Start() { // Create a 3D texture var m_Texture3D = new Texture3D(16, 16, 16, TextureFormat.RGBA32, true);

// Use GetPixelData to get an array that points to mipmap level 1 var mip1Data = m_Texture3D.GetPixelData<Color32>(1);

// Fill pixels in mipmap level 1 with white for (int i = 0; i < mip1Data.Length; i++) { mip1Data[i] = new Color32(255, 255, 255, 255); }

// Copy the texture changes to the GPU m_Texture3D.Apply(false); } }