Перевод и масштабирование в GLTF

Я пытаюсь отобразить несколько полей (с разными размерами и позициями) через gltf.

Я использую https://github.com/KhronosGroup/glTF-Sample-Models/blob/master/2.0/Box/glTF/Box.gltf в качестве шаблона и просто замените узлы новыми узлами.

Когда я создаю свои узлы как

 gltf["scenes"][0]["nodes"]=[]
 gltf["nodes"]=[]
 nodeId=0
 for x, y, z, w, h, d in boxes: 
    gltf["nodes"]+=[{ "mesh": 0, "translation": [x, y, z], "scale":[w, h, d]}]
    gltf["scenes"][0]["nodes"]+=[nodeId]
    nodeId+=1 

коробки (которые находятся рядом) сталкиваются (не только по краям). Значит, 3d не так.

Когда я создаю свои ящики без масштабирования (из множества маленьких ящиков), это работает:

 gltf["scenes"][0]["nodes"]=[]
 gltf["nodes"]=[]
 nodeId=0
 for x, y, z, w, h, d in boxes: 
    for x1 in range(x, w+w):
        for y1 in range(y, y+w):
            for z1 in range(z, z+d):
                gltf["nodes"]+=[{"mesh": 0, "translation": [x1, y1, z1]}] 
                gltf["scences"][0]["nodes"]+=[nodeId]
                nodeId+=1      

Но это, конечно, гораздо более крупный и сложный файл gltf.

Координаты в прямоугольниках - это нижний левый передний угол (минимум значений x, y и z).


person Ruediger Jungbeck    schedule 12.12.2019    source источник


Ответы (1)


Блок образца glTF, с которым вы связались, имеет позиции вершин в диапазоне от -0.5 до 0.5 вдоль каждой оси. Итак, чтобы разместить блок, вы должны переместить узел туда, где будет центр блока.

Я не пробовал запускать этот код, но для x, y, z значений, которые представляют углы ящиков, что-то вроде следующего должно изменить его на центры ящиков. Единственное изменение, которое я сделал, - это добавить к переводу половину ширины, половину высоты и половину глубины.

 gltf["scenes"][0]["nodes"]=[]
 gltf["nodes"]=[]
 nodeId=0
 for x, y, z, w, h, d in boxes: 
    gltf["nodes"]+=[{ "mesh": 0, "translation": [
       x + w/2,
       y + h/2,
       z + d/2
       ], "scale":[w, h, d]}]
    gltf["scenes"][0]["nodes"]+=[nodeId]
    nodeId+=1 
person emackey    schedule 12.12.2019