Как я могу получить доступ к данным меша MeshInstance? - PullRequest
0 голосов
/ 30 апреля 2019

Я безуспешно пытаюсь получить доступ к данным меша из узла MeshInstance.

Я импортировал трехмерный объект, открыл его как «Новое наследование», превратил его в «Уникальный» и сохранил как 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 голосов
/ 01 мая 2019

Это не работает для встроенных сеток. Должен быть импортированным мешом, который я также сохраняю как Годо .mesh .

Справочные ссылки: Facebook , Инструмент данных сетки , Класс сетки

Я ошибочно указывал на 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()
...