嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

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

2018-5-11    seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

我們都知道,three.js庫里面內(nèi)置了很多著色器通道對(duì)象供我們渲染場景,本文將對(duì)EffectComposer、RenderPass、FilmPass這三個(gè)通道進(jìn)行學(xué)習(xí)和實(shí)現(xiàn):

1.RenderPass這個(gè)通道會(huì)在當(dāng)前場景(scene)和攝像機(jī)(camera)的基礎(chǔ)上渲染出一個(gè)新場景,新建:

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

2.FilmPass這個(gè)通道通過掃描線和失真模擬電視屏幕效果,實(shí)現(xiàn)的效果超有時(shí)代感,新建:

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

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

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

本文實(shí)現(xiàn)的demo基于three.js_r86(請(qǐng)自行下載),代碼所用js文件和圖片都在下載的那個(gè)包里面,請(qǐng)讀者自行引用。

實(shí)現(xiàn)效果:



代碼:

[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.        //創(chuàng)建地球  
  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.        //在當(dāng)前場景和攝像機(jī)的基礎(chǔ)上渲染一個(gè)新場景  
  80.        let renderPass = new THREE.RenderPass(scene, camera);  
  81.        //通過掃描線和失真來實(shí)現(xiàn)模擬電視屏幕的效果  
  82.        let effectFilm = new THREE.FilmPass(0.8, 0.325, 256, false);  
  83.        //將渲染結(jié)果輸出到屏幕  
  84.        effectFilm.renderToScreen = true;  
  85.   
  86.        //渲染效果組合器,每個(gè)通道都按照傳入的順序執(zhí)行  
  87.        composer = new THREE.EffectComposer(renderer);  
  88.        composer.addPass(renderPass);  
  89.        composer.addPass(effectFilm);  
  90.   
  91.        //菜單欄元素  
  92.        let guiFields = {  
  93.            "掃描線數(shù)量": 256,  
  94.            "灰度圖像": false,  
  95.            "掃描線強(qiáng)度": 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.掃描線強(qiáng)度;  
  101.                effectFilm.uniforms.sCount.value = guiFields.掃描線數(shù)量;  
  102.            }  
  103.        };  
  104.   
  105.        //新建一個(gè)菜單欄  
  106.        let gui = new dat.GUI();  
  107.        gui.add(guiFields, "掃描線數(shù)量", 0, 2048).onChange(guiFields.updateEffectFilm);  
  108.        gui.add(guiFields, "掃描線強(qiáng)度", 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.    //創(chuàng)建一個(gè)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.        //創(chuàng)建phong材料,并進(jìn)行相應(yīng)圖片的貼圖  
  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.        //新建一個(gè)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.        //沒有著色器通道系統(tǒng)默認(rèn)為WebGLRenderer.render  
  151.        //使用著色器通道后,應(yīng)使用使用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>  
藍(lán)藍(lán)設(shè)計(jì)m.sdgs6788.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

日歷

鏈接

個(gè)人資料

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 一区二区三区久久久| 国产欧美日韩不卡免费| 99re66热这里只有精品4| 最新国产の精品合集bt伙计| 久久噜噜亚洲综合| 美女网站在线免费欧美精品| 欧美日韩午夜激情| 欧美二区视频| 欧美日韩大陆在线| 国产麻豆日韩欧美久久| 狠狠做深爱婷婷久久综合一区 | 欧美在线视频一区| 欧美一区二区视频97| 久热re这里精品视频在线6| 欧美黄色成人网| 国产精品日韩欧美一区二区三区| 国模精品娜娜一二三区| 亚洲蜜桃精久久久久久久| 一区二区三区欧美在线| 久久久久久亚洲综合影院红桃| 欧美成人午夜77777| 9色精品在线| 久久久久久亚洲精品杨幂换脸| 欧美美女视频| 国产午夜久久久久| 99re8这里有精品热视频免费 | 亚洲一区精彩视频| 久久久久久亚洲精品杨幂换脸 | 亚洲一级二级| 欧美1区3d| 国产欧美三级| 亚洲伊人伊色伊影伊综合网| 欧美sm重口味系列视频在线观看| 一区二区三区毛片| 欧美精品一区二区在线播放| 在线播放豆国产99亚洲| 久久高清福利视频| 中文无字幕一区二区三区| 老司机久久99久久精品播放免费| 欧美亚韩一区| 一本色道久久综合精品竹菊| 欧美成人自拍| 久久久五月婷婷| 国产欧美日韩综合一区在线播放 | 久久久综合精品| 一区二区av| 欧美激情精品久久久六区热门| 亚洲摸下面视频| 欧美日韩一区精品| 在线综合视频| 99综合精品| 欧美色中文字幕| aa亚洲婷婷| 亚洲伦理一区| 欧美天堂亚洲电影院在线播放| 一区二区欧美激情| 91久久精品视频| 欧美高清日韩| 99精品久久免费看蜜臀剧情介绍| 欧美激情一区二区三区在线| 久久久久久久成人| 亚洲国产精品999| 欧美成人69av| 免费中文字幕日韩欧美| 亚洲美女福利视频网站| 亚洲精品一区二区三| 欧美国产在线观看| 一区二区三区国产盗摄| 亚洲美女福利视频网站| 国产精品草莓在线免费观看| 亚洲综合清纯丝袜自拍| 亚洲自拍偷拍色片视频| 国产欧美一区二区三区在线看蜜臀| 欧美一区二区三区电影在线观看| 亚洲欧美日韩国产精品| 国产日韩一区| 欧美.www| 欧美日韩免费| 午夜精品区一区二区三| 久久精品国产999大香线蕉| 亚洲动漫精品| 一本一本久久a久久精品牛牛影视| 国产精品多人| 美女诱惑一区| 欧美区在线观看| 欧美一区在线直播| 免费成人在线视频网站| 亚洲私人影院| 久久精品国产免费| 亚洲日韩视频| 亚洲主播在线观看| 亚洲福利在线观看| 一区二区三区 在线观看视| 韩国v欧美v日本v亚洲v| 亚洲高清av| 国产三区精品| 亚洲日本中文字幕| 红桃视频成人| 亚洲图片欧洲图片日韩av| 国内精品免费午夜毛片| 亚洲美女中文字幕| 一区精品在线| 亚洲欧美一级二级三级| 亚洲精品日日夜夜| 午夜精品久久久久久久久久久久久| 亚洲激情六月丁香| 欧美亚洲一区二区三区| 一本久道久久综合狠狠爱| 女人香蕉久久**毛片精品| 欧美日韩精品一区二区三区| 免费一级欧美片在线播放| 国产精品狼人久久影院观看方式| 蜜桃av综合| 国产亚洲一本大道中文在线| 亚洲精品小视频在线观看| 亚洲第一免费播放区| 午夜精品www| 亚洲欧美日韩国产精品| 欧美成人亚洲成人| 老司机免费视频一区二区| 国产情人综合久久777777| 9l国产精品久久久久麻豆| 一本色道久久88综合亚洲精品ⅰ| 久久综合狠狠综合久久综青草| 欧美一区激情| 国产精品欧美经典| 中文日韩在线视频| 亚洲一区免费| 欧美日韩视频| 一区二区免费在线播放| 亚洲午夜av| 欧美亚一区二区| 国产精品99久久久久久www| 亚洲最新合集| 欧美韩日一区| 亚洲毛片在线免费观看| 中文国产成人精品| 国产精品成人国产乱一区| 一区二区三区视频在线看| 亚洲女ⅴideoshd黑人| 国产精品视频大全| 香蕉久久久久久久av网站| 久久精品视频免费观看| 国户精品久久久久久久久久久不卡| 欧美在线地址| 欧美黄色网络| 在线亚洲成人| 国产伦精品一区二区三区高清版| 午夜精品av| 欧美人与性动交α欧美精品济南到| 亚洲日本视频| 亚洲性人人天天夜夜摸| 国产精品久久久久久户外露出| 亚洲一区在线直播| 久久久久在线| 亚洲精品在线免费| 欧美视频中文字幕在线| 亚洲一二三区精品| 久久天堂精品| 亚洲美女淫视频| 欧美日韩一区二区在线观看视频| 亚洲一区二区三区在线视频| 久久九九久精品国产免费直播| 亚洲福利在线看| 国产精品毛片一区二区三区| 久久精品国产77777蜜臀| 亚洲国产欧美日韩| 午夜影视日本亚洲欧洲精品| 影音先锋成人资源站| 欧美日韩亚洲综合| 久久久久国产精品www| 亚洲精品黄色| 久久蜜桃精品| 在线亚洲欧美专区二区| 国产亚洲成年网址在线观看| 欧美国产日韩在线观看| 亚洲午夜在线| 亚洲电影观看| 久久久欧美一区二区| 欧美午夜精品| 久久久久久久久综合| 一区二区三区波多野结衣在线观看| 久久亚洲图片| 午夜精品福利一区二区蜜股av| 在线电影一区| 国产欧美一区二区三区久久人妖 | 亚洲一级在线观看| 国内精品久久久久久影视8| 欧美伦理在线观看| 久久精品一区蜜桃臀影院| 一本色道久久综合狠狠躁篇的优点| 女女同性女同一区二区三区91| 欧美淫片网站| 艳女tv在线观看国产一区| 亚洲第一福利社区| 国产精品一区二区三区久久| 欧美日本在线一区| 欧美黄色视屏| 老色批av在线精品| 久久麻豆一区二区|