Экспорт блендера в Three.js - PullRequest
27 голосов
/ 20 марта 2012

Я только что создал случайную сетку с помощью Blender и хочу экспортировать ее для использования в HTML5 через Three.js.Я не видел приличных обучающих программ, которые показывают, как это сделать.Кто-нибудь может мне помочь с этим?Я просто хочу, чтобы 3D-сетка отображалась в Интернете, без анимации.Спасибо!

Ответы [ 4 ]

30 голосов
/ 18 мая 2012

Самый простой способ, который я нашел после многих поисков, проб и ошибок, был Three.ColladaLoader. Поместите файлы .dae в папку с именем models в каталоге /root. Я нашел экспортер JSON Blender менее надежным. Вызовите функцию PinaCollada из функции init(), примерно так:

function init(){
    scene = new THREE.scene;
    ...
    var object1 = new PinaCollada('model1', 1);
    scene.add(object1); 
    var object2 = new PinaCollada('model2', 2);
    scene.add(object2); 
    ...
}

function PinaCollada(modelname, scale) {
    var loader = new THREE.ColladaLoader();
    var localObject;
    loader.options.convertUpAxis = true;
    loader.load( 'models/'+modelname+'.dae', function colladaReady( collada ) {
        localObject = collada.scene;
        localObject.scale.x = localObject.scale.y = localObject.scale.z = scale;
        localObject.updateMatrix();
    } );
    return localObject;
}
12 голосов
/ 03 апреля 2012

вам нужен экспортер блендера Threejs: прочитайте это

11 голосов
/ 21 июня 2012
var loader = new THREE.JSONLoader(true);
loader.load({
    model: "model.js",
    callback: function(geometry) {
        mesh = new THREE.Mesh(geometry,new THREE.MeshFaceMaterial);
        mesh.position.set(0,0,0);
        mesh.scale.set(20,20,20);
        scene.add(mesh);
        renderer.render(scene, camera);
    }
});

Базовый загрузчик json для THREE.JS;Вам также необходимо изучить:

Как настроить холст, сцену, источники света и камеру (если вы еще этого не сделали и не используете блендер)

morphTargets (еслиВы анимируете)

материалов (если хотите настроить)

0 голосов
/ 14 мая 2017

Выбранный ответ не возвращает обещание или обратный вызов, поэтому вы не знаете, когда можно что-то установить. Я добавил небольшой класс и показал, как вы можете его использовать. Обертывает коллада погрузчик.

var ColladaLoaderBubbleWrapper = function() {
    this.file = null;
    this.loader = new THREE.ColladaLoader();
    this.resolve = null;
    this.reject = null;

    this.colladaLoadedNotifier = this.colladaLoadedNotifier.bind(this);
    this.onLoad = this.onLoad.bind(this);
};

ColladaLoaderBubbleWrapper.prototype.loadCollada = function(file) {
    this.loader.load(file, this.onLoad, this.onDownloadProgress);
    return new Promise(this.colladaLoadedNotifier);
};

ColladaLoaderBubbleWrapper.prototype.colladaLoadedNotifier = function(resolve, reject) {
    this.resolve = resolve;
    this.reject = reject;
};

ColladaLoaderBubbleWrapper.prototype.onLoad = function(collada) {
    this.resolve(collada);
};

ColladaLoaderBubbleWrapper.prototype.onDownloadProgress = function(xhr) {
    console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
};

Затем для использования включите загрузчик Collada:

<script src="js/loaders/ColladaLoader2.js"></script>
<script src="js/blender/colladaBubbleWrap.js"></script>

и в вашем основном js

var colladaLoader = new ColladaLoaderBubbleWrapper();
var colladaLoaded = colladaLoader.loadCollada('colladas/brick/brick.dae');
colladaLoaded.then(function(collada) {
    scene.add( collada.scene );
});
...