Добавление PhysicsImpostor переворачивает сетки вверх дном - PullRequest
0 голосов
/ 22 марта 2020

Я загружаю меня sh из файла GLB, который я экспортировал из Blender. У меня проблема в том, что как только я добавляю PhysicsImpostor к сеткам - вся модель переворачивается вверх ногами?!?

export class Player extends BABYLON.AbstractMesh {
    constructor(scene, config: EntityConfig) {
        super(config.name, scene);

        BABYLON.SceneLoader.ImportMesh('', 'assets/', config.file, scene,
            (newMeshes, particleSystems, skeletons, animationGroup) => {
            newMeshes.forEach(m => {
                if (!m.parent)
                    m.setParent(this);

                m.showBoundingBox = config.IS_DEBUG;
                m.physicsImpostor = new BABYLON.PhysicsImpostor(m, BABYLON.PhysicsImpostor.);
        });

        this.scaling.set(.2, .2, .2);

        this.setAbsolutePosition(new BABYLON.Vector3(0, 3, 0));

        scene.registerAfterRender(() => {
            animationGroup[0].play(true);
        });       

        this.physicsImpostor = new BABYLON.PhysicsImpostor(this, BABYLON.PhysicsImpostor.SphereImpostor, 
            {
                mass: 1,
                restitution: .1 
            }, scene);

        this.showBoundingBox = config.IS_DEBUG;
        });
    }
}

Here he is upside-down...

1 Ответ

0 голосов
/ 24 марта 2020

Трудно ответить на это без детской площадки или демоверсии. Но, глядя на код, можно сделать несколько вещей.

Первое, что я могу предположить, это то, что это поможет - вам следует сконструировать самозванцев по порядку (сначала дочерний), и попытаться избегать использования setParent функция при загрузке GLB / GLTF, так как они правши, а вавилон левша, а при использовании setParent дочерний элемент применяет к нему преобразование родителя. Если вместо этого вы используете m.parent = this, преобразование родителя учитывается при рендеринге объекта, но его базовое преобразование c не меняется. Поэтому первое, что я хотел бы сделать, это изменить m.setParent(this); на m.parent = this.

. Вы можете прочитать о соединениях здесь - https://doc.babylonjs.com/how_to/compounds

Еще одно предложение будет создайте самозванца me sh для всей модели вместо самозванца за меня sh (составное). Однако, если вам нужны отдельные сетки для перемещения, соединение (использующее систему родительского контроля) в любом случае не будет работать, и вам нужно будет создать отдельные самозванцы и соединить их с помощью соединений (https://doc.babylonjs.com/how_to/joints).

Также - я не вижу, какой физический движок вы решили использовать. Для сложных задач (особенно если вам нужен MeshImpostor Боеприпасы. js будет моим первым выбором.

...