马黑PHP整站系统

ThreeJS入门(二)绘制3d图形

位置: 首页 > 前端三套件[ 发布时间: 2025.5.22  作者: 马黑  阅读: 172 ]

搭好了 ThreeJS 场子,接着自然就是踢馆——哦不,是绘制图形了!本讲从画一个静态的立方体入手,看看如何实现。

在 ThreeJS 的世界中,图像 = 几何体 + 材质,图像就是最终绘制成品,叫 Mesh,几何体叫 Geometry,是图像的框架,材质叫 Material,是图像的血肉。绘制过程,以本讲示例为例,可以这么理解:在场景 Scene 中,用特定的材质,比如不需要光照也能看得见的 ThreeJS 特制材料 MeshNormalMaterial,安装到指定的几何体框架,比如一个立方体 BoxGeometr。来看代码:

// ... 搭建场子代码略

var geometry = new THREE.BoxGeometry(); // 创建立方体几何体
var material = new THREE.MeshNormalMaterial(); // 创建自带颜色、有光泽的材质
var mesh = new THREE.Mesh(geometry, material); // 将几何体和材质组合起来
scene.add(mesh); // 将成品加入到场景中

renderer.render(scene, camera); // 渲染器渲染结果
	

这里,第一步,将 ThreeJS 封装的对象 THREE.BoxGeometry 即立方几何体实例化,这就是创建一个立方体的框架,并把该实例化的几何体命名为小写的 geometry;第二步,也是通过实例化 ThreeJS 封装对象的方式创建了自带光泽、颜色的材质 —— 法向量材质,将实例化的材质对象命名为小写的 material;第三步,通过 THREE.Mesh 对象的实例化创建了最终成品,即立方体图像,命名为小写的 mesh。这几步:

一、立方体几何体的创建可以带一些参数,常用到的参数时 x、y、z,即立方体在xyz三个方向上的尺寸,缺省时默认是 (1, 1, 1),可以修改试试。

二、材质在创建时可以使用 JS 的 { options } 方式配置参数,例如线框化、双面渲染,{ wireframe: true, side: THREE.DoubleSide }。一般来说,不同的材质配置方式不尽相同,但所有的材质都有共性,具体的内容可以自行网查。

三、组装成最终成品,即实例化 THREE.Mesh 则不能缺省参数,必须指定为前面创建的几何体和材质的变量名称。

第四步,注意绘制好的的成品 mesh 要加入到场景;最后一步,咔嚓,按下快门,即渲染器将场景和相机合作的结果渲染出来。

不过以上代码的运行结果可能会令人失望:只看到一个矩形。没关系,它的的确确是一个立方体,只是由于角度的问题让我们看不全它的真实面貌。我们可以使用图像的旋转方法 rotateX/Y/Z 将立方体 mess 在 xyz 方向都做一些调整,效果将十分完美。以下是完整代码:

<script type="module">
	import * as THREE from 'https://esm.sh/three';

	var scene = new THREE.Scene;
	var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);
	camera.position.set(0, 0, 5);
	camera.lookAt(0, 0, 0);
	var renderer = new THREE.WebGLRenderer({ antialias: true });
	renderer.setSize(window.innerWidth, window.innerHeight);
	document.body.appendChild(renderer.domElement);

	var geometry = new THREE.BoxGeometry();
	var material = new THREE.MeshNormalMaterial();
	var mesh = new THREE.Mesh(geometry, material);
	mesh.rotateX(0.5);
	mesh.rotateY(0.5);
	mesh.rotateZ(-0.5);
	scene.add(mesh);

	renderer.render(scene, camera);
</script>
	

前一篇: ThreeJS入门(一)初始化THREE工作环境
下一篇: ThreeJS入门(三)场景配色和自适应窗口

发表评论:

       

评论列表 [0条]

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com