首页 > 其他分享 >103. OrbitControls旋转缩放限制

103. OrbitControls旋转缩放限制

时间:2024-10-28 09:18:12浏览次数:9  
标签:OrbitControls 缩放 controls 相机 观察点 103 属性

课程中经常会用到相机控件OrbitControls的不同功能,本节课就会大家补充新的知识点,比如控制缩放的最大最小范围,比如限制旋转的角度范围,比如禁止平移。

禁止右键平移.enablePan属性

比如一个展示一个三维场景,你不希望鼠标右键拖动会产生一个平移效果。可以通过设置相机空间对象OrbitControls的.enablePan属性,查看OrbitControls源码可以看到.enablePan属性的默认值是true。

controls.enablePan = false; //禁止右键拖拽

禁止缩放或旋转

通过.enableZoom属性可以控制是否允许鼠标中键缩放场景,.enableZoom属性默认值true。

controls.enableZoom = false;//禁止缩放

通过.enableRotate属性可以控制是否允许鼠标左键旋转场景,.enableRotate属性默认值true。

controls.enableRotate = false; //禁止旋转

OrbitControls.target属性

相机控件OrbitControls.target属性对应的就是相机的.lookAt()观察目标。

执行controls.update();,相机控件内部会执行camera.lookAt(controls.target)

// controls.target默认值是坐标原点
controls.target.set(x, y, z);
//update()函数内会执行camera.lookAt(x, y, z)
controls.update(); 

透视投影相机缩放范围

在实际应用中,透视投影相机的规则是远小近大,相机距离目标观察点距离越远,目标模型显示越小,距离越近显示越大

前面给大家讲解过,对于透视投影相机而言,OrbitControls缩放,本质上就是改变相机的位置属性.position

这就是说如果你想控制缩放范围,就是约束相机位置.position的变化范围,OrbitControls提供了两个属性.minDistance.maxDistance可以帮助你实现。

.minDistance表示相机位置.position和相机目标观察点controls.target的最小距离。

//相机位置与观察目标点最小值
controls.minDistance = 200;

.maxDistance表示相机位置.position和相机目标观察点controls.target的最大距离。

//相机位置与观察目标点最大值
controls.maxDistance = 500;

正投影缩放范围

对于正投影相机对象OrthographicCamera,可以通过相机控件OrbitControls的.minZoom.maxZoom属性实现

// 缩放范围
controls.minZoom = 0.5;
controls.maxZoom = 2;

相机位置与目标观察点距离.getDistance()

controls.getDistance()可以计算出来相机位置.position和相机目标观察点controls.target的距离。

//相机位置与目标观察点距离
const dis = controls.getDistance();
console.log('dis',dis);

可视化设置相机缩放范围

如果你直接凭感觉设置minDistancemaxDistance,不太好把握具体范围,这时候通过.getDistance()辅助解决。

在canvas画布上,你用鼠标缩放三维场景,这时候会改变透视投影相机位置,那么相机与目标观察点的距离也会改变,这时候可以通过.getDistance()计算出来此刻相机与目标观察点的距离,用于设置minDistancemaxDistance

controls.addEventListener('change',function(){
    //相机位置与目标观察点距离
    const dis = controls.getDistance();
    console.log('dis',dis);
})

设置旋转范围

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

通过.minPolarAngle.maxPolarAngle属性控制上下的旋转范围,默认从0到180度,默认情况下0度,XOZ平面平行canvas画布,y轴垂直指向屏幕外,90度时候,渲染结果y轴竖直向上,180度,XOZ平面平行canvas画布,y轴垂直指向屏幕内。

// 上下旋转范围
controls.minPolarAngle = 0;//默认值0
controls.maxPolarAngle = Math.PI;//默认值Math.PI

.maxPolarAngle属性设置为90度,这样不能看到工厂模型底部

controls.maxPolarAngle = Math.PI/2;

通过.minAzimuthAngle.maxAzimuthAngle属性控制左右的旋转范围。

// 左右旋转范围
controls.minAzimuthAngle = -Math.PI/2;
controls.maxAzimuthAngle = Math.PI/2;

标签:OrbitControls,缩放,controls,相机,观察点,103,属性
From: https://blog.csdn.net/Miller777_/article/details/143280066

相关文章

  • 《HelloGitHub》第 103 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言Python、Java、Go、C/C++、Swift...让你在短......
  • 学习笔记(八):ArkUi-线性布局 (Row/Column)自适应拉伸、缩放、延伸
    一、自适应拉伸在线性布局下,常用空白填充组件Blank,在容器主轴方向自动填充空白空间,达到自适应拉伸效果示例:实现以下常用ui布局,左侧标题文本,右侧内容文本,中间空白区域  二、自适应缩放是指子元素随容器尺寸的变化而按照预设的比例(权重)自动调整尺寸,适应各种不同大小的设......
  • 人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调
    由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的探讨就会比较......
  • 【牛客训练记录】牛客小白月赛103
    训练情况赛后反思C题又头铁不测极限数据直接交,导致WAA题我们想要周长最小,显然选择三角形,所以我们只需要找到三根长度相同的木棍即可,存在就输出\(3\timesi\),不存在三根一样长的木棍就是no。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;void......
  • 基于CC3301芯片的双模WiFi模块E103-W13产品说明
    E103-W13系列WiFi6+蓝牙5.4协议双模WiFi模块E103-W13是基TI第十代Combo芯片CC3301推出一款2.4GHz工作频段Wi-Fi 6协议+低功耗蓝牙5.4协议的双模Wi-Fi模块。该双模蓝牙WiFi模块内部集成2.4GHz工作频段+PA,适用于输出功率高达+21dBm的完整无线解决方案,并且还可以与TI Sitara M......
  • [LibreOffice Calc]打印表格时自动缩放到与纸张尺寸匹配
    造冰箱的大熊猫@cnblogs2024/10/22,LinuxMint有没有遇到过打印表格时,表格太宽需要打印到多页上的情况,这时候手动缩放表格太费劲,如何自动呢?1、打开预览,File>>PrintPreview,或者Shift+Ctrl+O 2、在工具栏中点击FormatPage按钮(带齿轮那个) 3、在PageStyle对话框中,选择S......
  • WebGl 缩放矩阵
    缩放矩阵是线性代数中的一种矩阵,用于描述图形在空间中沿着各个坐标轴进行均匀缩放的变换。在3D图形编程中,缩放矩阵通常用于调整物体的大小,而不改变其形状。|x000||0y00||00z0||0001|其中,(x,y,z)是缩放向量,表示沿着x、y、z轴的缩放比......
  • WebGl 实现图片平移、缩放和旋转
    1.图片平移在WebGL中实现图片平移,可以通过修改顶点着色器中的顶点位置来实现。平移的基本思想是将每个顶点的位置向量沿着指定的方向(通常是x轴和y轴)进行平移。在顶点着色器中,可以通过添加或减去一个统一的偏移量(uniformvariable)来实现这一点。例如,如果要在x轴和y轴上分别平移......
  • SSM智慧小区综合管理平台q1033带论文文档1万字以上
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:业主,小区信息,车位信息,充电桩,垃圾屋,路灯信息,车位保修,垃圾屋保修开题报告内容一、研究背景与意义随着城市化进程的加快,小区物业管理面临诸多挑......
  • qt图像算法—图像的缩放之c++实现(不调包)
     1.基本原理  图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法  1.最临近插值法  将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标为(x,y),输出图像坐标为(i,j),比例系数为fx和fy。......