2015-08-26 2 views
-1

У меня есть Collada и связанные с ними данные изображения, хранящиеся в многостраничном файле, который выводится из приложения. Мне нужно иметь возможность загружать объект Collada и изображения для отображения в Интернете через three.js. Может ли tr.js интерпретировать многостраничный файл или данные в файле, или это нужно разбирать в реальных файлах, так как пример загрузчика Collada показывает, что он ссылается на файл .dae (например, loader.load ('models/monster.dae '), а не фактические данные.Загрузить данные Collada/image, хранящиеся в многостраничном файле, в three.js

в любом случае, как бы я этого добиться? Конечная цель заключается в загрузке и посмотреть „окно“, представленного многотомных данных в файле.

Вот структура выборки многочастного файла я получаю от приложения:

MIME-Version:1.0 
Content-Type:multipart/mixed; 
boundary="----=_Part_4_153315749.1440434094461" 

------=_Part_4_153315749.1440434094461 
Content-Type: application/octet-stream; name=Texture_1.png 
Content-ID: response-1 
Content-Disposition: attachment; filename=Texture_1.png 

‰PNG 
"blob data here" 

------=_Part_4_153315749.1440434094461 
Content-Type: application/octet-stream; name=manifest.xml 
Content-ID: response-2 
Content-Disposition: attachment; filename=manifest.xml 

<?xml version="1.0"?> 
<dae_root>blank_3D.dae</dae_root> 

------=_Part_4_153315749.1440434094461 
Content-Type: application/octet-stream; name=texture_3D.dae 
Content-ID: response-3 
Content-Disposition: attachment; filename=texture_3D.dae 

<xml data here... lots of xml data> 

------=_Part_4_153315749.1440434094461 
Content-Type: application/octet-stream; name=Texture_0.png 
Content-ID: response-4 
Content-Disposition: attachment; filename=Texture_0.png 

‰PNG 
"blob image data" 

UPDATE:

Благодаря тому, что поставщик разделяет файлы, я могу загрузить файл collada непосредственно в программу просмотра ... но я не знаю, как получить изображения вместе с ним, загруженные в память или по-другому. Любые идеи о том, как включить изображения/текстуры, принадлежащие файлу collada? Вот мой текущий код загрузки:

// instantiate a loader 
    var loader = new THREE.ColladaLoader(); 
    loader.options.convertUpAxis = true; 
    loader.load('http://applicationvendorapi.com/dae', function (collada) { 

     box = collada.scene; 

     box.traverse(function (child) { 

      if (child instanceof THREE.SkinnedMesh) { 

       var animation = new THREE.Animation(child, child.geometry.animation); 
       animation.play(); 

      } 
     }); 

     box.scale.x = box.scale.y = box.scale.z = .2; 
     box.updateMatrix(); 

     init(); 
     animate(); 
    }); 

расположение текстуры, как правило, в том же каталоге, что и файл Collada. Вот XML Collada. . Вопрос в том, можно ссылаться на них, потянув в других изображениях над веб-службы (ех/конечная точка/texture_0 и/конечная точка/texture_1

<library_images> 
<image id="Texture_0_png"> 
    <init_from>./Texture_0.png</init_from> 
</image> 
<image id="Texture_1_png"> 
    <init_from>./Texture_1.png</init_from> 
</image> 

UPDATE 2:

Использование совет @gaitat, я пытаюсь загрузить текстуру сначала с помощью ImageUtils, но он никогда не вызывает вызов для текстуры/загрузки текстуры. Тем не менее, он все равно вызывает вызов объекта. объект, завернутый в вызов текстуры:

// Load texture before loading and initializing 3D object 
    var texture0 = THREE.ImageUtils.loadTexture('http://vendorwebservice/texture_0', {}, function loaded() { 
     // Instantiate a Collada loader 
     var loader = new THREE.ColladaLoader(); 
     loader.options.convertUpAxis = true; 
     loader.load('http://vendorwebservice/dae', function (collada) { 

      box = collada.scene; 

      box.traverse(function (child) { 

       if (child instanceof THREE.SkinnedMesh) { 

        var animation = new THREE.Animation(child, child.geometry.animation); 
        animation.play(); 

       } 
      }); 

      box.scale.x = box.scale.y = box.scale.z = .2; 
      box.updateMatrix(); 

      init(); 
      animate(); 
     }); 

    }); 

Вот где это становится интересным. Поскольку файл DAE, который я вытягиваю, имеет следующие ссылки xml для его текстур, он на самом деле пытается «получить» их, но конечная точка не существует с расширением .png, поэтому он не работает (например, http://vendorwebservice/texture_0.png):

<library_images> 
<image id="Texture_0_png"> 
    <init_from>./Texture_0.png</init_from> 
</image> 
<image id="Texture_1_png"> 
    <init_from>./Texture_1.png</init_from> 
</image> 

+0

Комментарии для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/88765/discussion-on-question-by-kode-load-collada-image-data-stored-in-a-multipart- фил). –

ответ

1

Как приложение представляет собой веб-сервис, где данные не имеют статического URI Вам необходимо загрузить данные службы возвращает локально. Пока файлы текстур, на которые ссылается файл Collada, находятся в относительном пути (к .dae), THREE.ColladaLoader() сможет их найти, загрузить и отобразить.

Смежные вопросы