noob_Noob的Three.js指南

本文是一份Three.js的初学者指南,介绍了如何使用Three.js库创建3D图形,包括设置场景、相机、渲染器,加载3D模型以及实现渲染循环等关键步骤。通过实例演示,读者可以了解到如何在网页上呈现并互动3D模型。

noob

Web的复杂性每天都在变化,其可能性也在Swift增长。 特别是3D渲染。 WebGL(Web图形库)是用于渲染交互式3D和2D图形JavaScript API。 Ricardo Cabello的Three.js是一个基于WebGL构建的库,可确保创作的代码在各种浏览器之间兼容。

Three.js对WebGL来说就像jQuery对JavaScript一样,提供了许多人喜欢的声明性语法,并消除了浏览器中3D的烦恼。 让我们对其进行回顾,大致了解语法,并了解如果您是3D游戏的新手,那么该如何入门。

我们正在努力

看看下面在CodePen上的演示; 使用鼠标光标在周围拖动模型,使用鼠标滚轮放大和缩小。

1.设置场景

为了方便起见,我们将使用CodePen。 首先从“ JS”标签链接到Three.js( CDN 126Kb)。

我们从创建场景开始,就像您在Photoshop中从画布开始一样。 在编写任何其他代码之前,先使用变量定义场景。 因此,在您的JS窗格中添加:

var scene = new THREE.Scene();

相机!

随着帷幕的到来,为我们的表演做好准备,我们将需要一种方法来查看我们的出色之处-推出相机的时间。 Three.js捆绑了一系列相机,例如PerspectiveCameraStereoCameraOrthographicCameraCubeCamera 。 为了我们的目的,我们将使用PerspectiveCamera因为它旨在模仿人眼的观看方式。 就像我们用变量定义场景一样,我们也可以定义摄像机:

var camera = new THREE.PerspectiveCamera();

我们PerspectiveCamera接受四个参数: fovaspectnearfar

  • fov (视野)是您可以在相机中心周围看到的东西。 考虑一下相机上的广角镜头与标准镜头。
  • aspectfov的比率,换句话说就是屏幕的宽度与高度(例如4:5、16:9)。
  • 最后两个, nearfar是实体的平面。 它们共同控制对象是否根据其与相机的距离进行渲染。 near是对象或对象的一部分在仍被渲染的情况下与相机最接近的far ;“ dest”则是离相机可能仍在渲染的对象最远。 这些共同定义了相机的视锥

这是PerspectiveCamera参数的示例:

var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

除了了解可以传递的值之外,了解每个值并不重要。 继续,我们需要设置相机的位置。

camera.position.set(x, y, z);

这条线是对象的本地位置 。 这将设置向量的x , y和z坐标。 没有它,相机将什么也看不见。

2. WebGLRenderer

我们食谱中的下一个重要组成部分是创建WebGLRenderer 。 这是负责展示您的创作的魔力的作品。

var renderer = new THREE.WebGLRenderer();

WebGLRenderer也可以接受作为对象传入的属性和值。

var renderer = new THREE.WebGLRenderer({
  alpha: true // remove canvas' bg color
});

有很多property : value可以使用property : value对-如果您决定稍后再深入研究,这些property : value将在文档中列出(我强烈建议这样做)。

定义了渲染器后,我们可以设置方法以进一步自定义创建内容,例如setSize ; 在几乎所有Three.js项目中都会使用的方法。

// Make scene renderer the size of the screen
renderer.setSize(window.innerWidth, window.innerHeight);

您可以使用更多方法,但出于我们的目的,我们将坚持使用setSize()

3. DOM

现在,我们已经定义了所需的大小,我们需要一种将其附加到DOM的方法。

document.body.appendChild( renderer.domElement );

domElement属性是渲染器绘制其输出的位置,将采用canvas元素的形式。 尽管我正在使用document.body您可以在任意位置添加或添加canvas元素。 实际取决于您的具体项目需求,由您决定。

创建一个对象

下一步,我们需要创建一个对象,因为到目前为止,我们所做的只是声明一个场景,一个照相机和一个渲染器。 出于演示目的,让我们从3D模型库中获取一部手机,以便我们为在线购买iPhone的人们构建产品预览器。

通常,您可以使用SketchUp甚至Blender之类的应用程序来绘制3D对象,但是3D绘图应用程序的学习曲线很高-一条曲线当然不在本文的讨论范围之内。

如果您喜欢PiñaCollada

要将3D对象插入场景,我们必须使用ColladaLoader 。 应该提到的是,您决定使用的任何图形通常都应以1-2Mb以下为目标,并且必须是Collada文件才能与Three.js一起使用:这些文件以.dae扩展名结尾。 如果打开Collada文件,您会看到它实际上是用XML编写的。

我们首先使用变量定义ColladaLoader然后调用该方法以及定义另一个变量以表示3D图形,以供以后参考。

var dae, // graphic
    loader = new THREE.ColladaLoader(); // loader

