zoukankan      html  css  js  c++  java
  • ThreeJS 高亮地球

    环境

    • ThreeJS 107版本
    • three.min.js
    • OrbitControls.js

    说明

    网上地球高亮和辉光的效果很多,这里用GLSL做(没学明白,网上东拼西凑拿来用了)。还有尝试过用Render渲染,但是render生成的canvas会覆盖整个浏览器窗口,把背景遮盖住。

    解决方案

    1. 创建球的过程参见"ThreeJS制作地球"

    2. 创建定点着色器和片元着色器

    var vertexShader = [
    'varying vec3 vNormal;',
    'void main()',
    '{',
    'vNormal = normalize(normalMatrix * normal);',
    'gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
    '}'
    ].join('
    ');
    var fragmentShader2 = [
    'uniform float c;',
    'uniform float p;',
    'varying vec3 vNormal;',
    'void main()',
    '{',
    'float intensity = pow(c - dot(vNormal, vec3(0.0, 0.0, 1.0)), p);',
    'gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0) * intensity;',
    '}'
    ].join('
    ');
    
    1. 将着色器赋给ShaderMaterial材质
    var material_glow = new THREE.ShaderMaterial({
    fragmentShader: fragmentShader2,
    vertexShader: vertexShader,
    uniforms: {
    "c": {
    type: "f",
    value: _cValue
    },
    "p": {
    type: "f",
    value: _pValue
    }
    },
    depthWrite: false,
    side: THREE.BackSide
    });
    
    1. 在地球外面再克隆一个稍大的球,把材质贴上
    //然后创建一个object,类型为Mesh。他的参数使我们之前创的几何模型以及材料
    var sphere = new THREE.Mesh(new THREE.SphereGeometry(_earthOptions.earthBallSize + _pBuffer, 50, 50).clone(), material_glow);
    sphere.position.set(0, 0, 0);
    scene.add(sphere);
    
    1. 执行渲染
    render();
    // 执行函数
    function render() {
    if (handle) {
    cancelAnimationFrame(handle);
    }
    //是否开启了辉光渲染,如开启则开启辉光渲染
    if (composer) {
    composer.render();
    }
    renderer.clearDepth();
    //自转
    scene.rotation.y += _earthOptions.autorotationSpeed ? _earthOptions.autorotationSpeed : 0;
    renderer.render(scene, camera);
    orbitcontrols.update();
    handle = requestAnimationFrame(render);
    }
    

    附上效果图

    高亮效果

  • 相关阅读:
    GitHub 教程【转】
    Github 教程
    Excel 多个单元格输入同样内容
    寻找问题远比解决问题重要!
    蒲公英: 一个提供App 存储、分发、Bug管理的网站
    Dacapao 实验集(9.12 版本) 能不能给个网址?【内存分析实验】
    软件测试思维导图[ZZ]
    程序员、技术领导、管理者各有烦恼,你占了几条?ZZ
    r test
    mooctest项目总结 【转载】
  • 原文地址:https://www.cnblogs.com/giser-s/p/12928631.html
Copyright © 2011-2022 走看看