threejs学习day5:网格

Posted 简数

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了threejs学习day5:网格相关的知识,希望对你有一定的参考价值。

在学习了几何形状和材质之后,我们就能使用他们来创建物体了。最常用的一种物体就是网格(Mesh),网格是由顶点、边、面等组成的物体;其他物体包括线段(Line)、骨骼(Bone)、粒子系统(ParticleSystem)等。创建物体需要指定几何形状和材质,其中,几何形状决定了物体的顶点位置等信息,材质决定了物体的颜色、纹理等信息。

本章将介绍创建较为常用的物体:网格,然后介绍如何修改物体的属性。

创建网格

在上两节中,我们学习了如何创建几何形状与材质,而网格的创建非常简单,只要把几何形状与材质传入其构造函数。最常用的物体是网格(Mesh),它代表包含点、线、面的几何体,其构造函数是:

Mesh(geometry, material)

下面,让我们通过一个具体的例子了解如何创建网格:

var material = new THREE.MeshLambertMaterial({
    color: 0xffff00
});
var geometry = new THREE.CubeGeometry(1, 2, 3);
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

如果materialgeometry之后不会复用的话,也可以合在一起写为:

var mesh = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), 
    new THREE.MeshLambertMaterial({
        color: 0xffff00
    })
);
scene.add(mesh);

添加光照后,得到的效果为:

如果不指定material,则每次会随机分配一种wireframetrue的材质,每次刷新页面后的颜色是不同的,一种可能的效果是:

threejs学习day5:网格

修改属性

材质


除了在构造函数中指定材质,在网格被创建后,也能对材质进行修改:

var material = new THREE.MeshLambertMaterial({
    color: 0xffff00
});
var geometry = new THREE.CubeGeometry(1, 2, 3);
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

mesh.material = new THREE.MeshLambertMaterial({
    color: 0xff0000
});

最终显示的颜色是红色:

位置、缩放、旋转


位置、缩放、旋转是物体三个常用属性。由于THREE.Mesh基础自THREE.Object3D,因此包含scalerotationposition三个属性。它们都是THREE.Vector3实例,因此修改其值的方法是相同的,这里以位置为例。

THREE.Vector3xyz三个属性,如果只设置其中一个属性,则可以用以下方法:

mesh.position.z = 1;

如果需要同时设置多个属性,可以使用以下两种方法:

mesh.position.set(1.5, -0.5, 0);

mesh.position = new THREE.Vector3(1.5, -0.5, 0);

缩放对应的属性是scale,旋转对应的属性是rotation,具体方法与上例相同,分别表示沿x、y、z三轴缩放或旋转。


以上是关于threejs学习day5:网格的主要内容,如果未能解决你的问题,请参考以下文章

threejs 绘制辅助网格

ThreeJS:当在另一个网格中时,网格变得不可见

如何在 ThreeJS 中将网格旋转 90 度?

Threejs - 几行代码带你创建三维地球

Vue2+ThreeJS踩坑记录fbx蒙皮网格模型挂载ShaderMaterial材质之后,挂载动画无效的解决办法

Vue2+ThreeJS踩坑记录fbx蒙皮网格模型挂载ShaderMaterial材质之后,挂载动画无效的解决办法