国产黄色免费网站_久久天天做天天爱综合色_精品国产一区久久久_成人黄色激情网站_久久成人在线视频_美女一区二区在线观看_亚洲精品免费一区亚洲精品免费精品一区 _91精品国产综合久久精品麻豆

使用three.js的著色器通道渲染地球模型

2018-5-11    seo達人

如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

我們都知道,three.js庫里面內置了很多著色器通道對象供我們渲染場景,本文將對EffectComposer、RenderPass、FilmPass這三個通道進行學習和實現:

1.RenderPass這個通道會在當前場景(scene)和攝像機(camera)的基礎上渲染出一個新場景,新建:

[javascript] view plain copy
  1. let renderPass = new THREE.RenderPass(scene, camera);  

2.FilmPass這個通道通過掃描線和失真模擬電視屏幕效果,實現的效果超有時代感,新建:

[javascript] view plain copy
  1. /*四個參數分別為粗糙程度,掃描線強度,掃描線數量,是否轉換為灰度圖*/  
  2. let effectFilm = new THREE.FilmPass(0.8, 0.325, 256, false);  
  3. //將渲染結果輸出到屏幕  
  4. effectFilm.renderToScreen = true;  

3.EffectComposer可以理解為著色器通道容器,著色器通道按照先后順序添加進來并執行,新建:

[javascript] view plain copy
  1. /*渲染效果組合器,每個通道都按照傳入的順序執行*/  
  2. let composer = new THREE.EffectComposer(renderer);  
  3. composer.addPass(renderPass);  
  4. composer.addPass(effectFilm);  

本文實現的demo基于three.js_r86(請自行下載),代碼所用js文件和圖片都在下載的那個包里面,請讀者自行引用。

實現效果:



代碼:

