如何在ThreeJs中从Blender(使用colladaLoader->。dae)渲染导出的场景(具有许多对象,每个对象具有不同的颜色和不同的属性,例如围绕场景中的轴旋转)?
最佳答案
因此,第一步是学习如何在ThreeJs中创建场景并使用Blender学习一些功能。准备就绪后,请创建您的第一个模型,并在导出之前牢记以下几点:
您需要具有顶点的对象,因此,如果仅使用Blender创建文本,则必须将其转换为网格,否则threeJs不会渲染它
请务必选择Blender渲染选项,而不要选择“循环”,
否则,导出的.dae文件将不会以threeJs呈现
应用纹理时,仅使用颜色和基本材料(基本,phong和lambert)-其他将无法使用colladaLoader
看看对象是否会用ThreeJs的颜色渲染
colladaLoader只是在Blender中以对象模式查看对象
(纯色)-如果是灰色而不是您选择的颜色,则为
将以相同的方式在threeJs中渲染
如果将'solidify'修改器应用于对象,然后在threeJs上将其设置为透明,则将其渲染为线框
如果您在场景中附加多个对象并“加入”它们,
各自的位置和旋转将以三秒为单位,
否则:例如,如果要在
瓶子(和thoose对象是不同的Blender文件,它们是
在场景中附加/链接),花朵将无法放入瓶子中
在三个Js中,但位置和旋转角度与
瓶子
将对象分组并不能解决此问题:要在Blender中看到场景,您必须“合并”对象(这会带来后果)或手动更改threeJs上的位置和旋转
.dae导出选项与在ThreeJs中渲染对象无关紧要
现在,涉及到三个J的部分:
确保使用以下命令导入colladaLoader:
<script src="jsLib/ColladaLoader.js"></script>
将此代码插入init()函数中,以便加载程序将加载您的.dae模型:
var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
loader.load( 'model.dae', function ( collada ) {
// with this you can get the objects of the scene; the [0] is not the first object
// you display in blender in case of many objects (which means you didn't join them)
var obj1 = collada.scene.children[0];
// you can name the object so you can use it even out of the function, if you want
// animate it for example obj1.name = "daeObj1";
// you can set here some material properties as trasparency
obj1.material.needsUpdate = true;
obj1.material.transparent = true;
obj1.material.opacity = 0.5;
obj1.hearth.material.wireframe = false;
// and now some position and rotation for good visualization
obj1.position.set(0, -5, -0.6); //x,z,y
obj1.rotation.set(0, 45, 0);
// and add the obj to the threeJs scene
scene.add(obj1);
});
如果要更新某些对象(例如旋转),请向animate()函数添加一些代码
scene.traverse (function (object) {
if (object.name === 'daeObj1') {
object.rotation.z -= 0.01;
}
});
我希望有人可以从这篇文章中受益
关于three.js - ThreeJs和Blender(使用colladaLoader):首次联系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23224940/