2015-06-19 8 views
1
  1. Я экспортировала сфальсифицированный персонаж из 3ds Max в формате SEA3D
  2. Загруженных в Three.js
  3. Костных вращения имеют начальные значения. Когда я установить эти значения XYZ для 0,0,0 моя модель выглядит полностью перепутались

Модель кости из блендере все имеют начальные значения 0, 0, 0Three.js импорт персонажа с каркасом из 3ds Max

All messed up

Я уже попытался сначала экспортировать модель в формат FBX, импортировать в блендер, а затем экспортировать в формат JSON. Это сработало! К сожалению, это создало другие проблемы и слишком много шагов для подражания. Кроме того, формат Sea3d намного меньше, чем JSON, и я успешно использую этот формат во всем своем проекте.

Также я попытался использовать SEA3D Studio http://sea3d.poonya.com/studio/, чтобы установить обратную матрицу «Обратный привязку» на 0, 0, 0 для каждой кости, которая помогла с начальными позициями, но не с порядком осей.

Если мои знания о матрицах будут более 0, я бы сделал скрипт, который бы сбросил каждую модель при загрузке, но мне нужна помощь с помощью ИЛИ с экспортом из 3ds max, поэтому начальные значения вращения равны 0, а оси - в правильном порядке

+0

После комментирования этой строки в three.js у меня есть большое улучшение! bone.quaternion.set (q [0], q [1], q [2], q [3]); – Pawel

ответ

0

После бесчисленных проб и ошибок, чтобы прервать установку начальных значений вращения для костей, я обнаружил, что редактирование этой части кода в загрузчике SEA3D выполнило эту работу.

THREE.SEA3D.prototype.flipMatrix = function(mtx) { 
    var mtx_data = THREE.SEA3D.BUFFER0.copy(mtx); 

    mtx.setPosition(THREE.SEA3D.VECZERO); 
    mtx.multiplyMatrices(THREE.SEA3D.BUFFER1.makeRotationAxis(THREE.SEA3D.VECBUF0.set(0, 0, 1), THREE.Math.degToRad(180)), mtx);  
    mtx.makeRotationFromQuaternion(THREE.SEA3D.QUABUF0.setFromRotationMatrix(mtx)); 

    var pos = THREE.SEA3D.VECBUF0.setFromMatrixPosition(mtx_data); 
    pos.z = -pos.z; 
    mtx.setPosition(pos); 

    return mtx; 
} 

именно эта линия:

mtx.makeRotationFromQuaternion(THREE.SEA3D.QUABUF0.setFromRotationMatrix(mtx)); 

должен быть изменен на:

mtx.makeRotationFromQuaternion(new THREE.Quaternion(0, 0, 0, 1)); 

Это не решение, но обходной путь, поэтому если у вас есть реальное решение (как правильно экспортируйте его из 3ds max или обработайте его после загрузки), затем не стесняйтесь публиковать его!