参考文章链接:使用threejs实现地球辉光和大气层效果

效果:

代码:


var vertexShader = ['varying vec3 vVertexWorldPosition;','varying vec3  vVertexNormal;','varying vec4 vFragColor;','void main(){','   vVertexNormal   = normalize(normalMatrix * normal);',//将法线转换到视图坐标系中' vVertexWorldPosition    = (modelMatrix * vec4(position, 1.0)).xyz;',//将顶点转换到世界坐标系中'  // set gl_Position',' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);','}'].join('\n');
//大气层效果
THREE.AeroSphere = {uniforms: {coeficient: {type: "f",value: 1.0},power: {type: "f",value: 2},glowColor: {type: "c",value: new THREE.Color(0xffff00)}},vertexShader: vertexShader,fragmentShader: ['uniform vec3    glowColor;','uniform float    coeficient;','uniform float   power;','varying vec3 vVertexNormal;','varying vec3 vVertexWorldPosition;','varying vec4  vFragColor;','void main(){','   vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',    //世界坐标系中从相机位置到顶点位置的距离' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',//视图坐标系中从相机位置到顶点位置的距离' viewCameraToVertex  = normalize(viewCameraToVertex);',//规一化' float intensity     = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);','   gl_FragColor        = vec4(glowColor, intensity);','}'//vVertexNormal视图坐标系中点的法向量//viewCameraToVertex视图坐标系中点到摄像机的距离向量//dot点乘得到它们的夹角的cos值//从中心向外面角度越来越小(从钝角到锐角)从cos函数也可以知道这个值由负变正,不透明度最终从低到高].join('\n')//辉光效果Grow
THREE.GlowSphere = {uniforms: {coeficient: {type: "f",value: 0.0},power: {type: "f",value: 2},glowColor: {type: "c",value: new THREE.Color(0xff22ff)}},vertexShader: vertexShader,fragmentShader: ['uniform vec3    glowColor;','uniform float    coeficient;','uniform float   power;','varying vec3 vVertexNormal;','varying vec3 vVertexWorldPosition;','varying vec4  vFragColor;','void main(){','   vec3 worldVertexToCamera= cameraPosition - vVertexWorldPosition;',    //世界坐标系中顶点位置到相机位置到的距离' vec3 viewCameraToVertex = (viewMatrix * vec4(worldVertexToCamera, 0.0)).xyz;',//视图坐标系中从相机位置到顶点位置的距离' viewCameraToVertex  = normalize(viewCameraToVertex);',//规一化' float intensity     = coeficient + dot(vVertexNormal, viewCameraToVertex);','   if(intensity > 0.65){ intensity = 0.0;}','    gl_FragColor        = vec4(glowColor, intensity);','}'//vVertexNormal视图坐标系中点的法向量//viewCameraToVertex视图坐标系中点到摄像机的距离向量//dot点乘得到它们的夹角的cos值//从中心向外面角度越来越大(从锐角到钝角)从cos函数也可以知道这个值由负变正,不透明度最终从高到低].join('\n')
}//球体 辉光 大气层function shad() {        var material1 = new THREE.ShaderMaterial({uniforms: THREE.AeroSphere.uniforms,vertexShader: THREE.AeroSphere.vertexShader,fragmentShader: THREE.AeroSphere.fragmentShader,blending: THREE.NormalBlending,transparent: true,depthWrite:false});var material2 = new THREE.ShaderMaterial({uniforms: THREE.GlowSphere.uniforms,vertexShader: THREE.GlowSphere.vertexShader,fragmentShader: THREE.GlowSphere.fragmentShader,blending: THREE.NormalBlending,transparent: true});var sphere = new THREE.SphereBufferGeometry(16, 32, 32);var mesh = new THREE.Mesh(sphere, material1);scene.add(mesh);var sphere2 = new THREE.SphereBufferGeometry(10, 32, 32);var mesh2 = new THREE.Mesh(sphere2, material2);//mesh2.position.x = 15;scene.add(mesh2);}

threejs内发光和外发光相关推荐

  1. 图层样式之:内发光、外发光

    内发光 Inner Glow 外发光 Outer Glow 内发光与外发光的选项有两处不同: 1.扩展(外发光),阻塞(内发光). 2.源(内发光),外发光无此项. 结构 Structure 混合模式 ...

  2. Creator3D:shader9_这样的内发光你喜欢不

    前言 在3d游戏中有两种效果非常常见,那就是内发光和外发光.那么他们是怎样实现的呢,看了下边文章你就知道内发光是咋回事了. 效果展示 正文 上边的效果是上一节的 下边的效果是本次的内发光 两者进行对比 ...

  3. 选择图层_Photoshop思维导图,图层的高级操作

    更多的PS笔记和思维导图↑↑↑. 前面分享过图层基础知识和图层混合模式的笔记,建议一起学习.Photoshop三大混合模式详解,附思维导图(速速收藏),最全的Photoshop图层知识整理,附思维导图 ...

  4. 前端页面布局常见问题/已踩过的坑大杂烩

    目录 一.IE8下[图片加文字]展示时自动换行的问题 二.设置了z-index无效 三.当文字超出范围时自动补...省略号 四.实现垂直居中 五.实现无缝十字边框 六.Iphone APP Webvi ...

  5. 影视后期制作学习第四天(AE)

    字符工具: 文字的快捷键是Ctrl+T,也可以在左上角直接点文字工具,框一下,这样文字就会一直在框里,或者在合成栏右键新建文字 在窗口左下打开标题动作安全框,可以辅助文字的位置,最外面的是安全框,所有 ...

  6. c语言给bmp图片加滤镜,图片编辑器PixelStyle: 图像处理,滤镜特效

    图片编辑器PixelStyle: 图像处理,滤镜特效 支持系统 OS X 10.8 价格 0 下载次数 590 官方网站 *不要错过"超级抠图",一键抠图工具,从此告别PS的蜗牛抠 ...

  7. 自定义桌面开始按钮(winxp、7、8、8.1、10)

    一.首先介绍两款"开始"菜单替换软件: (1)StartMenuX (专业版需要付费,免费版少了一些功能,不影响使用,关于软件破解请自行解决) 官方有简体中文版 设置问题:可以设置 ...

  8. 绘图与图片编辑工具—“Artstudio”

    Artstudio Pro Mac是一款非常不错的绘画与图片编辑软件,为用户提供了27种工具:移动.选择.裁剪.吸管.油漆.湿漆.橡皮擦.油漆桶/图案/渐变填充.涂抹.减淡.燃烧.海绵.文字.修复.克 ...

  9. 使用PS(Adobe Photoshop CC)设计Banner

    使用PS(Adobe Photoshop CC)设计Banner (作者:何少军 撰写时间:2019年1月16日) 一.介绍PS(Adobe Photoshop CC)使用的工具以及特效 PS(Ado ...

最新文章

  1. Activiti——流程执行历史记录(七)
  2. UWP Windows10开发获取设备位置(经纬度)
  3. Python 还能实现哪些 AI 游戏?附上代码一起来一把!
  4. 今晚直播 | 一次性掌握机器学习基础知识脉络
  5. [JS] - onmusewheel事件(兼容IE,FF,opera,safari,chrome)
  6. 【毕业求职季】-听说你想去大厂看学妹,教你京东软件产品经理面试如何一把过
  7. Java final关键字,常量的定义
  8. Android动画之Property属性动画
  9. 学习笔记找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID....
  10. Leaflet文档阅读笔记-Quick Start Guide笔记
  11. 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
  12. 【BZOJ3884】上帝与集合的正确用法
  13. 我是 LinkedIn 的 SRE ,我把 LinkedIn 搞挂了
  14. matlab结构体构建,matlab 怎么建立结构体数组?
  15. 机器学习5-支持向量机
  16. PHP中的++和--
  17. 微信小程序ui布局常用技巧
  18. Java支付宝第三方登陆开发过程
  19. 天津大学计算机学院2019夏令营,天津大学环境学院2019年全国优秀大学生夏令营顺利举行...
  20. on1 photo raw 2020中文版(RAW图像处理) v14.5.1.9231绿色便携版

热门文章

  1. jQuery $(this) 无法获取 value解决方法
  2. 转一篇报道:想要个机器人?试试DIY吧
  3. OSChina 周二乱弹 —— 10月份结婚,媳妇要出去锻炼下自己
  4. VS2008简体中文正式版序列号大全
  5. pytorch中nn.Sequential
  6. Delayed延时队列 来实现关闭已超时的任务或订单
  7. linux查看磁盘io命令
  8. 可视化界面Tkinter编写你的小程序
  9. jpg转换成pdf软件推荐
  10. 在HCNA学习的第三天