title: Three.js 入门与扫盲-基础结构,坐标系与几何类型介绍 layout: post thread: 172 date: 2017-05-03 author: Joe Jiang categories: Document tags: [Visualization, JavaScript, threejs]
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 程序至少包括 渲染器、场景、照相机、以及场景中创建的物体。
new Renderer()
来新建一个WebGL渲染器, renderer.setSize(width,height)
来设置渲染器的宽高(或者给 canvas 元素设定宽高, 注意 CSS 指定是无效的且 canvas 元素有默认宽高值), 用 renderer.setClearColor(clearColor,clearAlpha)
设置 canvas 背景色与透明度, 用 renderer.render()
操作渲染绘制过程;@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).
[x, y, z, 1]
移动到另外一个点 [x', y', z', 1]
,三个坐标轴的移动分量分别为 dx=Tx, dy=Ty, dz=Tz
;TransformedVector = TranslationMatrix * RotationMatrix * ScaleMatrix * OriginalVector;
Geometry#Three.js 是所有几何形状的基类, 用户也可以操作继承该类用于自定义形状的定义和绘制, 常见的 Three.js 中几何形状包括立方体,柱体,球体等等.
THREE.BoxGeometry(width, height, depth, widthSegments, heightSegments, depthSegments)
THREE.PlaneGeometry(width, height, widthSegments, heightSegments)
radius
是半径; segmentsWidth
表示经度上的切片数; segmentsHeight
表示纬度上的切片数; phiStart
表示经度开始的弧度; phiLength
表示经度跨过的弧度; thetaStart
表示纬度开始的弧度; thetaLength
表示纬度跨过的弧度), 其中需要注意的是在使用时可以根据经纬度切片数来定制球形外形, 可以通过经纬度弧度来定制球形起始形状;THREE.SphereGeometry(radius, segmentsWidth, segmentsHeight, phiStart, phiLength, thetaStart, thetaLength)
THREE.CircleGeometry(radius, segments, thetaStart, thetaLength)
radiusTop
与 radiusBottom
分别是顶面和底面的半径,由此可知,当这两个参数设置为不同的值时,实际上创建的是一个圆台; height
是圆柱体的高度; radiusSegments
与 heightSegments
可类比球体中的分段; openEnded
是一个布尔值,表示是否没有顶面和底面,缺省值为false,表示有顶面和底面);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)
Geometry
关键字, 查看 Geometries 下栏目.