使用Three.js + Blender构建在浏览器端显示的3D模型(3)


http://www.cnblogs.com/rsail/archive/2012/10/11/2719251.html

第三章 使用three.js加载blender生成的马克杯模型

先看看效果图,这是在firefox里面加载的

代码如下:

复制代码
 1 var SCREEN_WIDTH = window.innerWidth,
 2     SCREEN_HEIGHT = window.innerHeight,
 3     windowHalfX = window.innerWidth / 2,
 4     windowHalfY = window.innerHeight / 2,
 5     container, camera, scene, loaded,
 6     renderer, mouseX = 0, mouseY = 0;
 7 
 8 //记录鼠标位置在动画中使用
 9 document.addEventListener( 'mousemove', function (event) {
10     mouseX = ( event.clientX - windowHalfX );
11     mouseY = ( event.clientY - windowHalfY );
12 }, false );
13 
14 init();
15 
16 function init() {
17     container = document.createElement( 'div' );
18     document.body.appendChild( container );
19 
20     //使用WebGL去渲染,如果用Canvas渲染,浏览器会不堪重负
21     renderer = new THREE.WebGLRenderer();
22     renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
23     renderer.domElement.style.position = "relative";
24     container.appendChild( renderer.domElement );
25 
26     //使用场景加载,就能够利用blender建模时设置的相机和光源等,无需我们再定义
27     var loader = new THREE.SceneLoader();
28     loader.load( "./cup.js", function( result ) {
29         loaded = result;
30 
31         camera = loaded.currentCamera;
32         camera.aspect = window.innerWidth / window.innerHeight;
33         camera.updateProjectionMatrix();
34         scene = loaded.scene;
35         renderer.setClearColor( loaded.bgColor, loaded.bgAlpha );
36         animate();
37     });
38 }
39 
40 //通过实时改变相机的位置达到动画效果
41 function animate() {
42     requestAnimationFrame( animate );
43     camera.position.x += ( mouseX - camera.position.x ) * 0.001;
44     camera.position.y += ( - mouseY - camera.position.y ) * 0.002;
45     camera.lookAt( scene.position );
46     renderer.render( scene, camera );
47 }
复制代码

与之对应的html代码如下:

复制代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <title>three.js webgl - io - scene loader [blender]</title>
 5         <meta charset="utf-8">
 6         <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 7         <script src="http://mrdoob.github.com/three.js/build/three.min.js"></script>
 8     </head>
 9 
10     <body>
11         <script>
12         ......
13         ......
14         </script>
15     </body>
16 </html>
复制代码

其中cup.js是按照第一节所述,从blender中导出的js文件。这里我们需要加以注意的是,我们这里导出的文件是scen文件,包括摄像机、光源等参数的,点击“Export/Three.js(.js)”后出现的面板上,需要注意这部分:

默认情况下“Scene”,“Lights”和“Cameras”是没有勾选的,我们把它们都勾选上。

另外,请选用FireFox浏览器加载我们的html文件。因为这里使用了WebGl的render,而webGL默认是不能跨域访问的,所以在Chrome里面如果没做任何配置是不能加载本地的模型文件加以显示的。当然来自服务器的文件是可以的。使用FireFox则不受这个限制。

 

至此教程完成了基本的3D模型的制作以及在浏览器端的加载。代码来自于Three.js的例程,但特地做了极度的简化,整个js代码不到50行。在后续的教程中,我们将以此为基础,针对不同的任务需求,结合Three.js的API来完成。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值