three.js旋转,材质,灯光使用 —— 太阳地球月亮运动

该代码使用Three.js库创建了一个3D场景,包含地球、月亮和太阳的模型,它们在场景中旋转。使用OrbitControls实现视角控制,点光源增加立体感,WebGLRenderer处理图形渲染。
摘要由CSDN通过智能技术生成
import * as THREE from 'three'
//引入控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

const { log } = console

//创建场景
const scene = new THREE.Scene();
scene.background = new THREE.Color("#000")
//scene.environment = new THREE.Color("#ddd")

//创建相机添加至场景
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 10, 1)

//创建渲染器
const renderer = new THREE.WebGLRenderer({
  antialias: true // 搞锯齿
})
renderer.setSize(window.innerWidth, window.innerHeight)

//添加辅助线
const axes = new THREE.AxesHelper(5)
//scene.add(axes)
axes.position.set(0, 0, 0)

//创建星球
const createBall = (sizeArray) => {
  const spereGeometry = new THREE.SphereGeometry(...sizeArray)
  const spereMaterial = new THREE.MeshLambertMaterial()
  return new THREE.Mesh(spereGeometry, spereMaterial)
}

//创建地球组级太阳组
const earchGroup = new THREE.Group()
const sunGroup = new THREE.Group()

const earch = createBall([1, 20, 20])
earch.material.map = new THREE.TextureLoader().load('./earch.jpg')
earchGroup.add(earch)

const moon = createBall([.3, 20, 20])
moon.material.map = new THREE.TextureLoader().load('./moon.png')
earchGroup.add(moon)
moon.position.set(0, 0, 2)
earchGroup.add(moon)
earchGroup.position.x = 6

//scene.add(earchGroup)
const spereGeometry = new THREE.SphereGeometry(2, 30, 30)
const spereMaterial = new THREE.MeshBasicMaterial()

const sun = new THREE.Mesh(spereGeometry, spereMaterial)
sun.material.map = new THREE.TextureLoader().load('./sun.jpg')
sunGroup.add(sun)
sunGroup.add(earchGroup)
scene.add(sunGroup)

//添加环境 光
// const alight = new THREE.AmbientLight("#FFF", .7)
// scene.add(alight)



//添加点光源
const light = new THREE.PointLight({
  color: "0xff0000",
  intensity: 100
});
light.position.set(0, 0, 0);
scene.add(light);
//添加控制器,并设置阻尼
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true

document.body.appendChild(renderer.domElement)

const clock = new THREE.Clock()
const render = () => {
  const time = clock.getElapsedTime()
  earchGroup.rotation.y = time
  earch.rotation.y = time
  moon.rotation.y = time
  sunGroup.rotation.y = time
  controls.update()
  renderer.render(scene, camera)
  requestAnimationFrame(render)
}
render()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值