ThreeJs常用的工具,便于调试和项目效果

1、相机控件OrbitControls.js

通过Three.js的相机控件OrbitControls.js可以对Threejs的三维场景进行缩放、平移、旋转操作,本质上改变的并不是场景,而是相机的参数,通过前面的学习应该知道,相机的位置角度不同,同-个场景的渲染效果是不一样,比如一个相机绕着一个场景旋转, 就像场景旋转-样。
如果你想深入了解相机控制器OrbitControls的每一个功能, OrbitControls是如何对Three.js正投影 相机和透视投影相机对象进行封装的,可以阅读Three.js\examples\js\controls目录下OrbitControls.js文件。
调用OrbitControls的时候需要引入OrbitControls.js文件。

<!-- 引入Three.js相机控件OrbitControls.js -->
旋转缩放平移

如果你想实现一个场景旋转缩放平移的效果,直接把相机对象camera作为OrbitControls构造函数的参数就可以。

鼠标操作:通过拖动鼠标左键可以720旋转展示三维场景,通过拖动鼠标右键可以平移三维场景,通过上下滚动鼠标中键可以缩放三维场景。
// 创建控件对象相机对象camera作为参数/1 控件可以监听鼠标的变化,改变相机对象的属性
var controls =newTHREE.OrbitControls(camera);
禁止旋转平移缩放(.enablePan属性)

比如一个展示-个三维场景, 比如一辆轿车产品, 你不希望鼠标右键拖动会产生一个平移效果。 可以通过设置相机空间对象OrbitControls的.enablePan属性

controls.enablePan =false;  // 禁止右键拖拽
通过.enableZoom属性可以控制是否允许鼠标中键缩放场景,.enableZoom属性默认值true。
controls.enableZoom =false; // 禁止缩放
通过.enableRotate属性可以控制是否允许鼠标左键旋转场景,.enableRotate属性默认值true。
controls.enableRotate =false; // 禁止旋转

设置缩放范围

在实际应用中,你想控制一个产品或一个房间户型的缩放范围, 可以通过相机空间OrbitControls.minZoom.maxZoom属性实现
// 缩放范围
controls.minZoom = 0.5;
controls.maxZoom = 2;

设置旋转范围

展示一个三维场景,你想控制360度旋转范围,比如一辆轿车,你不希望用户看到轿车的底盘,你可以通过设置相机的旋转范围属性来实现。

通过.minPolarAngle.maxPolarAngle属性控制上下360度的旋转范围,通过.minAzimuthAngle.maxAzimuthAngle属性控制左右360度的旋转范围,上下左右两个360度旋转也就是常说的720旋转展示。
// 上下旋转范围 controls.minPolarAngle =0;
controls.maxPolarAngle =Math.PI;
// 左右旋转范围controls.minAzimuthAngle = -Math.PI * (100/180);
controls.maxAzimuthAngle =Math.PI * (100/180);

●属性
autoRotate: Boolean默认false。 设定为true时, 相机自动围绕目标旋转但必须在animation中循环调用update();
autoRotateSpeed: Float当前者为true时默认2.0, 代表每轮60fps用时30s,值越小转动越慢
rotateSpeed: Float旋转速度(ORBIT的旋转速度,鼠标左键),默认1
enableDamping: Boolean默认false。设置为true则启用阻尼(惯性),用来给控制相机一个重量,必须调用update()在你的animation循环中
dampingFactor: Float前者为true时使用阻尼惯性(可理解为阻止向一个方向移动)
enabled: Boolean是否启用控件,默认true
enableKeys: Boolean能否用键盘控制,默认true←-↑-→↓四个键控制物体的移动
keys: Object控制相机平移的四个键。默认四个箭头键{LEFT: 37,UP: 38,RIGHT: 39,DOWM:40}所有的键值
enablePan: Boolean相机平移,默认true
panSpeed: Float移动的速度,默认1
keyPanSpeed: Float相机平移的速度,默认每按一次控制方向键移动7 .0像素
enableRotate: Boolean水平垂直旋转相机,默认true。只想控制单轴,通过PolarAngle/AzimuthAngle的最小值和最 大值设置为相同的值,这将导致垂直或
水平旋转固定在该值
enableZoom: Boolean相机的缩放
maxAzimuthAngle: Float水平旋转,范围-Math.PI~Math.PI 或者Infinity默认Infinity.
minAzimuthAngle: Float水平旋转, 范围-Math.PI-Math.PI或者.Infinity默认-Infinity.
maxPolarAngle: Float 垂直旋转,范围0~Math.PI 默认Math.Pl
minPolarAngle: Float垂直旋转,范围0~Math.PI 默认0
maxDistance: Float拉远镜头(只能用在PerspectiveCamera),默认Infinity.

