小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

threejs第五篇【一條龍測(cè)試之四 threejs 給obj模型貼圖】

 看見(jiàn)就非常 2020-01-19

由于OBJ沒(méi)有紋理信息, 需要threejs來(lái)加載外部貼圖,來(lái)指定給模型!

//模型需要紋理Texture
        var texture = new THREE.Texture();
        var loader = new THREE.ImageLoader( manager );
        loader.load( 'knotTex.png', function ( image ) {
            texture.image = image;
            texture.needsUpdate = true;
        } );
        //obj加載的類如圖:


        //obj加載,構(gòu)造函數(shù)的參數(shù)是LoadingManager
        var loader = new THREE.OBJLoader(manager);
        //加載方法有4個(gè)參數(shù),分別是obj文件路徑,加載完畢回調(diào),加載進(jìn)度回調(diào),錯(cuò)誤回調(diào)。
        //我們先把幾個(gè)回調(diào)寫好
        //加載完畢回調(diào)如下,加載完畢,我們做的就是把模型加載到場(chǎng)景中
        var onLoad = function(object){
            //加載模型如何指定Texture呢?            
            object.traverse( function ( child ) {
                if ( child instanceof THREE.Mesh ) {
                    child.material.map = texture;
                }
            } );
            scene.add( object);    
        }

我們給個(gè)加載進(jìn)度吧,

使用CSS做2個(gè)塊樣式,頁(yè)面頂部div progress,顯示加載進(jìn)度百分比。

<style type="text/css">
              #progress{
                margin:0; 
                line-height:40px; 
                font-weight:bold;
                color:#fff; 
                text-align:center;
                background-color:#ff0000;
            }
        </style>

主體窗口div canvas3d 顯示3D場(chǎng)景

<style type="text/css">
            #canvas3d{
                margin:0;
                /*border:1px solid red;*/
                width:100%;              
                height:600px;
            }
          
        </style>

另外,網(wǎng)頁(yè)窗口變化,3D場(chǎng)景比例也要適配:

//窗口變化時(shí),3D窗口也會(huì)動(dòng)態(tài)適配
    window.onresize = function(){
        var w = document.getElementById("canvas3d").clientWidth;
        var h = document.getElementById("canvas3d").clientHeight;
         
        camera.aspect = w/h;
        camera.updateProjectionMatrix();
        renderer.setSize(w,h); 
    }



完整代碼:

<!DOCTYPE html> 
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <script src="../build/three.js" type="text/javascript" ></script>
        <script src="../examples/js/Detector.js" type="text/javascript" ></script>
        <script src="../examples/js/loaders/OBJLoader.js" type="text/javascript" ></script>
        <style type="text/css">
            #canvas3d{
                margin:0;
                /*border:1px solid red;*/
                width:100%;              
                height:600px;
            }
          
        </style>
        <style type="text/css">
              #progress{
                margin:0; 
                line-height:40px; 
                font-weight:bold;
                color:#fff; 
                text-align:center;
                background-color:#ff0000;
            }
        </style>
    </head>
    <body>
    <div id="canvas3d">
        <div id = "progress">
             <p></p>
        </div>       
    </div>
    <script type="text/javascript">



    if(Detector.webgl){
        //alert('瀏覽器支持');
        //瀏覽器支持,我們就做初始化工作。不然js處理半天,瀏覽器不支持也白搭
        
        init();
        animate();


    }else{
        alert('瀏覽器不支持');
    }


    var scene,camera,renderer;
   


    //初始化
    function init(){
        var w = document.getElementById("canvas3d").clientWidth;
        var h = document.getElementById("canvas3d").clientHeight;


        scene = new THREE.Scene();
        
        camera = new THREE.PerspectiveCamera(45,w/h,0.1,1000);
        camera.position.z= 250;
        var directionalLight = new THREE.DirectionalLight( 0xffeedd );
        directionalLight.position.set( 0, 0, 1 );
        scene.add( directionalLight );
        renderer = new THREE.WebGLRenderer();
        //下面setSize()可以不寫,畫面也會(huì)顯示默認(rèn)指定300*150的大小,很小。所以肯定要手動(dòng)設(shè)定一下大小
        
        renderer.setSize(w,h);
        renderer.setClearColor(0xf0f0f0);
        //別忘記了這個(gè)要寫滴...不然就真看不見(jiàn)畫面。
        document.getElementById('canvas3d').appendChild(renderer.domElement);


        //開(kāi)始模型導(dǎo)入的一些工作
        //我們看看官方提供的OBJLoad.js腳本的構(gòu)造函數(shù)
        //構(gòu)造函數(shù)的參數(shù)是一個(gè)manager,這是什么呀?看到圖中他是集成自THREE.DefaultLoadingManager,
        //
        //然后我們?nèi)hree.js里面DefaultLoadingManager看看是什么?看到了,是LoadingManager對(duì)象;
        //
        //里面搜了一遍,沒(méi)有找到LoadingManager的類,我們?cè)倏纯磘hree.module.js
        //在這里發(fā)現(xiàn)了function LoadingManager( onLoad, onProgress, onError ) {...}
        //這個(gè)管理器有
        //接下來(lái)我們聲明一個(gè)LoadingManager
        var manager = new THREE.LoadingManager();     
        
        //模型需要紋理Texture
        var texture = new THREE.Texture();
        var loader = new THREE.ImageLoader( manager );
        loader.load( 'knotTex.png', function ( image ) {
            texture.image = image;
            texture.needsUpdate = true;
        } );
        //obj加載的類如圖:


        //obj加載,構(gòu)造函數(shù)的參數(shù)是LoadingManager
        var loader = new THREE.OBJLoader(manager);
        //加載方法有4個(gè)參數(shù),分別是obj文件路徑,加載完畢回調(diào),加載進(jìn)度回調(diào),錯(cuò)誤回調(diào)。
        //我們先把幾個(gè)回調(diào)寫好
        //加載完畢回調(diào)如下,加載完畢,我們做的就是把模型加載到場(chǎng)景中
        var onLoad = function(object){
            //加載模型如何指定Texture呢?            
            object.traverse( function ( child ) {
                if ( child instanceof THREE.Mesh ) {
                    child.material.map = texture;
                }
            } );
            scene.add( object);    
        }
        //加載過(guò)程,可以顯示進(jìn)度值
        var onProgress = function ( xhr ) {
            if ( xhr.lengthComputable ) {
                var percentComplete = xhr.loaded / xhr.total * 100;
                console.log( Math.round(percentComplete, 2) + '% downloaded' );
                document.getElementById('progress').innerText= Math.round(percentComplete, 2) + '%下載' ;
            }
        };
        //錯(cuò)誤回調(diào),因?yàn)榫W(wǎng)頁(yè)調(diào)試有報(bào)錯(cuò),這里可以不做處理
        var onError = function ( xhr ) {


        };
        //回調(diào)寫好了,現(xiàn)在可以用加載的方法加載模型了。
        loader.load('knot.obj',onLoad,onProgress,onError);           
    }
    
    //窗口變化時(shí),3D窗口也會(huì)動(dòng)態(tài)適配
    window.onresize = function(){
        var w = document.getElementById("canvas3d").clientWidth;
        var h = document.getElementById("canvas3d").clientHeight;
         
        camera.aspect = w/h;
        camera.updateProjectionMatrix();
        renderer.setSize(w,h); 
    }
    // 渲染
    function render(){
        renderer.render(scene,camera);
    }
    //循環(huán)渲染
    function animate() {
        requestAnimationFrame( animate );
        render();
    }


    </script>
    </body>
</html>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多