基础构成 🌎
命名空间
CTS
CTS 为框架默认命名空间,使用该框架开发时都需要统以 CTS. 开始,CTS已经将threejs原生的属性函数引入,所以也可以直接像使用Three.一样直接使用。
开发时尽量不要使用 CTS 为变量名或者命名空间,避免框架无法正常使用。
Three.JS
Three.JS是基于WebGL的Javascript开源框架,简言之,就是能够实现3D效果的JS库。
WebGL
WebGL是一种Javascript的3D图形接口,把JavaScript和OpenGL ES 2.0结合在一起。
主要组件
在Three.js中,有了场景(scene)、相机(camera)和渲染器(renderer) 这3个组建才能将物体渲染到网页中去。
1)场景
场景是一个容器,可以看做摄影的房间,在房间中可以布置背景、摆放拍摄的物品、添加灯光设备等。
2)相机
相机是用来拍摄的工具,通过控制相机的位置和方向可以获取不同角度的图像。
3)渲染器
渲染器利用场景和相机进行渲染,渲染过程好比摄影师拍摄图像,如果只渲染一次就是静态的图像,如果连续渲染就能得到动态的画面。在JS中可以使用requestAnimationFrame实现高效的连续渲染。
安装方式
npm i cts-sdk
引入
import CTS from 'cts-sdk'
全局属性
version
框架版本号
ready
框架主入口,使用框架时必须以这个开始,否则无法构建 3D 场景
global.CTS = CTS //将 DC 变量设置为全局,方便在工程中使用
CTS.ready(() => {
let viewer = new CTS.Viewer('scene-container') //初始化场景
})
CTS.Viewer
3D 场景主要接口,在给定的 DivId 中构建三维场景,如果是VUE,可直接传入
this.$refs.scene
example
<div id="viewer-container"></div>
let viewer = CTS.Viewer('viewer-container')
global.viewer = viewer // 添加到全局变量
[warning]
如果开发使用的是 Vue 这样的 MVVM 框架,不要将 viewer、scene、camera 添加到数据模型中。由于 3D 场景中会不停的刷新每一帧,如果将数据添加到数据模型中,长时间的话会导致浏览器的压力增大而奔溃。
creation
-
constructor(id,[options])
构造函数
- 参数
{String} id:容器 ID
- 返回值
viewer
- 参数
properties
{Element} dcContainer:框架自定义容器readonly{Object} renderer:渲染器readonly,详情参考:Renderer{Object} scene:场景readonly,详情参考:Scene{Object} camera:相机readonly,详情参考:Camera{Object} controls:控制器readonly,详情参考:Controls{Object} clock:时钟,详情参考:Clock{Object} animateEventList:动画函数数组readonly{Object} stats:帧率监视器readonly{Element} canvas:canvas 节点readonly
methods
-
addStats()
添加帧率监视器
-
removeStats()
移除帧率监视器
-
addAnimate(animate)
添加全局的动画事件
- 参数
{Funtion} fun:函数{Object} content:函数参数
- 返回值
animate
这里以状态监视器为例,创建函数,并且添加到全局的动画函数数组里面去
/** * 状态更新 * @param statsControls */ _statsUpdate (statsControls) { statsControls.update() }/** * 添加状态监测 */ addStats () { if (!this.statsControls) this.statsControls = new Stats() this.statsControls.dom.style.position = 'absolute' this.viewerDom.appendChild(this.statsControls.dom) // 添加到动画 this.statsUpdateObject = { fun: this._statsUpdate, // 函数名称,函数在上面 content: this.statsControls // 绑定传入的参数 } this.addAnimate(this.statsUpdateObject) } - 参数
-
removeAnimate(animate)
添加全局的动画事件
- 参数
{Funtion} fun:函数{Object} content:函数参数
- 返回值(添加的时候返回的值)
animate
- 参数
-
startSelectEvent(mouseType, isSelect, callback)
开始鼠标选中事件
- 参数
{Funtion} mouseType:函数 JavaScript鼠标事件{bool} isSelect:函数参数{funtion} callback:回调函数
- 参数
-
stopSelectEvent()
关闭鼠标事件
-
startFirstPersonMove(model, position, speed, moveIndex)
改变场景模式
- 参数
{CtsModel} sceneMode:模型对象CtsModel{Array} position:坐标对象[0,0,0]{Number} speed:移动速度{Number} moveIndex:模型动画
- 参数