0

我正在尝试从 MeshInstance 节点访问网格数据,但没有成功。

我导入了一个 3d 对象,将其打开为“New Inherited”,将其设置为“Unique”并将其保存为foo.mesh。然后,在一个新场景中,我确实创建了一个 MeshInstance 并将 foo.mesh 作为它的 Mesh 加载。

该脚本附加到非常MeshInstance,有点像如下:

extends MeshInstance

func _ready():
    var themesh = Mesh
    var mdt = MeshDataTool.new()
    if mdt.create_from_surface(themesh, 0):
        print("Ok!!")
        print(mdt.get_vertex_count()) # get_vertex_count() returns 0
    else:
        print("Failed...")
4

1 回答 1

0

它不适用于内置网格。需要是一个导入的网格,我也保存为 Godot .mesh

参考链接:FacebookMesh Data ToolMesh Class

我错误地指向网格类而不是网格属性来获取网格参考。并且 if 测试需要检查通过,因为“create_from_surface()”在发生错误时返回非零。

Godot 调试器

extends MeshInstance

func _ready():
    var themesh = mesh  # Same as bellow, points to same object in memory
    var themesh2 = self.get_mesh()  # Same as above, points to same object in memory

    print("Mesh surface count: " + str(themesh.get_surface_count()))

    var mdt = MeshDataTool.new()

    if mdt.create_from_surface(themesh, 0) == OK:  # Check pass
        print("Ok!!")
        print(mdt.get_vertex_count())
    else:
        print("Fail...")

    var aMeshVerts = []

    for i in range(mdt.get_vertex_count()):
        aMeshVerts.append(mdt.get_vertex(i))  # Storing the vertices positions

    mdt.set_vertex(0, Vector3(1, 2, 1))  # Changing a vertice position
    themesh.surface_remove(0)
    mdt.commit_to_surface(themesh)
    mdt.clear()
于 2019-05-01T08:54:51.593 回答