<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        利用Three.js如何實現陰影效果實例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:28:58
        文檔

        利用Three.js如何實現陰影效果實例代碼

        利用Three.js如何實現陰影效果實例代碼:前言 眾所周知作為webgl的插件,three.js肯定沒有原生webgl那樣,添加一個陰影這么費勁。所以,經過一小時的研究(笨人不聰明,已經是極限速度了)。終于將陰影效果做了出來,并且還發現一些容易犯錯的地方。話不多說了,來一起看看詳細的介紹吧。 先上效果
        推薦度:
        導讀利用Three.js如何實現陰影效果實例代碼:前言 眾所周知作為webgl的插件,three.js肯定沒有原生webgl那樣,添加一個陰影這么費勁。所以,經過一小時的研究(笨人不聰明,已經是極限速度了)。終于將陰影效果做了出來,并且還發現一些容易犯錯的地方。話不多說了,來一起看看詳細的介紹吧。 先上效果

        前言

        眾所周知作為webgl的插件,three.js肯定沒有原生webgl那樣,添加一個陰影這么費勁。所以,經過一小時的研究(笨人不聰明,已經是極限速度了)。終于將陰影效果做了出來,并且還發現一些容易犯錯的地方。話不多說了,來一起看看詳細的介紹吧。

        先上效果圖:

        實現這個效果其實很簡單,只需要設置幾個屬性就可以實現當前的效果。而上面的材質問題我將放到下一節:

        (1)首先需要告訴渲染器我需要陰影,你給我生成陰影:

        renderer.shadowMap.enabled = true; 

        (2)然后告訴燈光,我需要陰影:

        light.castShadow = true; 

        (3)告訴模型哪些需要投射陰影:

        //告訴球需要投射陰影 
         sphere.castShadow = true; 
        //告訴立方體需要投射陰影 
         cube.castShadow = true; 

        (4)最后告訴最底下的平面長方形你要接受陰影:

        plane.receiveShadow = true; 

        上面四步只要設置好了,就可以實現陰影的效果了。

        注意事項:你的模型的材質一定要選擇對燈光有反應的材質,要不然不會出現效果,就是因為這個問題導致好長時間沒有整出來陰影。

        案例全部代碼:

        <!DOCTYPE html> 
        <html lang="en"> 
        <head> 
         <meta charset="UTF-8"> 
         <title>Title</title> 
         <style type="text/css"> 
         html, body { 
         margin: 0; 
         height: 100%; 
         } 
         
         canvas { 
         display: block; 
         } 
         
         </style> 
        </head> 
        <body onload="draw();"> 
         
        </body> 
        <script src="build/three.js"></script> 
        <script src="examples/js/controls/TrackballControls.js"></script> 
        <script src="examples/js/libs/stats.min.js"></script> 
        <script> 
         var renderer; 
         function initRender() { 
         renderer = new THREE.WebGLRenderer({antialias:true}); 
         renderer.setSize(window.innerWidth, window.innerHeight); 
         //告訴渲染器需要陰影效果 
         renderer.shadowMap.enabled = true; 
         renderer.shadowMap.type = THREE.PCFSoftShadowMap; // 默認的是,沒有設置的這個清晰 THREE.PCFShadowMap 
         document.body.appendChild(renderer.domElement); 
         } 
         
         var camera; 
         function initCamera() { 
         camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000); 
         camera.position.set(0, 40, 100); 
         camera.lookAt(new THREE.Vector3(0,0,0)); 
         } 
         
         var scene; 
         function initScene() { 
         scene = new THREE.Scene(); 
         } 
         
         var light; 
         function initLight() { 
         scene.add(new THREE.AmbientLight(0x444444)); 
         
         light = new THREE.SpotLight(0xffffff); 
         light.position.set(60,30,0); 
         
         //告訴平行光需要開啟陰影投射 
         light.castShadow = true; 
         
         scene.add(light); 
         } 
         
         function initModel() { 
         //上面的球 
         var sphereGeometry = new THREE.SphereGeometry(5,20,20); 
         var sphereMaterial = new THREE.MeshStandardMaterial({color:0x7777ff}); 
         
         var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); 
         sphere.position.y = 5; 
         
         //告訴球需要投射陰影 
         sphere.castShadow = true; 
         
         scene.add(sphere); 
         
         //輔助工具 
         var helper = new THREE.AxisHelper(10); 
         scene.add(helper); 
         
         //立方體 
         var cubeGeometry = new THREE.CubeGeometry(10,10,8); 
         var cubeMaterial = new THREE.MeshLambertMaterial({color:0x00ffff}); 
         
         var cube = new THREE.Mesh(cubeGeometry, cubeMaterial); 
         cube.position.x = 25; 
         cube.position.y = 5; 
         cube.position.z = -5; 
         
         //告訴立方體需要投射陰影 
         cube.castShadow = true; 
         
         scene.add(cube); 
         
         //底部平面 
         var planeGeometry = new THREE.PlaneGeometry(100,100); 
         var planeMaterial = new THREE.MeshStandardMaterial({color:0xaaaaaa}); 
         
         var plane = new THREE.Mesh(planeGeometry, planeMaterial); 
         plane.rotation.x = - 0.5 * Math.PI; 
         plane.position.y = -0; 
         
         //告訴底部平面需要接收陰影 
         plane.receiveShadow = true; 
         
         scene.add(plane); 
         
         } 
         
         //初始化性能插件 
         var stats; 
         function initStats() { 
         stats = new Stats(); 
         document.body.appendChild(stats.dom); 
         } 
         
         //用戶交互插件 鼠標左鍵按住旋轉,右鍵按住平移,滾輪縮放 
         var controls; 
         function initControls() { 
         controls = new THREE.TrackballControls( camera ); 
         //旋轉速度 
         controls.rotateSpeed = 5; 
         //變焦速度 
         controls.zoomSpeed = 3; 
         //平移速度 
         controls.panSpeed = 0.8; 
         //是否不變焦 
         controls.noZoom = false; 
         //是否不平移 
         controls.noPan = false; 
         //是否開啟移動慣性 
         controls.staticMoving = false; 
         //動態阻尼系數 就是靈敏度 
         controls.dynamicDampingFactor = 0.3; 
         //未知,占時先保留 
         //controls.keys = [ 65, 83, 68 ]; 
         controls.addEventListener( 'change', render ); 
         } 
         
         function render() { 
         renderer.render( scene, camera ); 
         } 
         
         //窗口變動觸發的函數 
         function onWindowResize() { 
         
         camera.aspect = window.innerWidth / window.innerHeight; 
         camera.updateProjectionMatrix(); 
         controls.handleResize(); 
         render(); 
         renderer.setSize( window.innerWidth, window.innerHeight ); 
         
         } 
         
         function animate() { 
         //更新控制器 
         render(); 
         
         //更新性能插件 
         stats.update(); 
         
         controls.update(); 
         
         requestAnimationFrame(animate); 
         } 
         
         function draw() { 
         initRender(); 
         initScene(); 
         initCamera(); 
         initLight(); 
         initModel(); 
         initControls(); 
         initStats(); 
         
         animate(); 
         window.onresize = onWindowResize; 
         } 
        </script> 
        </html> 

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        利用Three.js如何實現陰影效果實例代碼

        利用Three.js如何實現陰影效果實例代碼:前言 眾所周知作為webgl的插件,three.js肯定沒有原生webgl那樣,添加一個陰影這么費勁。所以,經過一小時的研究(笨人不聰明,已經是極限速度了)。終于將陰影效果做了出來,并且還發現一些容易犯錯的地方。話不多說了,來一起看看詳細的介紹吧。 先上效果
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日本精品久久久久久久久免费| 国产日本亚洲一区二区三区| 农村寡妇一级毛片免费看视频| 四虎成人免费观看在线网址| 亚洲精品二三区伊人久久| 国产黄色免费网站| 亚洲国产一区在线观看| 台湾一级毛片永久免费| 亚洲人成小说网站色| 成熟女人特级毛片www免费| 亚洲小说图区综合在线| 日韩视频免费在线| 久久精品国产亚洲AV未满十八| 免费毛片在线播放| 鲁啊鲁在线视频免费播放| 国产午夜无码精品免费看动漫| 国产精品视频全国免费观看| 羞羞的视频在线免费观看| 亚洲国产免费综合| 污污污视频在线免费观看| 丁香五月亚洲综合深深爱| 黄色网站软件app在线观看免费| 久久久久亚洲AV无码专区首| 16女性下面扒开无遮挡免费| 亚洲欧美国产国产一区二区三区| 国产一级做a爱免费视频| 久久www免费人成看国产片| 亚洲精品人成在线观看| 91香蕉视频免费| 黄色免费网址在线观看| 久久久久亚洲精品美女| 在线不卡免费视频| 成人免费一区二区三区 | www免费插插视频| 亚洲AV无码一区二区三区系列| 国产精品成人免费福利| 国产亚洲日韩在线a不卡| 亚洲国产精品无码专区| 在线精品免费视频| a毛片在线免费观看| 亚洲人成网站免费播放|