这是一个很好的开始,但是我们还需要做更多工作才能显示手机。 让我们做一个可以做到这一点的函数:

function loadCollada( collada ) {
  dae = collada.scene;
  scene.add(dae);
}

下一步,我们将使用load方法,传递Collada文件的URL,然后按名称作为第二个参数调用函数:

loader.load( 'https://myurl.com/file/iphone6.dae', loadCollada);

如果您想进一步了解ColladaLoader ,可以在GitHub上挖掘源代码

4.渲染循环

终于有了我们的装载机和图像,这是最后一步。 我们需要创建一个所谓的“渲染循环”。 这是因为我们实际上还没有渲染任何东西。

此“渲染循环”将导致渲染器每秒绘制场景60次。 以下功能将使我们的创作变得生动起来(整个过程中最好的部分)。

function renderPhone() {
  requestAnimationFrame( renderPhone );
  renderer.render(scene, camera);
}

renderPhone();

requestAnimationFrame具有许多优点。 最重要的是,当用户导航到另一个浏览器选项卡时,它会暂停,最终不会浪费他们的处理能力和电池寿命。

最终产品

所有这些工作的结果是对3D iPhone的完美渲染,您可以旋转,旋转和放大和缩小:

最终的创建还有更多内容,因此,我鼓励您更深入地研究该示例JavaScript面板。

例如; 照明( AmbientLightHemisphereLightPointLight ), TrackballControlsAxisHelper和一个窗口调整大小事件。 其中一些提到的项目不包含TrackballControls文档,但是您可以在GitHub的核心JS文件中找到所有可用的属性。 您还可以使用其他非常酷的控件 ,这些控件也在GitHub上列出。

灵感

有时,您需要一些启发来使'ol大脑Swift激发想法。 以下是我最喜欢的使用Three.js进行演示的示例,这些示例将梦想变为现实。

进一步阅读

Rachel Smith 在CodePen上了一篇有关WebGL的出色文章 ,我强烈建议您在有空的时候阅读它。 本教程使用了简单的语言,它是对Three.js讨论场景,几何,照明,材质和动画的详尽解释,而我当然不会在这篇简短的文章中介绍。

您可能还会喜欢:

学分

没有Work Slack社区动画的慷慨帮助,这篇文章将是不可能的因此,我要(无特殊顺序)感谢Stephen ShawJeff AyerLouis HoebregtsNeil PullmanEli FitchChris Johnson

翻译自: https://webdesign.tutsplus.com/tutorials/a-noobs-guide-to-threejs--cms-28639

noob

目录(共14章) 前言 本书内容 阅读之前的准备 读者对象 致谢 第1章 用Three.js创建你的第一个三维场景 1.1 使用Three.js的前提条件 1.2 获取源代码 1.3 创建HTML页面框架 1.4 渲染并展示三维对象 1.5 添加材质、灯光和阴影 1.6 用动画扩展你的首个场景 1.7 使用dat.GUI库简化试验 1.8 使用ASCII效果 1.9 总结 第2章 使用构建Three.js场景的基本组件 2.1 创建场景 2.2 使用几何和网格对象 2.3 选择合适的相机 2.4 总结 第3章 使用Three.js里的各种光源 3.1 探索Three.js库提供的光源 3.2 学习基础光源 3.3 总结 第4章 使用Three.js的材质 4.1 理解共有属性 4.2 从简单的网格材质(基础、深度和面)开始 4.3 学习高级材质 4.4 线段几何体的材质 4.5 总结 第5章 学习使用几何体 5.1 Three.js提供的基础几何体 5.2 总结 第6章 使用高级几何体和二元操作 6.1 ConvexGeometry 6.2 LatheGeometry 6.3 通过拉伸创建几何体 6.4 创建三维文本 6.5 使用二元操作组合网格 6.6 总结 第7章 粒子和粒子系统 7.1 理解粒子 7.2 粒子、粒子系统和BasicParticleMaterial 7.3 使用HTML5画布格式化粒子 7.4 使用纹理格式化粒子 7.5 从高级几何体中创建粒子系统 7.6 总结 第8章 创建、加载高级网格和几何体 8.1 几何体组合和合并 8.2 从外部资源中加载几何体 8.3 以Three.jsJSON格式保存和加载 8.4 使用Blender 8.5 导入三维格式文件 8.6 总结 第9章 创建动画和移动相机 9.1 基础动画 9.2 使用相机 9.3 变形动画和骨骼动画 9.4 使用外部模型创建动画 9.5 总结 第10章 加载和使用纹理 10.1 在材质中使用纹理 10.2 纹理的高级用途 10.3 总结 第11章 定制着色器和渲染后期处理 11.1 设置后期处理 11.2 后期处理通道 11.3 创建自定义的后期处理着色器 11.4 总结 第12章 用Physijs在场景中添加物理效果 12.1 创建可用Physijs的基本Three.js场景 12.2 材质属性 12.3 基础图形 12.4 使用约束限制对象移动 12.5 总结
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值