当前位置: 首页 > news >正文

three.js入门二:相机的zoom参数

环境:

  • threejs:129 (在浏览器的控制台下输入: window.__THREE__即可查看版本)
  • vscode
  • window
  • edge

透视相机或正交相机都有一个zoom参数,它可以用来将相机排到的内容在canvas上缩放显示。

注意:

  • 设置zoom后要调用 camera.updateProjectionMatrix();
  • zoom默认是1,它的取值就像是手机拍照一样。值变大,画面放大,渲染出来的空间变小;
  • 感觉调整zoom对正交相机来说就像是临时调整了它所拍到的边界,即:left/right/top/bottom,但实际上又没有改;

示例:正交相机

先定义个canvas(500*500大小):

<canvas ref="canvas" width="500" height="500" style="margin:50px"></canvas>

创建场景和相机:

let scene = new Three.Scene();
let renderer = new Three.WebGLRenderer({ canvas: canvasDom });
let camera = new Three.OrthographicCamera(-250, 250, 250, -250, 1, 1000);
camera.zoom = 1;//改为2,将看到原画面的一半,改为
camera.updateProjectionMatrix();
camera.position.set(0, 100, 0);
camera.lookAt(0, 0, 0);

添加网格线:

const size = 500;
const divisions = 10;
const gridHelper = new Three.GridHelper(size, divisions);
scene.add(gridHelper);

开始渲染:

(function animate() {requestAnimationFrame(animate);renderer.render(scene, camera);
})()

现在观察:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
验证:zoom对正交相机来说,等同于是临时修改相机的 left/right/top/bottom

在场景中加入半径为500的球体:

let mesh = new Three.Mesh(new Three.SphereGeometry(500, 16, 8), new Three.MeshBasicMaterial({ color: 0xff0000, wireframe: true }))
scene.add(mesh)

调整zoom=0.5,观察效果:
在这里插入图片描述

OrbitControls改变的是相机的zoom:

除了上面我们可以自己调节zoom取值外,OrbitControls 也是通过更改zoom实现视图的缩放的,如下:

//创建控制器
new OrbitControls(camera2, renderer.domElement);//渲染的时候打印相机参数
(function animate() {requestAnimationFrame(animate);renderer.render(scene, camera2);console.log(`camera2.left=${camera2.left},camera2.right=${camera2.right} zoom=${camera2.zoom}`)
})()

观察效果:
在这里插入图片描述

相关文章:

three.js入门二:相机的zoom参数

环境&#xff1a; threejs&#xff1a;129 &#xff08;在浏览器的控制台下输入&#xff1a; window.__THREE__即可查看版本&#xff09;vscodewindowedge 透视相机或正交相机都有一个zoom参数&#xff0c;它可以用来将相机排到的内容在canvas上缩放显示。 注意&#xff1a;…...

sql语法树(select)实例

在SELECT节点下&#xff0c;将"*"&#xff08;表示选择所有列&#xff09;添加为子节点。下面是一个简单的SQL语句示例&#xff1a; SELECT * FROM customers WHERE age > 25 AND city New York;语法树&#xff08;Syntax Tree&#xff09;是由SQL解析器构建的…...

爬虫002_python程序的终端运行_文件运行_ipython的使用---python工作笔记020

用python运行一个文件,就是要写一个.py结尾的文件 然后保存 然后直接cmd中,python 然后写上py文件的路径就可以了 然后看一下内容 看一下终端中运行,直接输入python进入python环境,然后写python代码 回车运行 退出可以用exit()...

智融SW3518S降压协议IC一款适合车充控制芯片

描述 SW3518S 是一款高集成度的多快充协议双口充电芯片&#xff0c; 支持 AC 口任意口快充输出&#xff0c; 支持双口独立限流。 其集成了 5A 高效率同步降压变换器&#xff0c; 支持 PPS/PD/QC/AFC/FCP/SCP/PE/SFCP/VOOC等多种快充协议&#xff0c; 最大输出 PD 100W&#xff…...

虹科活动 | 虹科ADAS自动驾驶研讨会

​​虹科ADAS/自动驾驶研讨会将于8月7日在上海闵行展开——加快ADAS/AD开发步伐&#xff01; 期待您的参与&#xff01;...

LeetCode-每日一题-将数组和减半的最少操作次数

2208. 将数组和减半的最少操作次数 提示 中等 49 相关企业 给你一个正整数数组 nums 。每一次操作中&#xff0c;你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。&#xff08;注意&#xff0c;在后续操作中你可以对减半过的数继续执行操作&#xff09; 请你返…...

97、Kafka的性能好在什么地方

Kafka的性能好在什么地方 一、顺序写二、零拷贝三、额外补充 kafka不基于内存&#xff0c;而是硬盘存储&#xff0c;因此消息堆积能力更强 一、顺序写 顺序写 : 利用磁盘的顺序访问速度可以接近内存&#xff0c;kafka的消息都是append操作&#xff0c;partition是有序的&#…...

