仓库源文站点原文


title: Three.js 入门与扫盲-基础结构,坐标系与几何类型介绍 layout: post thread: 172 date: 2017-05-03 author: Joe Jiang categories: Document tags: [Visualization, JavaScript, threejs]

excerpt: WebGL 是基于 OpenGL ES 2.0 的 Web 标准,可以通过 HTML5 Canvas 元素作为 DOM 接口访问。Three.js 封装了底层的的图形操作接口,使用户可以便捷的操作构建空间物体与场景,实现 3D 可视化. 一个完整的 Three.js 必定包含一些必要的结构,例如场景,相机等等,而在深入了解 Three.js 及相关操作之前,有几个概念有必要完整的学习一遍. 本文基于此目的, 详细的描述了一个完整的 Three.js 程序的基本结构, 空间坐标系以及汇总了常用的 Three.js 中的几何类型.

WebGL 是基于 OpenGL ES 2.0 的 Web 标准,可以通过 HTML5 Canvas 元素作为 DOM 接口访问。Three.js 封装了底层的的图形操作接口,使用户可以便捷的操作构建空间物体与场景,实现 3D 可视化. 一个完整的 Three.js 必定包含一些必要的结构,例如场景,相机等等,而在深入了解 Three.js 及相关操作之前,有几个概念有必要完整的学习一遍. 本文基于此目的, 详细的描述了一个完整的 Three.js 程序的基本结构, 空间坐标系以及汇总了常用的 Three.js 中的几何类型.

注: 本笔记记载内容基于 Three.js r85 实现.

Three.js 基础结构与分析

一个典型的 Three.js 程序至少包括 渲染器、场景、照相机、以及场景中创建的物体。

@PerspectiveCamera https://threejs.org/docs/index.html#api/cameras/PerspectiveCamera
@OrthographicCamera https://threejs.org/docs/index.html#api/cameras/OrthographicCamera
THREE.OrthographicCamera(left, right, top, bottom, near, far)
THREE.PerspectiveCamera(fov, aspect, near, far)

坐标系

Three.js 采用右手坐标系, 如下图所示:

矩阵变换

在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation).

TransformedVector = TranslationMatrix * RotationMatrix * ScaleMatrix * OriginalVector;

Geometry 几何形状类型汇总

Geometry#Three.js 是所有几何形状的基类, 用户也可以操作继承该类用于自定义形状的定义和绘制, 常见的 Three.js 中几何形状包括立方体,柱体,球体等等.

THREE.BoxGeometry(width, height, depth, widthSegments, heightSegments, depthSegments)
THREE.PlaneGeometry(width, height, widthSegments, heightSegments)
THREE.SphereGeometry(radius, segmentsWidth, segmentsHeight, phiStart, phiLength, thetaStart, thetaLength)
THREE.CircleGeometry(radius, segments, thetaStart, thetaLength)

THREE.CylinderGeometry(radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded)
THREE.TetrahedronGeometry(radius, detail)
THREE.OctahedronGeometry(radius, detail)
THREE.IcosahedronGeometry(radius, detail)
THREE.TorusGeometry(radius, tube, radialSegments, tubularSegments, arc)
THREE.TorusKnotGeometry(radius, tube, radialSegments, tubularSegments, p, q, heightScale)

THREE.ExtrudeGeometry(shapes, options)
THREE.ConeGeometry(radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength)

其他: 光与影

参考