minDistance: Float拉近镜头,默认0
maxZoom: Float拉远镜头(只能用在Othorg[ aphicCamera),默认Infinity.
minZoom: Float拉近镜头,默认Q
object: Camera正在控制的相机
zoomSpeed: Float zoom(变焦)的速度,默认1

方法

dispose(): null移除所有的事件监听
getAzimuthalAngle(): radians获得用弧度表示的当前水平旋转角度
getPolarAngle(): radians获得用弧度表示的当前垂直旋转角度
reset(): null通过最近-次调用saveState()或者 初始状态来重置为当前的状态
saveState(): null保存当前控制的状态,可以稍后通过reset()来恢复
update(): false更新控件,在手动改变了摄像机的钻换后必须调用。在设置了autoRotateenableDamping时也要在循环中调用

2、性能控件

stats性能插件添加了以后,会默人在左上角显示性能帧数,毎次刷新所用时间,占用内存。鼠棕左鍵点去可迸行切换,默人显示毎秒的帧数。
首先需要将stats插件引入,地址是官网下載文件里面的examples/js/libs/stats.min.js.
然后需要突例化一个組件,然后添加到dom当中.

var stats ;
function initStats() {
    stats = new Stats();
    document.body.appendChi1d(stats.dom);
}

需要在requestAnimationFrame()函数调用里面更新stats。

function animate() {
    // 更新控制器
    controls.update() ;
    render() ;
    // 更新性能控件
    stats.update() ;
    requestAnimationFrame(animate) ;
}

就这样,页面当中就会显示出来正常插件效果了。
设置默认显示的监听。
Stats.prototype.setMode()方法可以设置插件的默认监听

stats.setMode(0); // 默认的监听fps 帧数
stats.setMode(1); // 默认监听画面渲染时间
stats.setMode(2); // 默认监听内存

3、坐标系控件AxesHelper
Threejs里通过AxesHelper类,可以创建一个可视化的三维坐标系

AxesHelper ( size : Number )

参数说明

size - - 轴的线的大小,默认为1

eg:

var axes = new THREE.AxisHelper(30) ;
scene.add(axes) ;

说明:
threejs中采用的是右手坐标系
红线是X轴,绿线是Y轴,蓝线是Z轴

ThreeJS 相机控件OrbitControls.js和性能控件/stats.min.js 使用案例。

看一下index.html里面的按钮事件

看一下js/objects/Store3D.js的initMain方法里面的initStats/** 初始化性能监控控件 */、initOrbitControl/** 初始化相机控件 */、initAxisHelper/** 初始化坐标系辅助控件 */方法

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对整threeJS体系进行全面剖析。整理出全面的教学大纲,涵盖内容面非常广。此教学版本为threeJS107版本。关于版本不建议大家使用低于90的版本学习。以下是课程目录1-ThreeJS概览(基本图形简介,什么是点线面如何绘制点线面,什么是材质,什么是几何体,什么是相机,什么是渲染器,什么是场景)2-相机和渲染器(详解相机类型,渲染器如何使用,针对不同场景怎么用,怎么调效果,怎么渲染,怎么输出画布,如何解决透明问题等等)3-创建平面几何(常见的几何体如何使用,如何使用简单的几何体绘制出自定义自己想要的几何体,关于几何体的性能剖析,如何解决性能,几何体的渲染原理)4-高级图形算法常见库(求直线的斜率  计算线段与圆的交点 计算线段的长度 判断折线是否在多边形内 等等)5-sprite精灵(怎么让一个图标永远朝向屏幕,精灵的属性,精灵材质原理等,广告提示框必用)6-骨骼游戏动画(什么是模型动画,常见游戏案例,如何让人头进行各种攻击动作)7-3d模型加载(常见模型格式,如何渲染不同格式,不同格式的特点,什么格式性能优越,模型渲染异常,贴图不显示等问题详解)8-高阶动态纹理(你所不知道的纹理用法,我说你不知道,你肯定不知道)9-漫游轨迹以及其动画路径(怎么绘制贝塞尔曲线,如何使用曲线上的路径,跟随路径移动的原理,相机如何运动,物体如何运动)10-着色器(什么是着色器。初识着色器基础,着色器材质怎么用,怎么使用着色器库)11-常见渲染以及透明度问题12-对象拾取以及拖拽(3d世界里面如何拖拽物体,拖拽的原理,mousemove mouseon等的事件效果)13-世界坐标以及组的问题(什么是相对坐标,什么是世界坐标,什么是当前坐标,怎么转化父子坐标系,组的优化,为什么用组,组的优势)14-指定对象旋转中心(什么是物体的几何体中心,如何改变中心,如何绕轴转动)15-层级对象渲染(多个场景一键切换,切换的优势,针对大项目的用法)16-拓展了解系列(不定期不断更新案例,各种酷炫效果bloom,halo等,以及各种3d图表,粒子案例等,不断构建你的3d实践能力)
### 回答1: three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能,使开发人员能够轻松地在网页上创建交互式和逼真的3D场景。 虽然three.js本身没有内置的测量工具,但我们可以使用其提供的3D绘制和交互功能来实现测量工具。 首先,我们可以使用three.js的几何体创建功能创建需要测量的对象,例如线段、立方体或球体。然后,我们可以使用three.js的光线追踪功能将这些对象渲染在网页上。 接下来,我们可以利用three.js的鼠标和触摸事件来实现交互式测量。当用户点击场景中的对象时,我们可以获取其位置信息,并根据需要进行计算和显示。 例如,当用户点击场景中的两个点时,我们可以测量两点之间的距离。我们可以通过计算两个点的欧几里得距离来获得准确的测量结果,并将其显示在屏幕上。 此外,我们还可以扩展测量功能,使其支持角度测量、体积测量等更复杂的操作。通过组合使用three.js的几何体、光线追踪和事件处理功能,我们可以实现各种测量需求。 虽然three.js本身没有具体的测量工具,但它提供了强大的3D图形功能和交互性,使我们能够自定义实现各种测量工具。无论是网页开发人员还是3D设计师,都可以利用three.js打造出专业、准确的测量工具。 ### 回答2: Three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能和工具,其中包括测量工具Three.js的测量工具允许我们在3D场景中测量对象的大小、距离和角度。它可以帮助我们更好地理解和处理3D模型的尺寸和位置。 使用Three.js的测量工具,我们可以选择一个对象,然后通过拖拽和放置测量工具来测量该对象的尺寸。我们可以测量对象的长度、宽度、高度,甚至可以测量两个对象之间的距离。 测量工具还允许我们测量对象的角度。我们可以选择两个点或边,并测量它们之间的夹角。这可以帮助我们精确地设置对象的旋转或确定对象之间的关系。 Three.js的测量工具可以用于各种应用场景。比如,在建筑和室内设计中,我们可以使用测量工具来测量房间的尺寸,确保家具和装饰品的合适摆放。在游戏开发中,我们可以使用测量工具来测量游戏角色的尺寸和距离,以确保游戏场景的真实感。 总之,Three.js的测量工具为我们提供了一个方便而准确的方式来测量3D对象的尺寸、距离和角度。它是一个强大的工具,可以帮助我们更好地理解和处理3D图形。 ### 回答3: three.js是一个用于在网页上创建和显示3D图形的JavaScript库。虽然它本身并没有内置的测量工具,但可以通过一些技巧和添加额外的功能来实现测量。 首先,要实现测量工具,我们需要了解three.js中的3D场景坐标和屏幕坐标之间的转换关系。通过使用three.js中的摄像机、光源和几何体等组件,我们可以创建一个基本的3D场景。 然后,我们可以利用鼠标事件来捕获用户在屏幕上点击和拖动的动作。通过将屏幕坐标转换为3D场景坐标,我们就可以得到用户在场景中选取的点的位置。然后,可以绘制线段或其他几何体来表示测量的距离或角度。 此外,我们还可以通过在场景中添加虚拟的测量参考物体,如标尺、测量尺等来辅助测量。这些参考物体可以通过three.js的模型加载器加载现有的3D模型文件,或者通过three.js的几何体构造函数直接创建。 最后,我们可以将测量结果在屏幕上以文本或图形的形式显示。通过three.js提供的文本渲染器或画布绘图API,我们可以在渲染循环中更新测量结果的显示。 总而言之,虽然three.js本身没有内置的测量工具,但通过结合其提供的3D场景渲染和交互功能,以及基本的数学计算和绘图知识,我们可以实现基本的测量工具来测量距离、角度等。当然,具体的实现方式还取决于具体的需求和技术能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值