three.js实现小岛

1.导入对象

// 导入水面
import {Water} from "three/examples/jsm/objects/Water2";
// 导入qlft载入库
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";

2.创建天空

 

let texture = new THREE.TextureLoader().load("./textures/land/sky.jpg");
const skyGeometry = new THREE.SphereGeometry(1000,60,60);
const skyMaterial = new THREE.MeshBasicMaterial({
    map:texture
});
skyGeometry.scale(1, 1, -1)//scale.z=-1进入圆形是有贴图,z=1 进入原型是黑的
const sky = new THREE.Mesh(skyGeometry,skyMaterial)
skyMaterial.map.needsUpdate = true;  //视频循环播放

const video = document.createElement("video");
video.src = "./textures/land/sky.mp4";
video.loop = true;

window.addEventListener("click", (e) => {
    // 当鼠标移动的时候播放视频
    // 判断视频是否处于播放状态
    if (video.paused) {
      video.play();
      let texture = new THREE.VideoTexture(video);
      skyMaterial.map = texture;
      skyMaterial.map.needsUpdate = true;  //告诉renderer这一帧我该更新缓存了
    }
  });
scene.add(sky)

3.创建水面

const waterGeometry = new THREE.CircleBufferGeometry(300,64);
const water = new Water(waterGeometry,{
    textureWidth:1024,
    textureHeight:1024,
    color:0xeeeeff,
    flowDirection:new THREE.Vector2(1,1),
    scale:1
})
water.rotation.x = -Math.PI / 2;
water.position.y = 10;
scene.add(water)

4.导入小岛

// 实例化gltf载入库
const loader = new GLTFLoader();
// 实例化draco载入库
const dracoLoader = new DRACOLoader();
// 添加draco载入库
dracoLoader.setDecoderPath("./draco/");
// 添加draco载入库
loader.setDRACOLoader(dracoLoader);

loader.load("./model/island2.glb", (gltf) => {
  scene.add(gltf.scene);
});

5.载入环境纹理

 

const hdrLoader = new RGBELoader();
hdrLoader.loadAsync("./assets/050.hdr").then((texture) => {
  texture.mapping = THREE.EquirectangularReflectionMapping;
  scene.background = texture;
  scene.environment = texture;
});

6.渲染器设置注意事项

 

const renderer = new THREE.WebGL1Renderer({
     // 设置抗锯齿
     antialias: true,
     //   对数深度缓冲区
    logarithmicDepthBuffer: true,
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值