使用Three.js + Blender構建在瀏覽器端顯示的3D模型(3)


第三章 使用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來完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM