Skip to Content
Welcome to yujie-code-blogs build by Nextra 4.0 🎉
Three.js 基础入门与调试4. Threejs物体缩放与旋转

Threejs物体缩放与旋转

物体的缩放与旋转是我们经常要操作的方式。

threejs

1 scale设置缩放

因为物体的scale属性是vector3对象,因此按照vector的属性和方法,设置x/y/z轴方向的缩放大小。

threejs
//例如设置x轴放大3倍、y轴方向放大2倍、z轴方向不变 cube.scale.set(3, 2, 1); //单独设置某个轴的缩放 cube.scale.x = 3;

2 rotation设置旋转

因为的旋转通过设置rotation属性,该属性是Euler类的实例,因此可以通过Euler类的方法进行设置旋转角度。

threejs

因此可以通过以下方式设置旋转物体

//直接设置旋转属性,例如围绕x轴旋转90度 cube.rotation.x = -Math.PI/2 //围绕x轴旋转45度 cube.rotation.set(-Math.PI / 4, 0, 0, "XZY");

set方法,每个参数具体定义

.set ( x : Float, y : Float, z : Float, order : String ) : this

x - 用弧度表示x轴旋转量。y - 用弧度表示y轴旋转量。z - 用弧度表示z轴旋转量。order - (optional) 表示旋转顺序的字符串。

2.1 旋转动画

每一帧旋转弧度制的0.01角度,实现动画代码

function render() { cube.position.x += 0.01; cube.rotation.x += 0.01; if (cube.position.x > 5) { cube.position.x = 0; } renderer.render(scene, camera); // 渲染下一帧的时候就会调用render函数 requestAnimationFrame(render); }

3 综合上述代码

1、在前面创建的项目中的main.js文件写入代码

import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // console.log(THREE); // 目标:控制3d物体移动 // 1、创建场景 const scene = new THREE.Scene(); // 2、创建相机 const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); // 设置相机位置 camera.position.set(0, 0, 10); scene.add(camera); // 添加物体 // 创建几何体 const cubeGeometry = new THREE.BoxGeometry(1, 1, 1); const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 }); // 根据几何体和材质创建物体 const cube = new THREE.Mesh(cubeGeometry, cubeMaterial); // 修改物体的位置 // cube.position.set(5, 0, 0); cube.position.x = 3; // 将几何体添加到场景中 scene.add(cube); console.log(cube); // 初始化渲染器 const renderer = new THREE.WebGLRenderer(); // 设置渲染的尺寸大小 renderer.setSize(window.innerWidth, window.innerHeight); // console.log(renderer); // 将webgl渲染的canvas内容添加到body document.body.appendChild(renderer.domElement); // // 使用渲染器,通过相机将场景渲染进来 // renderer.render(scene, camera); // 创建轨道控制器 const controls = new OrbitControls(camera, renderer.domElement); // 添加坐标轴辅助器 const axesHelper = new THREE.AxesHelper(5); scene.add(axesHelper); function render() { cube.position.x += 0.01; if (cube.position.x > 5) { cube.position.x = 0; } renderer.render(scene, camera); // 渲染下一帧的时候就会调用render函数 requestAnimationFrame(render); } render();

效果展示:

threejs