首页 > 其他分享 >104. 相机控件MapControls

104. 相机控件MapControls

时间:2024-10-28 09:17:55浏览次数:8  
标签:控件 MapControls 鼠标 controls 相机 OrbitControls 104

地图导航相机控件MapControls,你可实现一个类似百度地图的3D导航功能。

MapControls使用操作

你可以打开课件案例源码测试下效果。

  • 平移:鼠标左键拖动
  • 旋转:鼠标右键拖动
  • 缩放:鼠标中键滚动

引入相机控件MapControls

引入相机控件MapControls类,旧版本是通过扩展库文件MapControls.js实现,不过新版本MapControls类和OrbitControls类一样通过 \examples\jsm\controls目录下的OrbitControls.js文件引入。

// 引入相机控件`MapControls`
import { MapControls } from 'three/addons/controls/OrbitControls.js';

注意:如果你在原生.html文件中,使用import { MapControls } from 'three/addons/controls/OrbitControls.js';方式引入,注意通过<script type="importmap">配置好路径。

使用MapControls

参数1是地图导航控件要改变的相机对象,参数2是three.js渲染对应的canvas画布。

const controls = new MapControls(camera, renderer.domElement);

MapControls本质

MapControls本质上就是改变相机的参数,比如相机的位置属性、相机目标观察点。

controls.addEventListener('change', function () {
    // 鼠标右键旋转时候,查看.position变化
    // 鼠标左键拖动的时候,查看.position、.target的位置会变化
    console.log('camera.position',camera.position);
    console.log('controls.target',controls.target);
});

缩放、旋转或平移禁止

参考上节课关于OrbitControls的介绍,整体思路是一样的,只是鼠标操作有差异。

controls.enablePan = false; //禁止平移
controls.enableZoom = false;//禁止缩放
controls.enableRotate = false; //禁止旋转

透视投影相机缩放范围

参考上节课关于OrbitControls的介绍

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

设置旋转范围

参考上节课关于OrbitControls的介绍

// 上下旋转范围
controls.minPolarAngle = 0;
controls.maxPolarAngle = Math.PI/2;
// 左右旋转范围
controls.minAzimuthAngle = -Math.PI/2;
controls.maxAzimuthAngle = Math.PI/2;

标签:控件,MapControls,鼠标,controls,相机,OrbitControls,104
From: https://blog.csdn.net/Miller777_/article/details/143280134

相关文章

  • Navicat连接数据库,报错信息:1045 -Access denied for user 'root'@'localhost'(using p
    错误解析错误信息:无法通过Navicat连接MySQL数据库。原因:MySQL服务未启动。解决方法检查MySQL服务状态打开“服务”管理器(可以在Windows中通过搜索“服务”来找到)。查找MySQL相关的服务,通常名称为MySQL或带有版本号的名称(如MySQL507)。启动MySQL服务如果发现MySQL......
  • Syncfusion宣布开源其为.NET MAUI开发的14个控件
    .NETMAUI是Xamarin.Forms的进化版,增加了对构建桌面应用的支持。.NETMAUI的特点包括统一的框架、对桌面应用的支持、性能改进、使用现代技术以及开源特性。开源.NETMAUI(多平台应用UI)的其他要点包括:统一框架:.NETMAUI将适用于Android、iOS、macOS和Windows的API统一到......
  • DataGridView控件使用学习
    一、DataGridView控件及元素初始化//DataGridView控件初始化publicSystem.Windows.Forms.DataGridViewdataGridView1;this.dataGridView1=newSystem.Windows.Forms.DataGridView();//DataGridView列初始化publicSystem.Windows.Forms.DataGridViewCheckBoxColumnCol......
  • WPF+MVVM案例实战(六)- 自定义分页控件实现
    文章目录1、项目准备2、功能实现1、分页控件DataPager实现2、分页控件数据模型与查询行为3、数据界面实现3、运行效果4、源代码获取1、项目准备打开项目Wpf_Examples,新建PageBarWindow.xaml界面、PageBarViewModel.cs,在用户控件库UserControlLib中创建用......
  • XLSX.js解析Excel中的数据,<input type='file' />控件中
    在页面中添加一个:<inputtype="file"class="txt"style="width:300px;height:25px;line-height:25px;color:#000000;"id="file01"/>在页面中添加javascript代码:document.getElementById("file01").addEventLis......
  • Qt开发技巧(十九):定时器的调用问题,控件的透明问题,慎用事件过滤器,依赖库的路径链接,对话框
    继续讲一些Qt开发中的技巧操作:1.定时器的调用问题有一个场景经常遇到,那就是在符合某个条件下,延时一段时间去执行一段代码,如果短时间内触发多次又不需要频繁执行,只需要执行一次就行。如果选择用QTimer::singleShot无法终止已经触发的,这个时候就要主动实例化一个单次定时器,......
  • npoi读取word 内容控件
    voidMain(){ //打开word文件 XWPFDocumentdocument=null; try { using(FileStreamstream=File.OpenRead(@"15.docx")) { document=newXWPFDocument(stream); } CT_Bodybody=document.Document.body; varcontrols=body.getValueFrom......
  • 解决Mysql:ERROR 1045 (28000):Access denied for user ‘root‘@‘localhost‘ (usin
    遇到 ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:NO) 错误时,通常是因为尝试以root用户身份登录MySQL时没有提供密码或提供的密码不正确。以下是解决此问题的步骤:检查是否设置了密码:如果从未为root用户设置过密码,可以尝试在命......
  • 如何借助前端表格控件助力企业实现财务数字化转型
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/前言在当今快速变化的经济环境中,记账软件对个人和企业的重要性愈发突出。对于个人而言,它可以帮助用户实时掌握财务状况,促进合理消费和有效储蓄,提升财务管理能力。对于企业,记账软件不仅提高了财务透明度和......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......