[html] view plain copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>shader_2_earth</title>  
  6.     <style>  
  7.         body{  
  8.             margin: 0;  
  9.             overflow: hidden;  
  10.         }  
  11.     </style>  
  12. </head>  
  13. <body>  
  14. <script src="build/three.js"></script>  
  15. <script src="js/libs/stats.min.js"></script>  
  16. <script src="js/libs/dat.gui.min.js"></script>  
  17. <script src="js/controls/OrbitControls.js"></script>  
  18. <script src="js/Detector.js"></script>  
  19.   
  20. <script src="js/postprocessing/EffectComposer.js"></script>  
  21. <script src="js/postprocessing/ShaderPass.js"></script>  
  22. <script src="js/postprocessing/MaskPass.js"></script>  
  23. <script src="js/postprocessing/FilmPass.js"></script>  
  24. <script src="js/postprocessing/BloomPass.js"></script>  
  25. <script src="js/postprocessing/RenderPass.js"></script>  
  26.   
  27. <script src="js/shaders/CopyShader.js"></script>  
  28. <script src="js/shaders/FilmShader.js"></script>  
  29.   
  30. <div id="stats"></div>  
  31. <div id="container"></div>  
  32. <script>  
  33.     //檢測webgl的兼容性  
  34.    if(!Detector.webgl) Detector.addGetWebGLMessage();  
  35.   
  36.    let scene;  
  37.    let camera, renderer, sphere, controls, stats;  
  38.    let ambientLight, spotLight;  
  39.    let composer;  
  40.    let clock;  
  41.   
  42.    main();  
  43.    render();  
  44.   
  45.    function main() {  
  46.        scene = new THREE.Scene();  
  47.   
  48.        camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);  
  49.        camera.position.set(-10, 15, 25);  
  50.        camera.lookAt(new THREE.Vector3(0, 0, 0));  
  51.   
  52.        renderer = new THREE.WebGLRenderer({antialias:true});  
  53.        renderer.setClearColor(new THREE.Color(0,0,0));  
  54.        renderer.setSize(window.innerWidth, window.innerHeight);  
  55.        renderer.shadowMapEnabled = true;  
  56.   
  57.        controls = new THREE.OrbitControls(camera);  
  58.        controls.autoRotate = false;  
  59.   
  60.        clock = new THREE.Clock();  
  61.   
  62.        ambientLight = new THREE.AmbientLight(0x181818);  
  63.        scene.add(ambientLight);  
  64.   
  65.        spotLight = new THREE.SpotLight(0xffffff);  
  66.        spotLight.position.set(550, 100, 550);  
  67.        spotLight.intensity = 0.6;  
  68.        scene.add(spotLight);  
  69.   
  70.        //創建地球  
  71.        sphere = createMesh(new THREE.SphereGeometry(10, 60, 60));  
  72.        scene.add(sphere);  
  73.   
  74.        document.getElementById("container").appendChild(renderer.domElement);  
  75.   
  76.        /**  
  77.         * 添加渲染通道  
  78.         */  
  79.        //在當前場景和攝像機的基礎上渲染一個新場景  
  80.        let renderPass = new THREE.RenderPass(scene, camera);  
  81.        //通過掃描線和失真來實現模擬電視屏幕的效果  
  82.        let effectFilm = new THREE.FilmPass(0.8, 0.325, 256, false);  
  83.        //將渲染結果輸出到屏幕  
  84.        effectFilm.renderToScreen = true;  
  85.   
  86.        //渲染效果組合器,每個通道都按照傳入的順序執行  
  87.        composer = new THREE.EffectComposer(renderer);  
  88.        composer.addPass(renderPass);  
  89.        composer.addPass(effectFilm);  
  90.   
  91.        //菜單欄元素  
  92.        let guiFields = {  
  93.            "掃描線數量": 256,  
  94.            "灰度圖像": false,  
  95.            "掃描線強度": 0.3,  
  96.            "粗糙程度": 0.8,  
  97.            "updateEffectFilm": function () {  
  98.                effectFilm.uniforms.grayscale.value = guiFields.灰度圖像;  
  99.                effectFilm.uniforms.nIntensity.value = guiFields.粗糙程度;  
  100.                effectFilm.uniforms.sIntensity.value = guiFields.掃描線強度;  
  101.                effectFilm.uniforms.sCount.value = guiFields.掃描線數量;  
  102.            }  
  103.        };  
  104.   
  105.        //新建一個菜單欄  
  106.        let gui = new dat.GUI();  
  107.        gui.add(guiFields, "掃描線數量", 0, 2048).onChange(guiFields.updateEffectFilm);  
  108.        gui.add(guiFields, "掃描線強度", 0, 1).onChange(guiFields.updateEffectFilm);  
  109.        gui.add(guiFields, "粗糙程度", 0, 3).onChange(guiFields.updateEffectFilm);  
  110.        gui.add(guiFields, "灰度圖像").onChange(guiFields.updateEffectFilm);  
  111.   
  112.        stats = initStats();  
  113.    }  
  114.   
  115.    //創建一個Mesh  
  116.    function createMesh(geometry) {  
  117.   
  118.        //初始化紋理加載器  
  119.        let textureLoader = new THREE.TextureLoader();  
  120.        //加載圖片  
  121.        let uniforms = {  
  122.            planetTexture:{value:textureLoader.load("textures/planets/earth_atmos_2048.jpg")},  
  123.            specularTexture:{value:textureLoader.load("textures/planets/earth_specular_2048.jpg")},  
  124.            normalTexture:{value:textureLoader.load("textures/planets/earth_normal_2048.jpg")}  
  125.        };  
  126.   
  127.        //創建phong材料,并進行相應圖片的貼圖  
  128.        let planetMaterial = new THREE.MeshPhongMaterial();  
  129.        planetMaterial.specularMap = uniforms.specularTexture.value;  
  130.        planetMaterial.specular = new THREE.Color(0x4444aa);  
  131.   
  132.        planetMaterial.normalMap = uniforms.normalTexture.value;  
  133.        planetMaterial.map = uniforms.planetTexture.value;  
  134.   
  135.        //新建一個mesh  
  136.        let mesh = new THREE.SceneUtils.createMultiMaterialObject(geometry, [planetMaterial]);  
  137.   
  138.        return mesh;  
  139.    }  
  140.   
  141.    //渲染更新場景  
  142.   
  143.    function render() {  
  144.        stats.update();  
  145.        let delta = clock.getDelta();  
  146.        controls.update(delta);  
  147.        sphere.rotation.y += 0.002;  
  148.        requestAnimationFrame(render);  
  149.   
  150.        //沒有著色器通道系統默認為WebGLRenderer.render  
  151.        //使用著色器通道后,應使用使用composer.render  
  152.        composer.render(delta);  
  153.    }  
  154.   
  155.    //左上角幀顯示  
  156.    function initStats() {  
  157.        let stats = new Stats();  
  158.        stats.setMode(0);  
  159.        stats.domElement.style.position = 'absolute';  
  160.        stats.domElement.style.left = '0px';  
  161.        stats.domElement.style.top = '0px';  
  162.        document.getElementById("stats").appendChild(stats.domElement);  
  163.   
  164.        return stats;  
  165.    }  
  166. </script>  
  167. </body>  
  168. </html>  
藍藍設計www.newchinaweekly.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.newchinaweekly.com

存檔

