web3d-three.js场景设计器-天空包围盒-TWEEN.js

THREE.JS 实现场景天空包围盒,为了让场景背景更具体,而不是呆板的纯色,可以给厂家添加围绕的包围盒。

  • 这里使用球体来实现,球体中央则是场景
  • 给球体添加天空的渐变色
  • 加入场景

代码如下

function createSky( hemiLight) {

const vertexShader = `varying vec3 vWorldPosition;

void main() {

vec4 worldPosition = modelMatrix * vec4( position, 1.0 );

vWorldPosition = worldPosition.xyz;

gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );

}`

const fragmentShader = `uniform vec3 topColor;

uniform vec3 bottomColor;

uniform float offset;

uniform float exponent;

varying vec3 vWorldPosition;

void main() {

float h = normalize( vWorldPosition + offset ).y;

// 从-0.2 到1做渐变

h = smoothstep(-0.4, 1.0, h);

gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h , 0.0), exponent ), 0.0 ) ), 1.0 );

}`

const uniforms = {

'topColor': { value: new THREE.Color(0x0077ff) },

'bottomColor': { value: new THREE.Color(0xeeeeee) },

'offset': { value: 30 },

'exponent': { value: 0.6 }

}

uniforms'topColor'.value.copy(hemiLight.color)

// scene.fog.color.copy( uniforms 'bottomColor' .value );

const skyGeo = new THREE.SphereGeometry(4000, 32, 15)

const skyMat = new THREE.ShaderMaterial({

uniforms: uniforms,

vertexShader: vertexShader,

fragmentShader: fragmentShader,

side: THREE.BackSide

})

const sky = new THREE.Mesh(skyGeo, skyMat)

return sky

}

相关推荐
张文君2 分钟前
ubuntu26.04坏块分区隔离急速版
java·前端·python
ttwuai2 分钟前
Go 后台管理系统组件库文档怎么写,才不会坑后续维护?
开发语言·javascript·golang
两只羊ovo4 分钟前
给 Agent 装上手脚:手写 mini-Cursor,从建项目到跑起来
前端
茉莉玫瑰花茶7 分钟前
知识库的构建 [ 3 ]
开发语言·python
旧梦952710 分钟前
Java 枚举类详解:从基础语法到高级用法
java·开发语言·python
yivifu10 分钟前
查拼音程序升级版
开发语言·python
小灰灰搞电子14 分钟前
分享自己写的一个通信协议源码,支持C++和C,双包头+不定长
c语言·开发语言·c++
Hive_MOM15 分钟前
制造企业库存精益化管理数字化:从“库存压资金、找货靠人翻“到“库存水位实时可见、资金周转提速“
前端·制造
光影少年23 分钟前
react navite调试方案:Flipper、远程调试
前端·javascript·react native·react.js·前端框架
Brilliantwxx27 分钟前
【C++】初入嵌入式C++复习-----经典面试题100道
开发语言·c++·算法·面试·职场和发展