threejs学习记录第一天

threejs官网:
https://threejs.org/

使用cdn引入threejs

<script type="importmap">
    {
      "imports": {
        "three": "https://cdn.jsdelivr.net/npm/three@v0.149.0/build/three.module.js",
        "three/addons/": "https://cdn.jsdelivr.net/npm/three@v0.149.0/examples/jsm/"
      }
    }
  </script>
// 导入THREE和控制器
import * as THREE from 'three';
    import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 创建场景
const scene = new THREE.Scene();
// 设置背景色,16进制
// scene.background = new THREE.Color(0xffffff);
// 设置背景图片,需要6个图片,setPath为图片文件夹地址,load填写具体文件名,必须为正方形图片,否则报错
scene.background = new THREE.CubeTextureLoader().setPath('./img/').load(['5.png', '5.png', '5.png', '5.png', '5.png', '5.png'])
/**
 添加雾,第一个参数为雾的颜色,
 第二个参数为开始应用雾的最小距离,小于这个距离的物体不会受到影响;
 第三个参数为应用雾的最大距离,大于这个距离的物体不会受到影响 
**/
scene.fog = new THREE.Fog(0xffffff, 0, 80);
/** 
创建透视相机,近大远小,类似人眼。
包含4个参数:
	fov 角度,角度越大,看的越远,场景元素越小,使用滚轮操控相机控制器时放大缩小改变的是角度;
	aspect 长宽比,默认窗口大小比,场景中的元素会根据此比例显示,如设置4 / 1,则元素会很扁
	near 摄像机能看到最近的距离,相当于摄像机前面有一块透明的遮罩,只有遮罩前面的元素才能显示,遮罩后面的元素会被挡住,无法显示
	far 摄像机能看到的最远的距离,相当于near遮罩前面还有一个遮罩,在near遮罩和这个遮罩里面的元素才能看见,超过far遮罩距离的元素无法看见
**/
const camera = new THREE.PerspectiveCamera();
// 移动相机位置
camera.position.z = 10;
camera.position.y = 5;
// 创建立方体,定义立方体结构和材质
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 颜色,16进制
// 创建网格,把立方体结构和材质添加进去,才能在页面上显示
const cube = new THREE.Mesh(geometry, material);
cube.position.set(0, 3, 0) // 移动位置(x,y,z)
scene.add(cube);
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
// 调整渲染器窗口大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 把3d场景添加进页面中
document.getElementById('container').appendChild(renderer.domElement);
// 添加相机控制器,添加后可以拖动场景,鼠标滚轮放大缩小场景
const controls = new OrbitControls(camera, renderer.domElement);
 // 监听轨道控制器修改事件,场景每次改变都会触发
controls.addEventListener('change', (e) => {
 	console.log('change controls');
});
 // 添加阻尼效果,添加后,拖动场景场景会有一个惯性阻尼效果
controls.enableDamping = true;
controls.dampingFactor = 0.01; // 阻尼惯性
  // 自动旋转,使场景自动旋转
controls.autoRotate = true;
controls.autoRotateSpeed = 0.5; // 旋转速度
 // 添加坐标轴,辅助坐标轴,会显示x,y,z辅助线
const axesHelper = new THREE.AxesHelper(5);
axesHelper.position.y = 3
scene.add(axesHelper);
// 添加网格地面,辅助网格
const gridHelper = new THREE.GridHelper(10, 10);
scene.add(gridHelper);
 // 立方体动画
 function animate() {
   requestAnimationFrame(animate);
   cube.rotation.x += 0.01;
   cube.rotation.y += 0.01;
   cube.rotation.z += 0.01;
   // 移动相机,元素变化后更新相机位置
   controls.update();
   // 进行渲染,把场景和相机渲染出来
   renderer.render(scene, camera);
 }
 animate();
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行中的伊蕾娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值