三、Three.js模型对象、材质

一、三维向量Vector3与模型位置

点模型Points、线模型Line、网格网格模型Mesh等模型对象的父类都是Object3D,如果想对这些模型进行旋转、缩放、平移等操作,如何实现,可以查询Threejs文档Object3D对相关属性和方法的介绍

1、三维向量Vector3

三维向量Vector3有xyz三个分量,threejs中会用三维向量Vector3表示很多种数据,本节课提到的比较简单,就是位置.position和缩放.scale属性。

查看three.js文档你可以知道Vector3对象具有属性.x、.y、.z,Vector3对象还具有.set()等方法。

javascript 复制代码
const v3 = new THREE.Vector3(100,100,100);
v3.set(50,50,50)
console.log('sad',v3);

2、位置属性.position

javascript 复制代码
// 位置属性.position使用threejs三维向量对象Vector3表示的
console.log('模型位置属性.position的值', mesh.position);

模型位置.position属性用一个三维向量表示,那意味着,以后你想改变位置属性,就应该查询文档Vector3。

这里之所以强调这一点,课程目的不单单是给你介绍具体的知识点,也是在引导你学会查文档,降低记忆压力。

3、改变位置属性

通过模型位置属性.position可以设置模型在场景Scene中的位置。模型位置.position的默认值是THREE.Vector3(0.0,0.0,0.0),表示坐标原点。

设置网格模型y坐标

javascript 复制代码
mesh.position.y = 80;

设置模型xyz坐标

javascript 复制代码
mesh.position.set(80,2,10);

4、缩放

属性.scale表示模型对象的xyz三个方向上的缩放比例,.scale的属性值是一个三维向量对象Vector3,默认值是THREE.Vector3(1.0,1.0,1.0)。

轴方向放大2倍

javascript 复制代码
mesh.scale.x = 2.0;

网格模型xyz方向分别缩放0.5,1.5,2倍

javascript 复制代码
mesh.scale.set(2, 1.5, 2)

5、平移

执行.translateX()、.translateY()等方法本质上改变的都是模型的位置属性.position。

网格模型沿着x轴正方向平移100,可以多次执行该语句,每次执行都是相对上一次的位置进行平移变换。

javascript 复制代码
// 等价于mesh.position = mesh.position + 100;
mesh.translateX(100);//沿着x轴正方向平移距离100

沿着Z轴负方向平移距离50。

javascript 复制代码
mesh.translateZ(-50);

二、欧拉Euler与角度属性.rotation

模型的角度属性.rotation和四元数属性.quaternion都是表示模型的角度状态,只是表示方法不同,.rotation属性值是欧拉对象Euler,.quaternion属性值是是四元数对象Quaternion

大家刚入门,就先给大家介绍比较容易理解的角度属性.rotation和对应属性值欧拉对象Euler

1、欧拉对象Euler

javascript 复制代码
// 创建一个欧拉对象,表示绕着xyz轴分别旋转45度,0度,90度
const Euler = new THREE.Euler( Math.PI/4,0, Math.PI/2);

通过属性设置欧拉对象的三个分量值。

javascript 复制代码
const Euler = new THREE.Euler();
Euler.x = Math.PI/4;
Euler.y = Math.PI/2;
Euler.z = Math.PI/4;

2、改变角度属性.rotation

角度属性.rotation的值是欧拉对象Euler,意味着你想改变属性.rotation,可以查询文档关于Euler类的介绍。

javascript 复制代码
//绕y轴的角度设置为60度
mesh.rotation.y += Math.PI/4;
//绕y轴的角度增加60度
mesh.rotation.y += Math.PI/4;
//绕y轴的角度减去60度
mesh.rotation.y -= Math.PI/4;

3、旋转方法.rotateX()、.rotateY()、.rotateZ()

模型执行.rotateX()、.rotateY()等旋转方法,你会发现改变了模型的角度属性.rotation。

javascript 复制代码
mesh.rotateX(Math.PI/4);//绕x轴旋转π/4
javascript 复制代码
// 绕着Y轴旋转90度
mesh.rotateY(Math.PI / 2);
//控制台查看:旋转方法,改变了rotation属性
console.log(mesh.rotation);
javascript 复制代码
cube.rotateX(0.5)
cube.rotateY(0.5)
cube.rotateZ(0.5)

4、旋转动画

javascript 复制代码
function render() {
    cube.rotation.y += 0.01
    renderer.render(scene, camera)
    requestAnimationFrame(render)
}

render()
javascript 复制代码
function render() {
    cube.rotateY(0.01)
    renderer.render(scene, camera)
    requestAnimationFrame(render)
}

render()

5、绕某个轴旋转

网格模型绕(0,1,0)向量表示的轴旋转π/8。

javascript 复制代码
const axis = new THREE.Vector3(0,1,0);//向量axis
mesh.rotateOnAxis(axis,Math.PI/8);//绕axis轴旋转π/8
相关推荐
Martina_03213 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
Solange__4 天前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
暴走约伯6 天前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
暴走约伯7 天前
【VFX工具链源码拆解 03】告别机械劳动(下):材质字典映射批处理与智能纹理槽识别
unity·游戏引擎·材质
小雨爱测8 天前
3ds Max 入门到进阶:建模、材质、灯光与渲染全流程指南
3d·材质
FansAI_art10 天前
3D潮玩手办的材质还原与多角色同屏防崩坏
3d·材质
tianxuanjg11 天前
采购指南|航空复杂结构件高精度 CNC 加工采购选型指南
人工智能·经验分享·机器人·制造·材质
上海红同电子12 天前
红同电子线束工厂100问|绝缘护套采购,材质PVC、TPE、PP该如何选型?
数据库·经验分享·职场和发展·产品运营·制造·材质
Solange__13 天前
文旅景区怎么用AI生成3D导览?从航拍采集、地标重建到网页漫游的完整方案
人工智能·3d·语言模型·自然语言处理·材质·贴图·1024程序员节
Solange__15 天前
AI材质生成、图片贴图和材质扫描怎么选?按5类3D资产比较PBR、可编辑与授权
人工智能·3d·ai·自然语言处理·材质·贴图·游戏策划