Three.js入门: 构建一个立方体

简介: Three.js 是一个 JavaScript 库,用于在 Web 浏览器中创建 3D Web 图形。前面介绍过一些基本的知识和实现简单的效果《Three.js 入门指南》和《【Three.js】随着元宇宙开启WEB3D之路》,本文从简单的构建立方体出发,介绍一些基础概念。

Three.js 是一个 JavaScript 库,用于在 Web 浏览器中创建 3D Web 图形。前面介绍过一些基本的知识和实现简单的效果《Three.js 入门指南》和《【Three.js】随着元宇宙开启WEB3D之路》,本文从简单的构建立方体出发,介绍一些基础概念。

预览效果:codepen.io/quintiontan…

完整的代码如下:

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
const renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
const geometry = new THREE.BoxGeometry(2, 2, 2 );
const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );
camera.position.z = 5;
cube.rotation.x += 0.5;
cube.rotation.y += 0.5;
renderer.render( scene, camera );

这是每个  Three.js  应用程序一种常见模式,包括 WebGLRendererSceneCamera ,如下:

场景

首先使用 Scene  创建一个场景(场景是一个容器,用于保存、跟踪所要渲染的物体和使用的光源)。

const scene = new THREE.Scene();

相机

创建相机 Camera,这里选用 PerspectiveCamera  创建透视投影相机。这一投影模式被用来模拟人眼所看到的景象,它是3D场景的渲染中使用得最普遍的投影模式。

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

PerspectiveCamera 有四个参数:

  • fov — 摄像机视锥体垂直视野角度,这里参数值为 75
  • aspect — 摄像机视锥体长宽比,这里根据页面的可视长宽进行计算 window.innerWidth/window.innerHeight
  • near — 摄像机视锥体近端面,值为 0.1
  • far — 摄像机视锥体远端面,值为 1000

WebGLRenderer

WebGL渲染器,这个渲染器比 Canvas 渲染器(CanvasRenderer)有更好的性能,语法如下:

const renderer = new THREE.WebGLRenderer(parameters);

parameters 是一个可选对象,用来定义渲染器行为的属性,没有设置该参数时,将使用默认值。

{
    canvas: "一个用来绘制输出的 Canvas 对象",
    context: "所用的 渲染上下文(RenderingContext) 对象",
    precision: "着色器的精度,包括:highp、mediump、lowp,默认为:highp,如果设备支持的话",
    alpha : "是否可以设置背景色透明 , 默认为 false",
    premultipliedAlpha: " Boolean, 默认为 true",
    antialias: "是否开启反锯齿, 默认为 false"
    stencil: "Boolean, 默认为 true",
    preserveDrawingBuffer: "是否保存绘图缓冲, 默认为 false",
    depth: "Boolean, 默认为 true",
    logarithmicDepthBuffer: "Boolean, 默认为 false"
}

BoxGeometry

BoxGeometry 是用来构建四边形的几何立方体或者不规则四边形,语法如下:

const geometry = new THREE.BoxGeometry(width : Float, height : Float, depth : Float, widthSegments : Integer, heightSegments : Integer, depthSegments : Integer );
  • width — X轴上面的宽度,默认值为1。
  • height — Y轴上面的高度,默认值为1。
  • depth — Z轴上面的深度,默认值为1。
  • widthSegments — (可选)宽度的分段数,默认值是1。
  • heightSegments — (可选)高度的分段数,默认值是1。
  • depthSegments — (可选)深度的分段数,默认值是1。

本文设置构建了一个长宽高度为 2 的立方体:

const geometry = new THREE.BoxGeometry(2, 2, 2 );

MeshBasicMaterial

一个以简单着色(平面或线框)方式来绘制几何体的材质,语法如下:

MeshBasicMaterial( parameters : Object )
  • parameters - (可选)用于定义材质外观的对象,具有一个或多个属性。材质的任何属性都可以从此处传入(包括从Material继承的任何属性)。

本文定义了一个红色的立方体:

const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );

Mesh

网格表示基于以三角形为 polygon mesh(多边形网格)的物体的类,语法如下:

Mesh( geometry : BufferGeometry, material : Material )

Mesh=Geometry+Material

  • geometry :(可选)BufferGeometry 的实例,默认值是一个新的 BufferGeometry
  • material :(可选)一个 Material,或是一个包含有 Material 的数组,默认是一个新的 MeshBasicMaterial
const cube = new THREE.Mesh( geometry, material );

接下来就将定义好的 cube 添加到场景:

scene.add( cube );

render

渲染器最重要的方法,使用相机渲染一个场景。

renderer.render( scene, camera );

语法格式为:

render(scene, camera, renderTarget, forceClear);

  • scene 是要绘制的场景
  • camera 指定相机,相机照射的区域会转换成 2D 绘制到屏幕
  • renderTarget 如果不让渲染的内容直接绘制到屏幕,则存放到renderTarget ,否则渲染到通常的canvas上
  • forceClear 为 true 时则颜色、深度和模板绘制缓冲将在渲染前被清除,即使渲染器的 autoClear 属性为 false

到此,一个简单的立方体就构建完成了。


相关文章
|
29天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
25天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
18天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
34 12
|
24天前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
26天前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
1月前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
1月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
111 1
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效