SurfaceTool
Успадковує: RefCounted < Object
Інструмент для створення геометрії.
Опис
SurfaceTool використовується для побудови Mesh шляхом визначення атрибутів вершин окремо. Його можна використовувати для створення Mesh зі сценарію. Перед викликом add_vertex() потрібно додати всі властивості, крім індексів. Наприклад, щоб додати кольори вершин і UV:
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
st.set_color(Color(1, 0, 0))
st.set_uv(Vector2(0, 0))
st.add_vertex(Vector3(0, 0, 0))
var st = new SurfaceTool();
st.Begin(Mesh.PrimitiveType.Triangles);
st.SetColor(new Color(1, 0, 0));
st.SetUV(new Vector2(0, 0));
st.AddVertex(new Vector3(0, 0, 0));
Наведений вище SurfaceTool тепер містить одну вершину трикутника, яка має UV-координату та вказаний Color. Якщо іншу вершину було додано без виклику set_uv() або set_color(), тоді будуть використані останні значення.
Атрибути вершин необхідно передати перед викликом add_vertex(). Невиконання цього призведе до помилки під час внесення інформації про вершини до сітки.
Крім того, атрибути, які використовуються перед додаванням першої вершини, визначають формат сітки. Наприклад, якщо ви додаєте UV лише до першої вершини, ви не можете додати колір до жодної з наступних вершин.
Дивіться також ArrayMesh, ImmediateMesh і MeshDataTool для створення процедурної геометрії.
Примітка: Godot використовує порядок намотування за годинниковою стрілкою для передніх граней примітивних режимів трикутника.
Посібники
Методи
void |
|
void |
add_triangle_fan(vertices: PackedVector3Array, uvs: PackedVector2Array = PackedVector2Array(), colors: PackedColorArray = PackedColorArray(), uv2s: PackedVector2Array = PackedVector2Array(), normals: PackedVector3Array = PackedVector3Array(), tangents: Array[Plane] = []) |
void |
add_vertex(vertex: Vector3) |
void |
append_from(existing: Mesh, surface: int, transform: Transform3D) |
void |
begin(primitive: PrimitiveType) |
void |
clear() |
void |
create_from(existing: Mesh, surface: int) |
void |
create_from_arrays(arrays: Array, primitive_type: PrimitiveType = 3) |
void |
create_from_blend_shape(existing: Mesh, surface: int, blend_shape: String) |
void |
deindex() |
generate_lod(nd_threshold: float, target_index_count: int = 3) |
|
void |
generate_normals(flip: bool = false) |
void |
|
get_aabb() const |
|
get_custom_format(channel_index: int) const |
|
get_primitive_type() const |
|
get_skin_weight_count() const |
|
void |
index() |
void |
|
void |
set_bones(bones: PackedInt32Array) |
void |
|
void |
set_custom(channel_index: int, custom_color: Color) |
void |
set_custom_format(channel_index: int, format: CustomFormat) |
void |
set_material(material: Material) |
void |
set_normal(normal: Vector3) |
void |
set_skin_weight_count(count: SkinWeightCount) |
void |
set_smooth_group(index: int) |
void |
set_tangent(tangent: Plane) |
void |
|
void |
|
void |
set_weights(weights: PackedFloat32Array) |
Переліки
enum CustomFormat: 🔗
CustomFormat CUSTOM_RGBA8_UNORM = 0
Ліміти діапазону даних, переданих до set_custom(), щоб скасувати нормалізовано 0 до 1, що зберігається в 8 біт на каналі. Mesh.ARRAY_CUSTOM_RGBA8_UNORM.
CustomFormat CUSTOM_RGBA8_SNORM = 1
Ліміти діапазону даних, переданих до set_custom(), щоб підписано нормалізовано -1 до 1, що зберігається в 8 бітах на каналі. Mesh.ARRAY_CUSTOM_RGBA8_SNORM.
CustomFormat CUSTOM_RG_HALF = 2
Зберігати дані, передані до set_custom() як половина точності плавок, і використовувати тільки червоні і зелені кольорові канали. Див. Mesh. ARRAY_CUSTOM_RG_HALF.
CustomFormat CUSTOM_RGBA_HALF = 3
Зберігати дані, передані в set_custom() як половина точності плавок і використовує всі кольорові канали. Див. Mesh. ARRAY_CUSTOM_RGBA_HALF.
CustomFormat CUSTOM_R_FLOAT = 4
Зберігати дані, передані до set_custom(), як повно прецизійних плавок, і використовує тільки червоний колірний канал. Див. Mesh. ARRAY_CUSTOM_R_FLOAT.
CustomFormat CUSTOM_RG_FLOAT = 5
Зберігати дані, передані до set_custom(), як повноточні плавки, і використовувати тільки червоні і зелені кольорові канали. Див. Mesh. ARRAY_CUSTOM_RG_FLOAT.
CustomFormat CUSTOM_RGB_FLOAT = 6
Зберігати дані, передані в set_custom(), як повноточні плавки, і використовувати тільки червоні, зелені і сині кольорові канали. Див. Mesh. ARRAY_CUSTOM_RGB_FLOAT.
CustomFormat CUSTOM_RGBA_FLOAT = 7
Зберігати дані, передані в set_custom(), як повноточні плавки, і використовувати всі кольорові канали. Подивитися Mesh.ARRAY_CUSTOM_RGBA_FLOAT.
CustomFormat CUSTOM_MAX = 8
Використовується для позначення відключення користувацького каналу.
enum SkinWeightCount: 🔗
SkinWeightCount SKIN_4_WEIGHTS = 0
Кожна окрема вершина може впливати лише на 4 кісткові маси.
SkinWeightCount SKIN_8_WEIGHTS = 1
Кожна окрема вершина може впливати на до 8 кісток.
Описи методів
Додати вершину індексувати масив, якщо ви використовуєте індексовані вершини. Не потрібно називати перед додаванням вершин.
void add_triangle_fan(vertices: PackedVector3Array, uvs: PackedVector2Array = PackedVector2Array(), colors: PackedColorArray = PackedColorArray(), uv2s: PackedVector2Array = PackedVector2Array(), normals: PackedVector3Array = PackedVector3Array(), tangents: Array[Plane] = []) 🔗
Вставляє трикутний віяло, що складається з масиву даних, у Mesh, що створюється.
Потрібно встановити тип примітиву на Mesh.PRIMITIVE_TRIANGLES.
void add_vertex(vertex: Vector3) 🔗
Вказати позицію поточного вершини. Повинен називатися після позначення інших властивостей вершини (наприклад, колір, УФ).
void append_from(existing: Mesh, surface: int, transform: Transform3D) 🔗
Додати вершини з заданої поверхні Mesh до поточного масиву вершин за допомогою заданого Transform3D.
void begin(primitive: PrimitiveType) 🔗
Зателефонуйте перед додаванням будь-яких вершин. Примітивний тип як аргумент (наприклад, Mesh. PRIMITIVE_TRIANGLES.
void clear() 🔗
Зніміть всю інформацію, отриману в поверхневий інструмент так далеко.
ArrayMesh commit(existing: ArrayMesh = null, flags: int = 0) 🔗
Повертає сконструйований ArrayMesh із поточної переданої інформації. Якщо наявний ArrayMesh передано як аргумент, буде додано додаткову поверхню до існуючого ArrayMesh.
Аргумент flags може бути порозрядним АБО Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS або Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.
Записує дані у тому ж форматі, що використовується методами ArrayMesh.add_surface_from_arrays(), ImporterMesh.add_surface() та create_from_arrays(). Таким чином, ви можете додатково обробляти дані сітки за допомогою API ArrayMesh або ImporterMesh.
void create_from(existing: Mesh, surface: int) 🔗
Створює вершину з існуючого Mesh.
void create_from_arrays(arrays: Array, primitive_type: PrimitiveType = 3) 🔗
Створює цей SurfaceTool з існуючих масивів вершин, таких як повернені методами commit_to_arrays(), Mesh.surface_get_arrays(), Mesh.surface_get_blend_shape_arrays(), ImporterMesh.get_surface_arrays() та ImporterMesh.get_surface_blend_shape_arrays(). Параметр primitive_type контролює тип даних сітки, за замовчуванням встановлюючи значення Mesh.PRIMITIVE_TRIANGLES.
void create_from_blend_shape(existing: Mesh, surface: int, blend_shape: String) 🔗
Створює хребтовий масив з вказаної форми блендера існуючої Mesh. Це може бути використана для отримання конкретної пози від форми блендера.
void deindex() 🔗
Видаліть індексний масив, розширивши діапазон вершини.
PackedInt32Array generate_lod(nd_threshold: float, target_index_count: int = 3) 🔗
Застаріло: This method is unused internally, as it does not preserve normals or UVs. Consider using ImporterMesh.generate_lods() instead.
Генерує рівень визначення (LOD) для заданого nd_threshold у лінійних одиницях (квадратний корінь з метрики квадратичної помилки), використовуючи не більше target_index_count indices.
void generate_normals(flip: bool = false) 🔗
Генерує нормалі з вершин, тому вам не потрібно робити це вручну. Якщо flip має значення true, отримані нормалі будуть інвертовані. generate_normals() слід викликати після генерації геометрії та перед фіксацією сітки за допомогою commit() або commit_to_arrays(). Для правильного відображення поверхонь, нанесених на карту нормалей, вам також доведеться генерувати дотичні за допомогою generate_tangents().
Примітка: generate_normals() працює, лише якщо для примітивного типу встановлено значення Mesh.PRIMITIVE_TRIANGLES.
Примітка: generate_normals() враховує гладкі групи. Щоб згенерувати згладжені нормалі, встановіть для згладженої групи значення більше або рівне 0 за допомогою set_smooth_group() або залиште згладжену групу за замовчуванням 0. Щоб створити плоскі нормалі, перед додаванням вершин встановіть згладжену групу на -1 за допомогою set_smooth_group().
void generate_tangents() 🔗
Генерує дотичний вектор для кожної вершини. Вимагає, щоб кожна вершина вже мала встановлені UV та нормалі (див. generate_normals()).
Повертає вісь-вирівнюючу коробку позицій вершини.
CustomFormat get_custom_format(channel_index: int) const 🔗
Повертає формат на замовлення channel_index (поточно до 4). Повернення CUSTOM_MAX якщо цей користувальницький канал невикористаний.
PrimitiveType get_primitive_type() const 🔗
Повертає тип геометрії сітки, наприклад Mesh.PRIMITIVE_TRIANGLES.
SkinWeightCount get_skin_weight_count() const 🔗
За замовчуванням повертає SKIN_4_WEIGHTS, щоб вказати, що використовується лише 4 впливи кісток на вершину.
Повертає SKIN_8_WEIGHTS, якщо використовується до 8 впливів..
Примітка: Ця функція повертає перерахування, а не точну кількість вагових коефіцієнтів.
void index() 🔗
Подрібнює хребетний масив, створюючи індексний масив. Це може поліпшити продуктивність, уникаючи повторення вершини.
void optimize_indices_for_cache() 🔗
Оптимізуйте сортування трикутника для виконання. Вимагає, що get_primitive_type() Mesh.PRIMITIVE_TRIANGLES.
void set_bones(bones: PackedInt32Array) 🔗
Визначає масив кісток для використання для наступної вершини. bones має містити 4 цілі числа.
void set_color(color: Color) 🔗
Вкажіть Color для використання next vertex. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.
Примітка: Матеріал повинен мати BaseMaterial3D.vertex_color_use_as_albedo включений для кольору вершини, щоб бути видимим.
void set_custom(channel_index: int, custom_color: Color) 🔗
Налаштовує індивідуальне значення на цьому вершині channel_index.
set_custom_format() повинен бути викликаний першим для цього channel_index. Формати, які не RGBA ігноруватимуть інші кольорові канали.
void set_custom_format(channel_index: int, format: CustomFormat) 🔗
Встановлює формат кольору для цього користувацького параметра channel_index. Використовуйте CUSTOM_MAX для вимкнення.
Повинен викликатися після begin() та має бути встановлений перед commit() або commit_to_arrays().
void set_material(material: Material) 🔗
Набори Material для використання Mesh ви конструктори.
void set_normal(normal: Vector3) 🔗
Визначає нормальне використання для next vertex. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.
void set_skin_weight_count(count: SkinWeightCount) 🔗
Установіть значення SKIN_8_WEIGHTS, щоб вказати, що можна використовувати до 8 впливів на кістку на вершину.
За замовчуванням використовуються лише 4 впливи на кістку (SKIN_4_WEIGHTS).
Примітка. Ця функція приймає перелік, а не точну кількість ваг.
void set_smooth_group(index: int) 🔗
Визначає гладку групу для використання next vertex. Якщо це ніколи не називається, всі вершини будуть мати гладку групу за замовчуванням 0 і будуть плавлені сусідні вершини тієї ж групи. Для виготовлення сітки з плоскими нормами встановлюється гладка група до -1.
Примітка: Ця функція фактично займає uint32_t, тому користувачі C# повинні використовувати uint32.MaxValue замість -1 для виробництва сітки з плоскими нормами.
void set_tangent(tangent: Plane) 🔗
Вкажіть тангенс для використання next vertex. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.
Визначає набір УФ-координат для використання для next vertex. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.
Вкажіть додатковий другий набір УФ-координат для використання для next vertex. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.
void set_weights(weights: PackedFloat32Array) 🔗
Визначає значення ваги для використання next vertex. weights повинні містити 4 значення. Якщо кожна вершина повинна мати цей набір інформації, і ви не можете подати його на перший вершину, ця інформація не може бути використана у всіх випадках.