Threejs创建天空和太阳

简介: 这篇文章讲解了如何使用Three.js中的Sky组件来创建真实的天空与太阳效果,包括调整天空的颜色、太阳的位置以及实现大气散射等技巧。

之前有讲过使用天空盒子来绘制天空效果,简单的讲就是做一个正方体将整个场景包含在里面,正方体的六个面用贴图无缝衔接上,然后渲染出天空的效果。

这节讲用threejs自带的Sky组件实现天空效果,这样不仅省的自己去找图片,而且会加上太阳的效果,显得更逼真和漂亮,上一篇文章绘制了大海,这这个Sky就基于海面上创建天空效果,如果需要前面的代码可以参照这篇文章Threejs制作海面效果

首先我们在开头引入Sky组件:

import * as THREE from 'three'
import {OrbitControls} from "three/addons/controls/OrbitControls";
import { Water } from 'three/examples/jsm/objects/Water.js';
import { Sky } from 'three/examples/jsm/objects/Sky'

接着在新建一个方法用于渲染天空和太阳,这的天空实际上还是使用的天空盒子,要做个很大的盒子,把整个场景装进去,然后渲染起来类似天空的效果,其次在天空中添加一个太阳的效果,使用Sky的一些属性给太阳的周围添加一些晕轮效果,可以设置太阳浑浊度,散射等,属性的作用我已经在代码中做了详细的注释,大家可以修改他们的值来尝试。

initSky(){
      let sky = new Sky();
      sky.scale.setScalar( 45000 );//太阳盒子的大小,要把整个场景包含进去
      scene.add( sky );

      const effectController = {
        turbidity: 10,//浑浊度
        rayleigh: 3,//阳光散射,黄昏效果的程度
        mieCoefficient: 0.005,//太阳对比度,清晰度
        mieDirectionalG: 0.7,
        elevation: 2,//太阳高度
        azimuth: 180,//太阳水平方向位置
        exposure: this.renderer.toneMappingExposure //光线昏暗程度
      };

      let sun = new THREE.Vector3();
      const uniforms = sky.material.uniforms;
      uniforms[ 'turbidity' ].value = effectController.turbidity;
      uniforms[ 'rayleigh' ].value = effectController.rayleigh;
      uniforms[ 'mieCoefficient' ].value = effectController.mieCoefficient;
      uniforms[ 'mieDirectionalG' ].value = effectController.mieDirectionalG;
      const phi = THREE.MathUtils.degToRad( 90 - effectController.elevation );
      const theta = THREE.MathUtils.degToRad( effectController.azimuth );
      sun.setFromSphericalCoords( 1, phi, theta );
      uniforms[ 'sunPosition' ].value.copy( sun );
      this.renderer.toneMappingExposure = effectController.exposure;
      this.renderer.render( scene, this.camera );
    },

最终,在场景中的展示如图所示:个人觉得还是很nice的,可以通过之前制作动画效果的课程,实现太阳的升起和落下,

相关文章
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现下雨,下雪,阴天,晴天,火焰
2392 0
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现天空盒,全景场景,地面草地
Threejs实现天空盒,全景场景,地面草地
1731 0
Threejs实现天空盒,全景场景,地面草地
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
3207 0
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟管道液体流动
Threejs实现模拟管道液体流动
3102 0
Threejs实现模拟管道液体流动
|
数据可视化 定位技术
three.js实现烟雾缭绕效果
前言 大家好!我是Fly哥,最近接广告的接的有点多, 感谢大家还是一如既往的支持我!respect, 前几天我在朋友圈分享了一个烟雾缭绕的效果。很多小伙伴都表示非常感兴趣,有的同学说用到了噪声, 有的同学说用到了着色器,还有更过分说用到了ps, 胖虎竟然无语凝噎。其实都是就是简单的贴图。配合一点想象力。我们先看下效果: 然后我就发了一条朋友圈,问这个像什么?? 有的说 云层, 有的说云墨,有的说雾霭, 其实都不是, 我想做的是烟雾。好的话不不多说!, 本篇文章阅读大概5分钟。不耽误大家太多时间,主要是介绍思路, 说太多也没啥意义。如果你对three.js 还没有一点了解都没有,
three.js实现烟雾缭绕效果
|
11月前
Three添加天空盒子
这篇文章详细说明了如何在Three.js中添加天空盒(Skybox)以增强3D场景的真实感和沉浸体验。
431 6
Three添加天空盒子
|
11月前
Threejs制作窗户透亮效果
这篇文章讲解了如何在Three.js中制作窗户的透亮效果,包括设置透明材质和光照以实现逼真的窗户渲染效果的技术细节。
264 1
|
11月前
ThreeJs制作管道中水流效果
这篇文章详细介绍了如何在Three.js中创建具有动态水流效果的管道模型,通过纹理贴图的移动来模拟水流的视觉效果。
781 2
ThreeJs制作管道中水流效果
|
11月前
ThreeJs场景中添加视频
这篇文章详细说明了如何在Three.js场景中添加并播放视频,包括视频纹理的创建与应用,以及如何将视频流显示在3D模型的表面上。
372 2
ThreeJs场景中添加视频
|
11月前
Threejs播放模型自带动画
这篇文章介绍了在Three.js中如何播放带有预设动作的模型动画,并特别提到了如何设置动画循环模式以实现一次性播放效果。
343 3
Threejs播放模型自带动画