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++)
{
Vector3 vertex = 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() 🔗
將目前 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 🔗
Returns the index of the specified vertex connected to the edge at index idx.
vertex can only be 0 or 1, as edges are composed of two vertices.
返回這個 Mesh 中的面數。
int get_face_edge(idx: int, edge: int) const 🔗
Returns the edge associated with the face at index idx.
edge argument must be either 0, 1, or 2 because a face only has three edges.
Variant get_face_meta(idx: int) const 🔗
返回與給定面關聯的中繼資料。
Vector3 get_face_normal(idx: int) const 🔗
計算並返回給定面的面法線。
int get_face_vertex(idx: int, vertex: int) const 🔗
Returns the specified vertex index of the given face.
vertex must be either 0, 1, or 2 because faces contain three vertices.
var index = mesh_data_tool.get_face_vertex(0, 1) # Gets the index of the second vertex of the first face.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)
int index = meshDataTool.GetFaceVertex(0, 1); // Gets the index of the second vertex of the first face.
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
Returns the Mesh's format as a combination of the ArrayFormat flags. For example, a mesh containing both vertices and normals would return a format of 3 because Mesh.ARRAY_FORMAT_VERTEX is 1 and Mesh.ARRAY_FORMAT_NORMAL is 2.
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 🔗
返回給定頂點的 UV。
Vector2 get_vertex_uv2(idx: int) const 🔗
返回給定頂點的 UV2。
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) 🔗
Sets the tangent of the given vertex.
Note: Even though tangent is a Plane, it does not directly represent the tangent plane. Its Plane.x, Plane.y, and Plane.z represent the tangent vector and Plane.d should be either -1 or 1. See also Mesh.ARRAY_TANGENT.
void set_vertex_uv(idx: int, uv: Vector2) 🔗
設定給定頂點的 UV。
void set_vertex_uv2(idx: int, uv2: Vector2) 🔗
設定給定頂點的 UV2。
void set_vertex_weights(idx: int, weights: PackedFloat32Array) 🔗
設定給定頂點的骨骼權重。