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.

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)

另請參閱 ArrayMeshImmediateMesh、和 SurfaceTool,以瞭解程式化幾何生成。

注意:對於三角形基元模式的前面,Godot 使用順時針纏繞順序

教學

方法

void

clear()

Error

commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0)

Error

create_from_surface(mesh: ArrayMesh, surface: int)

int

get_edge_count() const

PackedInt32Array

get_edge_faces(idx: int) const

Variant

get_edge_meta(idx: int) const

int

get_edge_vertex(idx: int, vertex: int) const

int

get_face_count() const

int

get_face_edge(idx: int, edge: int) const

Variant

get_face_meta(idx: int) const

Vector3

get_face_normal(idx: int) const

int

get_face_vertex(idx: int, vertex: int) const

int

get_format() const

Material

get_material() const

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

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


int get_edge_count() const 🔗

返回這個 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.


int get_face_count() const 🔗

返回這個 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 get_format() const 🔗

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) 🔗

設定給定頂點的骨骼權重。