月球绕地球的示例

月球绕地球的示例


import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
import {CSS2DRenderer,CSS2DObject} from 'three/examples/jsm/renderers/CSS2DRenderer';

import * as dat from 'dat.gui';
const gui = new dat.GUI();
let moon,earth;
let clock = new THREE.Clock();
const textureLoader = new THREE.TextureLoader();
const scene = new THREE.Scene();


const camera = new THREE.PerspectiveCamera(45, innerWidth, innerHeight, 0.1, 2000);
camera.position.set(10, 5, 20);
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();

scene.add(camera);

const light = new THREE.SpotLight(0xffffff);
light.position.set(0,0,10);
light.castShadow = true;
light.intensity = 2;
scene.add(light);

const light_1 = new THREE.AmbientLight(0xffffff);
light_1.intensity = 0.1;
scene.add(light_1);

const moonGeometry = new THREE.SphereGeometry(0.27,16,16);
const moonMaterial = new THREE.MeshPhongMaterial({
    map:textureLoader.load('./image/img-1.jpg')
});
moon = new THREE.Mesh(moonGeometry,moonMaterial);
moon.receiveShadow = true;
moon.castShadow = true;
scene.add(moon);

const earthGeometry = new THREE.SphereGeometry(2.5,32,32);
const earthMaterial = new THREE.MeshPhongMaterial({
    map:textureLoader.load('./image/test.jpg'),
    shininess:5
    // specularMap
})
earth = new THREE.Mesh(earthGeometry,earthMaterial);
earth.receiveShadow = true;
earth.castShadow = true;
scene.add(earth);

const renderer = new THREE.WebGL1Renderer({
    antialias: true
});

renderer.outputEncoding = THREE.sRGBEncoding;
renderer.setSize(innerWidth, innerHeight);
renderer.shadowMap.enabled = true;

document.body.appendChild(renderer.domElement);
// scene.add(new THREE.AxesHelper(200))
render();
let oldTime = 0;
function render(){
    let time = clock.getElapsedTime();
    moon.position.set(Math.sin(time) * 5,0,Math.cos(time)*5);
    let axis = new THREE.Vector3(0,1,0);
    // console.log(time - oldTime)
    earth?.rotateOnAxis(axis,(Number.isNaN(time - oldTime)?0:(time - oldTime)) * Math.PI/10)
    renderer.render(scene,camera);
    oldTime = time;
    requestAnimationFrame(render);
}
new OrbitControls(camera,renderer.domElement);
window.onresize = () => {
    camera.aspect = innerWidth / innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(innerWidth, innerHeight);
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值