(2)前端控制器的扩展配置, 视图解析器类型以及MVC执行流程的概述

SpringMVC入门程序的扩展说明 注册前端控制器的细节 在web.xml文件注册SpringMVC的前端控制器DispatcherServlet时使用url-pattern标签中使用/和/*的区别 /可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径/*可以匹配所有请求(包括.jsp请求), 例如在过滤器…...

GO学习之切片操作

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 文章目录 GO系列前言一、什么是切片&#xff08;和数组有什么关系&#xff09;二、切片基本操作2.1 切片定义2.2 添加元素2.3 删除元素2.4 遍历2.5 自定…...

YOLOv8实战口罩佩戴检测(视频教程)

课程链接&#xff1a;https://edu.csdn.net/course/detail/38827 口罩佩戴检测可以应用于公共场所的安全管理、疫情防控监测等多种场景。YOLOv8是前沿的目标检测技术&#xff0c;它基于先前 YOLO 版本在目标检测任务上的成功&#xff0c;进一步提升性能和灵活性。 本课程使用…...

SiddonGpu编译过程记录

1. 还是想要能够快速生成DRR&#xff0c;用了这个up的代码GitHub - fabio86d/CUDA_DigitallyReconstructedRadiographs: GPU accelerated python library for generation of Digitally Reconstructed Radiographs (March 2018) 在看步骤的时候不是很清晰。尤其是procedure to…...

Ubuntu 20.04使用 VNC远程桌面连接避坑指南

自从开始使用Ubuntu 20.04搭建深度学习服务器&#xff0c;就想到使用VNC远程桌面连接使用。可是之前一直使用的是Ubuntu18.04&#xff0c;心里想着设置应该不难&#xff0c;结果在配置的时候总出现无法连接的错误。下面我就分享一下我使用TigerVNC配置远程桌面连接过程中遇到的…...

STM32MP157驱动开发——按键驱动(定时器)

内核函数 定时器涉及函数参考内核源码&#xff1a;include\linux\timer.h 给定时器的各个参数赋值&#xff1a; setup_timer(struct timer_list * timer, void (*function)(unsigned long),unsigned long data)&#xff1a;设置定时器&#xff1a;主要是初始化 timer_list 结…...

基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

目录 一、添加硬盘 二、查看新磁盘 三、磁盘分区 3.1新建分区 3.2 格式分区 3.3 挂载分区 3.4 永久挂载新分区 3.5 取消挂载分区 一、添加硬盘 1.在虚拟机处选择编辑虚拟机设置&#xff0c;然后选择添加 2.选择硬盘&#xff0c;然后选择下一步 3.默认即可&#xff0c;下一步…...

“完全指南:理解API和商品详情的作用和关系“

当涉及到电子商务和在线交易时&#xff0c;API和商品详情是两个至关重要的概念。本文将为您提供一个详尽的指南&#xff0c;帮助您全面理解API和商品详情之间的作用和关系。 淘宝/天猫获得淘宝商品详情 API 返回值说明 公共参数 请求地址 名称类型必须描述keyString是调用…...

Spring Cloud Gateway - 新一代微服务API网关

Spring Cloud Gateway - 新一代微服务API网关 文章目录 Spring Cloud Gateway - 新一代微服务API网关1.网关介绍2.Spring Cloud Gateway介绍3.Spring Cloud Gateway的特性4.Spring Cloud Gateway的三大核心概念5.Gateway工作流程6.Gateway核心配置7.动态路由8.Predicate自定义P…...

HTTP超本文传输协议

HTTP超本文传输协议 HTTP简介HTTP请求与响应HTTP请求请求行请求头空行请求体 HTTP响应响应行响应头空行响应体 HTTP请求方法GET和POST之间的区别HTTP为什么是无状态的cookie原理session 原理cookie 和 session 的区别cookie如何设置cookie被禁止后如何使用session HTTP简介 HT…...

React+Redux 数据存储持久化

ReactRedux 数据存储持久化 1、安装相关依赖 yarn add reduxjs/toolkit redux redux-persist 2、userSlice&#xff1a;用户状态数据切片封装 import { createSlice, PayloadAction } from reduxjs/toolkitinterface IUserInfo {userName: stringavatar?: stringbrief?: st…...

Redis高可用部署架构

目录 1. 主从复制与哨兵架构&#xff1a;2. Redis集群架构&#xff1a; Redis高可用部署可以采用主从复制与哨兵架构或Redis集群架构。下面将分别介绍这两种架构的架构图、优缺点和具体应用场景。 1. 主从复制与哨兵架构&#xff1a; 架构图&#xff1a; ----------| Client…...

深度学习与神经网络

人工智能&#xff0c;机器学习&#xff0c;深度学习&#xff0c;神经网络&#xff0c;emmmm&#xff0c;傻傻分不清楚&#xff0c;这都啥呀&#xff0c;你知道吗&#xff1f;我不知道。你知道吗&#xff1f;我不知道。 来来来&#xff0c;接下来&#xff0c;整硬菜&#xff1a…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...