Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
MeshDataTool
Успадковує: RefCounted < Object
Інструмент для доступу та редагування даних Mesh.
Опис
MeshDataTool надає доступ до окремих вершин у Mesh. Це дозволяє користувачам читати та редагувати дані вершин сіток. Він також створює масив граней і країв.
Щоб використовувати MeshDataTool, завантажте сітку за допомогою create_from_surface(). Коли ви закінчите редагувати дані, зафіксуйте дані в сітці за допомогою commit_to_surface().
Нижче наведено приклад того, як можна використовувати MeshDataTool.
var mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, BoxMesh.new().get_mesh_arrays())
var mdt = MeshDataTool new().
mdt.create_from_surface(mesh, 0)
for i in range (mdt.get_vertex_count()):
var vertex = mdt.get_vertex(i)
# У цьому прикладі ми розширюємо сітку на одну одиницю, що призводить до розділених граней, оскільки вона заштрихована.
vertex += mdt.get_vertex_normal(i)
# Збережіть зміни.
mdt.set_vertex(i, vertex)
mesh.clear_surfaces()
mdt.commit_to_surface(mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)
var mesh = new ArrayMesh();
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, new BoxMesh().GetMeshArrays());
var mdt = new MeshDataTool();
mdt.CreateFromSurface(mesh, 0);
for (var i = 0; i < mdt.GetVertexCount(); i++)
{
Vertex Vector3 = mdt.GetVertex(i);
// У цьому прикладі ми розширюємо сітку на одну одиницю, що призводить до розділених граней, оскільки вона заштрихована.
vertex += mdt.GetVertexNormal(i);
// Збережіть зміни.
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
Дивіться також ArrayMesh, ImmediateMesh і SurfaceTool для створення процедурної геометрії.
Примітка: Godot використовує порядок намотування за годинниковою стрілкою для передніх граней примітивних режимів трикутника.
Посібники
Методи
void |
clear() |
commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0) |
|
create_from_surface(mesh: ArrayMesh, surface: int) |
|
get_edge_count() const |
|
PackedInt32Array |
get_edge_faces(idx: int) const |
Variant |
get_edge_meta(idx: int) const |
get_edge_vertex(idx: int, vertex: int) const |
|
get_face_count() const |
|
get_face_edge(idx: int, edge: int) const |
|
Variant |
get_face_meta(idx: int) const |
Vector3 |
get_face_normal(idx: int) const |
get_face_vertex(idx: int, vertex: int) const |
|
get_format() const |
|
get_material() const |
|
Vector3 |
get_vertex(idx: int) const |
PackedInt32Array |
get_vertex_bones(idx: int) const |
get_vertex_color(idx: int) const |
|
get_vertex_count() const |
|
PackedInt32Array |
get_vertex_edges(idx: int) const |
PackedInt32Array |
get_vertex_faces(idx: int) const |
Variant |
get_vertex_meta(idx: int) const |
Vector3 |
get_vertex_normal(idx: int) const |
Plane |
get_vertex_tangent(idx: int) const |
Vector2 |
get_vertex_uv(idx: int) const |
Vector2 |
get_vertex_uv2(idx: int) const |
PackedFloat32Array |
get_vertex_weights(idx: int) const |
void |
set_edge_meta(idx: int, meta: Variant) |
void |
set_face_meta(idx: int, meta: Variant) |
void |
set_material(material: Material) |
void |
set_vertex(idx: int, vertex: Vector3) |
void |
set_vertex_bones(idx: int, bones: PackedInt32Array) |
void |
set_vertex_color(idx: int, color: Color) |
void |
set_vertex_meta(idx: int, meta: Variant) |
void |
set_vertex_normal(idx: int, normal: Vector3) |
void |
set_vertex_tangent(idx: int, tangent: Plane) |
void |
set_vertex_uv(idx: int, uv: Vector2) |
void |
set_vertex_uv2(idx: int, uv2: Vector2) |
void |
set_vertex_weights(idx: int, weights: PackedFloat32Array) |
Описи методів
void clear() 🔗
Очистити всі дані в даний час в MeshDataTool.
Error commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0) 🔗
Додає нову поверхню, вказану Mesh з редагованими даними.
Error create_from_surface(mesh: ArrayMesh, surface: int) 🔗
Використовує вказану поверхню даної Mesh для згортання даних для MeshDataTool.
Потрібні Mesh з примітивним типом Mesh.PRIMITIVE_TRIANGLES.
Повертає кількість країв в цьому Mesh.
PackedInt32Array get_edge_faces(idx: int) const 🔗
Повертає масив обличчя, які торкнуться до даного краю.
Variant get_edge_meta(idx: int) const 🔗
Повертає мета інформацію, призначену для даного краю.
int get_edge_vertex(idx: int, vertex: int) const 🔗
Повертає індекс заданої вершини vertex, з'єднаної з ребром за індексом idx.
vertex може бути лише 0 або 1, оскільки ребра складаються з двох вершин.
Повертає кількість обличчя в цьому Mesh.
int get_face_edge(idx: int, edge: int) const 🔗
Повертає ребро, пов'язане з гранню за індексом idx.
Аргумент edge має бути або 0, 1, або 2, оскільки грань має лише три ребра.
Variant get_face_meta(idx: int) const 🔗
Повертає метадані, пов’язані з цим обличчям.
Vector3 get_face_normal(idx: int) const 🔗
Розрахунок і повернення нормального обличчя даної особи.
int get_face_vertex(idx: int, vertex: int) const 🔗
Повертає вказаний індекс вершини заданої грані.
vertex має мати значення 0, 1 або 2, оскільки грані містять три вершини.
var index = mesh_data_tool.get_face_vertex(0, 1) # Отримує індекс другої вершини першої грані.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)
int index = meshDataTool.GetFaceVertex(0, 1); // Отримує індекс другої вершини першої грані.
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
Повертає формат Mesh як поєднання прапорів ArrayFormat. Наприклад, сітка, що містить як вершини, так і норми, поверне формат 3, тому що Mesh.ARRAY_FORMAT_VERTEX 1 та Mesh.ARRAY_FORMAT_NORMAL [code2[/code].
Material get_material() const 🔗
Повернення матеріалу, призначеного для Mesh.
Vector3 get_vertex(idx: int) const 🔗
Повертає позицію даної вершини.
PackedInt32Array get_vertex_bones(idx: int) const 🔗
Повертає кістки даної вершини.
Color get_vertex_color(idx: int) const 🔗
Повертає колір даної вершини.
int get_vertex_count() const 🔗
Повертає загальну кількість вершин Mesh.
PackedInt32Array get_vertex_edges(idx: int) const 🔗
Повертає масив країв, які діляться заданими вершинами.
PackedInt32Array get_vertex_faces(idx: int) const 🔗
Повертає масив обличчя, які поділяють надану вершину.
Variant get_vertex_meta(idx: int) const 🔗
Повертає метадані, пов'язані з даної вершини.
Vector3 get_vertex_normal(idx: int) const 🔗
Повертає норма даної вершини.
Plane get_vertex_tangent(idx: int) const 🔗
Повертає тангенс даної вершини.
Vector2 get_vertex_uv(idx: int) const 🔗
Повертає УФ даної вершини.
Vector2 get_vertex_uv2(idx: int) const 🔗
Повертає УФ2 даної вершини.
PackedFloat32Array get_vertex_weights(idx: int) const 🔗
Повертає кісткові маси даної вершини.
void set_edge_meta(idx: int, meta: Variant) 🔗
Встановлює метадані даного краю.
void set_face_meta(idx: int, meta: Variant) 🔗
Налаштовує метадані даного обличчя.
void set_material(material: Material) 🔗
Налаштовує матеріал для використання новоствореними Mesh.
void set_vertex(idx: int, vertex: Vector3) 🔗
Встановлює позицію заданої вершини.
void set_vertex_bones(idx: int, bones: PackedInt32Array) 🔗
Налаштовує кістки даної вершини.
void set_vertex_color(idx: int, color: Color) 🔗
Встановлює колір даної вершини.
void set_vertex_meta(idx: int, meta: Variant) 🔗
Налаштовує метадані, пов'язані з даної вершини.
void set_vertex_normal(idx: int, normal: Vector3) 🔗
Налаштовує норма даної вершини.
void set_vertex_tangent(idx: int, tangent: Plane) 🔗
Встановлює дотичну заданої вершини.
Примітка: Хоча tangent є Plane, він безпосередньо не представляє дотичну площину. Його Plane.x, Plane.y та Plane.z представляють вектор дотичної, а Plane.d має бути або -1, або 1. Див. також Mesh.ARRAY_TANGENT.
void set_vertex_uv(idx: int, uv: Vector2) 🔗
Встановлює УФ даної вершини.
void set_vertex_uv2(idx: int, uv2: Vector2) 🔗
Встановлює УФ2 даної вершини.
void set_vertex_weights(idx: int, weights: PackedFloat32Array) 🔗
Встановлює кісткові маси даної вершини.