中文字幕在线观看日| 3d欧美精品动漫xxxx无尽| 搞av.com| 亚洲 欧美 另类人妖| 亚洲人成人无码网www国产 | 暖暖在线中文免费日本| h在线观看网站| 国产精品入口麻豆完整版| 俄罗斯黄色一级片| 黄视频在线观看免费| 国精产品一区一区三区四川| 精品国产一区一区二区三亚瑟| 日韩黄色一级片| 国产精品对白交换视频| 久久综合九色综合97婷婷女人| 国产一区二区精品在线观看| 亚洲欧美日韩国产一区二区三区| 91精品国产品国语在线不卡| 三级精品视频久久久久| 亚洲最大的免费| 国产在线观看福利| 国产性生活大片| 亚洲欧美日韩动漫| 男女小视频在线观看| 偷拍自拍在线看| 天天做天天爱天天爽综合网| 国产精品99久久久久久似苏梦涵 | 另类小说视频一区二区| 麻豆中文一区二区| 亚洲福利视频导航| 日韩在线视频导航| 欧美日韩一区在线观看视频| 欧美xxxxxbbbbb| 国产在线观看第一页| 色偷偷网站视频| 国产福利在线免费观看| 欧美aaaa视频| 午夜日韩福利| 国产精品国产三级国产有无不卡 | 麻豆影院在线| 蜜桃视频欧美| 久久久777精品电影网影网| 日韩精品一区二区在线观看| 国产日韩在线免费| 91老司机精品视频| 久久综合久久色| 欧美精品二区三区| 免费成人黄色网址| 欧美激情不卡| 韩国午夜理伦三级不卡影院| 欧洲激情一区二区| 日韩电视剧免费观看网站| 亚洲欧美日韩久久久久久| 精品九九九九| 国产专区在线视频| 久久久久无码国产精品不卡| 深夜福利网址| 99国内精品久久久久| 国内精品久久久久久99蜜桃| 欧美国产日韩一二三区| www.美女亚洲精品| 丰满人妻一区二区三区53号| 国产大学生自拍| 俺去啦最新地址| 亚洲国产欧美在线观看| 国产二区精品| 亚洲一区二区三区中文字幕在线| 久久久久久久久91| 国产一线二线三线在线观看| 亚洲怡红院av| av播放在线观看| 在线日本高清免费不卡| 欧美日韩国产中文精品字幕自在自线| 欧美mv日韩mv| 欧美在线一区二区三区四| 成人午夜影院在线观看| 国产xxxx振车| 天码人妻一区二区三区在线看| 天堂视频福利| 天天综合亚洲| 欧美精品免费视频| 亚洲欧美日产图| 四虎精品永久在线| 毛片在线播放网站| 国产亚洲毛片在线| 亚洲国产精品久久久久| 蜜臀av.com| 国产美女www爽爽爽视频| 麻豆视频网站在线观看| 开心九九激情九九欧美日韩精美视频电影 | 自产国语精品视频| 91精品国产免费| 免费在线观看污污视频| 亚洲天堂手机版| h片在线观看| 成人av电影在线网| 久久乐国产精品| 国产伦精品一区三区精东| 香蕉视频在线观看www| 伊人久久大香线蕉综合网站 | 日韩中文字幕免费| 午夜视频你懂的| 国产乱在线观看视频| 国产伦精品一区二区三区免费优势| 亚洲欧美日韩小说| 国产高清自拍99| 亚洲GV成人无码久久精品| 国产一二区在线观看| 国产成人午夜视频| 日韩一区二区三区在线| 热久久最新网址| 日本高清视频免费观看| 男女啪啪999亚洲精品| 亚洲一二三四在线观看| 欧美极品jizzhd欧美| 亚洲永久精品视频| 国模视频一区| 亚洲大片在线观看| 在线视频欧美一区| 五月激情婷婷网| 久久97精品| 欧美一区二区三区小说| 国产第一页视频| 拍拍拍无挡免费播放视频在线观看| 欧美久久综合网| 精品国产91洋老外米糕| www.国产免费| 欧美最猛性xxxxx直播| 国产精品久久久久蜜臀| 精品资源在线看| 国产麻豆视频在线观看| 国产精品日韩专区| www日韩大片| 亚洲老妇色熟女老太| 国产真人做爰毛片视频直播 | 一区二区三区四区不卡在线| 精品国产一级| 亚洲综合在线网| 午夜欧美在线一二页| 国产欧美日韩在线观看视频| 国产视频网址在线| 男的插女的下面视频| 国产精品美女呻吟| 亚洲永久免费av| 一区二区三区视频免费在线观看 | 日本一卡2卡三卡4卡网站| 日韩一区二区电影在线观看| 亚洲一二三区不卡| 亚瑟在线精品视频| 久久精品99久久久香蕉| 大片在线观看网站免费收看| 亚洲精品9999| 舔着乳尖日韩一区| 婷婷精品在线观看| 嫩草黄色影院| 久草福利资源在线| 男人j进女人j| 欧美自拍大量在线观看| 91在线小视频| 五月天激情综合网| 久久成人这里只有精品| 久久中文免费视频| 色戒汤唯在线观看| 在线观看日韩一区| 91小视频在线播放| 久久精品五月天| 白嫩亚洲一区二区三区| 欧美日韩成人激情| 精品久久久久久无码人妻| 麻豆网站在线免费观看| 亚洲国产一区在线观看| 精品视频无码一区二区三区| 欧美写真视频一区| 日韩免费大片| 国产香蕉视频在线看| 不卡一本毛片| 91麻豆精品国产91久久久资源速度| 麻豆免费在线观看视频| caoporn97在线视频| 一道本成人在线| 国产福利久久精品| 欧美做a欧美| 久久草av在线| 午夜精品福利一区二区| 成人网18入口| 国产亚洲视频系列| 日韩av在线综合| 国产三级在线观看| 欧洲一区二区三区在线| 老牛影视av老牛影视av| 伊人久久精品一区二区三区| 亚洲激情视频在线| 性鲍视频在线观看| av在线影院| 日韩欧美在线1卡| 日本福利片在线观看| 欧美日韩大片免费观看| 青青久久av北条麻妃黑人| 亚洲精品7777| caoporn国产精品|