专栏目录请点击
点模型
PointsMaterial
线模型
网格模型
点模型、线模型、网格模型都是由几何体Geometry和材质Material构成,着三种模型的区别在于对几何体顶点数据的渲染方式不同
如果设置网格模型的wireframe
为true
,所有三角形会以线条的形式绘制出来
var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// 三角面(网格)渲染模式 MeshLambertMaterial MeshBasicMaterial
var material = new THREE.MeshBasicMaterial({color: 0x0000ff, //三角面颜色wireframe:true,//网格模型以线条的模式渲染
}); //材质对象
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
改变position属性
改变rotation和quaternion属性
THREE.Vector3(1.0,1.0,1.0)
,他是一个三维的向量Vector3set
方法,对其进行缩放mesh.scale.set(0.5, 1.5, 2) // 网格模型xyz方向分别缩放0.5,1.5,2倍
mesh.scale.x = 2.0; // x 轴放大2倍
position
也是一个三维向量对象Vector3,通过模型位置属性,可以设置模型在场景中的位置position
的默认值是THREE.Vector3(0,0,0)
mesh.position.y = 80; // 设置模型的y坐标
mesh.position.set(80,2,10); // 设置模型的x,y,z坐标
mesh.translateX(100);//沿着x轴正方向平移距离100
mesh.translateZ(-50); // 沿着Z轴负方向平移距离50
//向量Vector3对象表示方向
var axis = new THREE.Vector3(1, 1, 1);
axis.normalize(); //向量归一化
//沿着axis轴表示方向平移100
mesh.translateOnAxis(axis, 100);
执行translateX()
、translateY()
、translateOnAxis()
等方法本质上改变的都是模型的位置属性position
。
mesh.rotateX(Math.PI/4);//绕x轴旋转π/4
var axis = new THREE.Vector3(0,1,0);//向量axis
mesh.rotateOnAxis(axis,Math.PI/8);//绕axis轴旋转π/8
执行模型旋转的方法改变的是表示角度状态的属性rotation
或者四元属性quaternion
,他们都表示角度状态
rotation
的属性值是欧拉对象Euler
quaternion
的属性值是四元数对象Quaternion
// 绕着Y轴旋转90度
mesh.rotateY(Math.PI / 2);
//控制台查看:旋转方法,改变了rotation属性
console.log(mesh.rotation);
three.js大多数对象都有克隆clone
和复制copy
两个方法
A.copy(B)
表示B的属性复制给A
var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = new THREE.Vector3(0.0,0.0,0.0);
p2.copy(p1)
// p2向量的xyz变为p1的xyz值
A=B.clone()
表示返回一个与B相同的对象给A(不必再新建一个模型)
var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = p1.clone();
// p2对象和p1对象xyz属性相同
console.log(p2);
需要注意的是我们要注意基本类型的数据和引用类型的数据
如果克隆的是索引值的话,那么一个对象的属性发生改变,另一个克隆的对象也会发生改变