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

}

相关推荐
黑客老李18 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
开开心心就好26 分钟前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
難釋懷27 分钟前
Vue解决开发环境 Ajax 跨域问题
前端·vue.js·ajax
特立独行的猫a32 分钟前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
中微子33 分钟前
小白也能懂:JavaScript 原型链和隐藏类的奇妙世界
javascript
咸虾米34 分钟前
在uniCloud云对象中定义dbJQL的便捷方法
前端·javascript
梨子同志35 分钟前
JavaScript Proxy 和 Reflect
前端·javascript
海的诗篇_37 分钟前
移除元素-JavaScript【算法学习day.04】
javascript·学习·算法
汤圆炒橘子39 分钟前
状态策略模式的优势分析
前端
__Yx__40 分钟前
JavaScript核心概念输出——原型链
javascript