如何访问MeshInstance的网格数据?

时间:2019-04-30 14:12:19

标签: godot gdscript

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

我已导入3d对象,将其打开为“新继承的”,将其设置为“唯一”,并将其另存为 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...")

1 个答案:

答案 0 :(得分:0)

不适用于内置网格。需要是一个导入的网格物体,我也将其另存为Godot .mesh

参考链接:FacebookMesh Data ToolMesh Class

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

Godot Debugger

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