ThreeJs和Blender(使用colladaLoader):第一次接触

时间:2014-04-22 16:18:25

标签: three.js blender

如何在ThreeJs中使用Blender(使用colladaLoader - > .dae)渲染导出的场景(具有许多对象,每个对象具有不同的颜色和不同的属性,例如在场景中旋转一个轴)?

1 个答案:

答案 0 :(得分:3)

因此,第一步是学习如何在threeJ中创建场景并使用Blender学习一些功能。准备就绪后,创建第一个模型,在导出之前请记住这一点:

  1. 你需要一个带顶点的对象,所以如果你只是用Blender创建一个文本,你必须将它转换为一个网格,否则三个j将不会渲染它
  2. 一定要选择Blender渲染选项,而不是Cycles, 否则你导出的.dae将不会以threeJs
  3. 呈现
  4. 在应用纹理时,只使用颜色和基本材质(basic,phong和lambert) - 其他材料不能使用colladaLoader
  5. 查看对象是否将使用三个j中的颜色进行渲染 colladaLoader只是用对象模式查看Blender中的对象 (实心) - 如果它是灰色的而不是您选择的颜色,那就是它 将以同样的方式呈现在三个中
  6. 如果您将'solidify'修饰符应用于对象,然后在threeJs上将其设置为透明,则它将呈现为wireframed
  7. 如果您在场景中追加多个对象并“加入”它们,那么 各个位置和轮换将在三个J中得到尊重, 否则不是:例如,如果你想在一个花中渲染一朵花 瓶子(和thoose对象是不同的搅拌器文件 附加/链接在场景中),花不适合在瓶子里 在三个J中,但是会有不同的位置和旋转 瓶子
  8. 对对象进行分组并不能解决这个问题:要在Blender中看到场景,你必须“加入”对象(带来这种结果)或手动改变三个位置和旋转 .dae导出选项对于在threeJs
  9. 中呈现对象无关紧要

    现在,关于threeJs的部分:

    请务必使用以下内容导入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;
       }
     });
    

    我希望有人能从这篇文章中受益