【Demo】Tree.js實例


Three.js是通過對WebGL接口的封裝與簡化而形成的一個易用的圖形庫。

簡單點的說法:WebGL可以看成是瀏覽器給我們提供的接口,在javascript中可以直接用這些API進行3D圖形的繪制;而Three.js就是在這些接口上又幫我們封裝得更好用一些。

既然有了WebGL,我們為什么還需要Three.js? 
這是因為WebGL門檻相對較高,需要相對較多的數學知識。雖然WebGL提供的是面向前端的API,但本質上WebGL跟前端開發完全是兩個不同的方向,知識的重疊很少。相關性只是他們都在web平台上,都是用javascript而已。一個前端程序員或許還熟悉解析幾何,但是還熟悉線性代數的應該寥寥無幾了(比如求個逆轉置矩陣試試?),更何況使用中強調矩陣運算中的物理意義,這在教學中也是比較缺失的。 
因此,前端工程師想要短時間上手WebGL還是挺有難度的。 
於是,Three.js對WebGL提供的接口進行了非常好的封裝,簡化了很多細節,大大降低了學習成本。並且,幾乎沒有損失WebGL的靈活性。 
因此,從Three.js入手是值得推薦的,這可以讓你在較短的學習后就能面對大部分需求場景。

下面是一個demo:

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>多樣式旋轉體</title>
        <script src="http://gamingJS.com/Three.js"></script>
        <script src="http://gamingJS.com/ChromeFixes.js"></script>
    </head>
    <body>
        
        
        <script>
            window.onload=function(){
                
//            定義3個基本對象(場景(scene), 相機(camera), 以及一個渲染器(renderer))
              var camera, scene, renderer;
              var geometry, material, mesh;
            
              init();
              animate();
            
              function init() {
                scene = new THREE.Scene();
            
                var aspect = window.innerWidth / window.innerHeight ;
                camera = new THREE.PerspectiveCamera(75, aspect, 1, 1000);
                /*
                     第一個屬性75設置的是視角(field of view);
                     第二個屬性設置的是相機拍攝面的長寬比(aspect ratio);
                     接下來的2個屬性是近裁剪面(near clipping plane) 和 遠裁剪面(far clipping plane)
                 * */
//                設置顏色和相機視角
                camera.position.z = 500;
                scene.add(camera);
            //                創建一個幾何模型
                geometry = new THREE.TorusKnotGeometry(150, 50 ,100,100,1);
//                geometry = new THREE.CubeGeometry(150, 50 ,100,100,1);
//                geometry = new THREE.SphereGeometry(150, 50 ,100);
//                geometry = new THREE.TorusKnotGeometry(150, 50 ,100);
//                geometry = new THREE.TorusGeometry(150, 50 ,100);
//                geometry = new THREE.TorusGeometry(150, 50 ,100,100);

//                材料
                material = new THREE.MeshNormalMaterial({
                  color: 0xf32179,
                });
                // 網孔基礎材料
//                material = new THREE.MeshBasicMaterial({
//                  color: 0xf32179,
//                });
//             網孔:mesh
                mesh = new THREE.Mesh(geometry, material);
                scene.add(mesh);
            
                renderer = new THREE.CanvasRenderer();
                renderer.setClearColorHex(0xffffff);
                renderer.setSize(window.innerWidth, window.innerHeight);
            
                document.body.style.margin = 0;    
                document.body.style.overflow = 'hidden';
                document.body.appendChild(renderer.domElement);
              }
            
              function animate() {
                requestAnimationFrame(animate);
            
                mesh.rotation.x = Date.now() * 0.0001;
                mesh.rotation.y = Date.now() * 0.001;
                mesh.rotation.z = Date.now() * 0.001;
            
                renderer.render(scene, camera);
              }
            }
        </script>
    </body>
</html>

 


免責聲明!

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



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