认识相机

认识相机

 

 

在Threejs中相机的表示是THREE.Camera,它是相机的抽象基类,其子类有两种相机,分别是正投影相机THREE.OrthographicCamera和透视投影相机THREE.PerspectiveCamera。类图如下所示:

 

 

透视投影相机(PerspectiveCamera)

 

 

 

你可以认为该相机就是我们的眼睛。其特点就是观察物体时会有近大远小的效果。
透视相机的构造函数 :
PerspectiveCamera( fov, aspect, near, far )
/*
fov : 视角的大小,如果改值越大,物体会越小。(因为视角越大,看到的场景就会越大,从而显得物体小。就好比我们从很高的山上往下看建筑,此时我们能看到的视野会很大,所以你会觉得建筑都不怎么大。相反的如果你就在建筑的不远处,就会觉得建筑大道理一样)
推荐默认值:45


aspect : 实际窗口的纵横比,即宽度除以高度
推荐默认值:window.innerWidth/window.innerHeight


near:相机渲染的最近距离。改值必须 > 0
推荐默认值:0.1


far:相机渲染的最远距离。如果改值越大,相机能渲染更远处的物体。但是如果设置得太高,会影响渲染的效率。
推荐默认值:1000
*/
下图很好的展示了这些属性是如何结合在一起,从而决定你能看到什么 :


(近面和远面中间的区域就是能被相机渲染的区域。超过这个区域的物体将不被渲染。)

 

 

 

正投影相机(OrthographicCamera)

 

 

 

该相机不管物体的远近,所有物体渲染出来的尺寸都一样。这种相机通常用在二维游戏中。


正投影相机的构造函数 :
OrthographicCamera(left, right, top, bottom, near, far)
其中,left、right、top、bottom这四个值会组成一个矩形。这个四个值依次代表:渲染空间的最左边、最右边、最上边和最下边。而near和far的意思和透视相机的意思一样。


下图很好的展示了这些属性是如何结合在一起,从而决定你能看到什么 :


(近面和远面中间的区域就是能被相机渲染的区域。超过这个区域的物体将不被渲染。)

 

 

 

设置相机的Z轴

有时候我们创建了一个物体,但是运行程序后发下场景里面什么都没有,只有漆黑的一片。但是程序也没报错。这是为什么呢?先来看看代码 :

 

var scene = new THREE.Scene(); 
var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);  
var renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor('#000'); 
document.body.appendChild(renderer.domElement);
var cube = new THREE.Mesh(new THREE.CubeGeometry(3,3,3,10,10,10), new THREE.MeshBasicMaterial({color : 'green',
}));
scene.add(cube);
renderer.render(scene, camera);

运行后发下屏幕上是漆黑一片哈~~~~~~

 

我们来修改下MeshBasicMaterial的一个属性,如下 :
var cube = new THREE.Mesh(new THREE.CubeGeometry(3,3,3,10,10,10), new THREE.MeshBasicMaterial({
color : 'green',
wireframe : true //显示网格
}));


再次运行后如下 :


其实我们的代码并没有错,只是我们没有设置相机的z轴。相机默认的z轴是0,而物体我们上面的代码也没有设置z轴的位置,就默认也是0了。所以此时相机是在物体的里面了。
我们可以来验证下,把相机的z轴设置大点或者把物体的z轴设置成负数,如下 :

 

 

//设置相机z轴

 

 

 

 

camera.position.set(0,0,10);


//设置物体z轴
cube.position.set(0,0,-10);


运行效果图 :

 

 

 

 

lookAt函数

当我们修改相机的位置后会发现物体跑到我们可视区域的外面了。这是因为相机没有设置观察点。

 

所以我们可以通过lookAt函数,让相机一直对着某个方向(好比你不管站在哪个位置,你的眼睛都会停留在你女神的位置一样~~ 。这里一般的做法是让相机对准场景的中心点) 代码如下 :
camera.lookAt(new THREE.Vector3(0,0,0));  或者 camera.lookAt(scene.position);
设置后不管我们怎么改变相机的位置,我们都能在屏幕正中间看到物体

 


相机的up属性

通过修改相机的up属性,你可以修改相机以哪个轴为上方向。(通俗的讲就是哪个轴是在场景的正上方)。默认相机是以y轴的正上方为上方向。设置如下 :
camera.up.x = 0
camera.up.y = 1;
camera.up.z = 0;
up的3个属性取值为0~1
下图是依次设置x、y、z轴为上方向的效果图。(绿=y、红=x、蓝=z)


X轴为上方向


Y轴为上方向


Z轴为上方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383140.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

本文目录 前言怎么查找资料?数据手册例程 项目开发VS版本与OpenCV版本选择VS配置OpenCVVS添加MVS安装目录下的头文件和库VS项目开发 编程问题记录相机数据如何转换为OpenCV的Mat类型?函数不能修改全局指针变量?OpenCV运行报错“有未经处理的异…

Azure Kinect sdk 入门,简单使用深度相机

首先要安装azure Kinect dk传感器和人体跟踪的软件 先安装传感器:Azure-Kinect-Sensor-SDK/usage.md at develop microsoft/Azure-Kinect-Sensor-SDK GitHub 在这个网址里下载, 点击红笔画出来的地方,下载安装,记住安装路径&a…

入门级数码相机

为了满足不同层次顾客的购买要求,小编今天给大家交上一篇家用DC完全导购。从200万像素到800万像中间,分别选取了几款各级别中值得推荐的DC为大家推荐。在这里先给朋友们提一下目前数码相机市场相素与价位之间的简单联系。 目前,200万像素的数…

【计算机视觉-从入门到精通系列】 第二章 相机模型

2.1 针孔模型 计算机视觉是一门研究如何让计算机“看”世界的学科。人要看到世界需要眼睛,计算机要看到世界同样也需要“眼睛”,计算机的“眼睛”主要就是相机。实际应用中,相机的种类纷繁复杂,包括手机和平板电脑的相机&#xff…

5分钟入门Cinemachine智能相机系统

摘要:相机是Unity世界的眼睛,一个智能相机更是能帮咱们节省大把的时间和精力。Cinemachine现在已经大量应用到各种项目中,如果你还没有用过Cinemachine,墙裂建议你来体验一下。 你好,我是跟着大智学Unity的萌新&#x…

立体视觉入门指南(1):坐标系与相机参数

亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间。而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有…

camera学习入门指南

等待补充。 1.背景介绍 近年来,随着消费电子领域市场的快速增长,如安防、图像等领域,camera市场得到了快速发展。智能手机这几年以拍照作为主打卖点,带动了camera(CCM)出货。 具体可以看电子行业分析或者券…

机器视觉——入门基础(三)——相机镜头选型

目录 相机选型 分辨率、快门、帧率、色彩、靶面、接口 镜头选型 分辨率、靶面、焦距、接口、光圈畸变工作距离 常用计算示例 相机选型 分辨率、快门、帧率、色彩、靶面、接口 镜头选型 分辨率、靶面、焦距、接口、光圈畸变工作距离 常用计算示例 1. 面阵相机和镜头选型 已…

划重点!| 必须了解的工业相机入门级知识

工业相机是机器视觉系统的核心部件,其相关基础知识是行业内人员必须熟知的。那么分辨率、像素深度、行频、信噪比具体是指什么?CCD和CMOS又该如何去进行选择?今天我们就对这些内容进行一个简单的梳理,希望能够帮助大家了解更多。 …

机器视觉——入门基础(一)—— 相机篇

目录 一,相机就是CCD么? 二,像素。 三,像素直径。 四,CCD的大小。 五,快门速度。 六,增益。 七,1D相机(线扫描相机) 八,3D相机。 九&…

IP 协议的相关特性和数据链路层相关知识总结

目录 IP 协议的相关特性 一、IP协议的特性 二、 IP协议数据报格式 三、 IP协议的主要功能 1. 地址管理 动态分配 IP地址 NAT机制 NAT背景下的通信 IPV6 2. 路由控制​​​​​​​ 3.IP报文的分片与重组 数据链路层相关知识 1、以太网协议(Ethernet) 2.M…

掌握Python的X篇_28_python包管理工具pip命令

本篇将会介绍在实际使用python中最能节省效率的内容,利用第三方库拿来就用。 文章目录 1. pip命令是什么2. pip相关操作2.1 list2.2 install2.3 uninstall2.4 导出和导入2.4.1 freeze命令2.4.2 “-r” 3. 国内镜像4. Python Packges Index网站 1. pip命令是什么 p…

DiskGenius分区移动硬盘

打开DiskGenius 右键点击1T(实际显示是900多G)的移动硬盘,选择快速分区 分区个数按自己需要来选,卷标也按自己需要来修改,取消主分区的勾选框,因为是移动硬盘,不需要转操作系统,所以…

AUtoCAD Civil 3D-曲面-原始数据处理

Civil3D中,曲面是最重要的一个对象之一。曲面涉及到的知识点比较多,作为一个刚接触Civil3D的学习者,可能对于各种概念和各种概念之间的关系比较迷惑。这篇文章及梳理下曲面的一些重要的概念框架。 1、 曲面的分类 曲面可以分为四种类型&…

如何将卫星影像或者航拍影像叠加到CAD设计图上(Auto CAD版)

同步视频教程:卫星图像应用到AutoCAD工程设计(套合、叠加、配准)-Bigemap GIS Office 视频教程:如何选择中央子午线或者分度带 第一步 工具准备 BIGEMAP地图下载器:Bigemap系列产品-GIS行业基础软件kml\shp 相关教…

AutoCAD套合(叠加)卫星影像和矢量路网数据-CAD配准

BIGEMAP无偏移影像叠加配准(Auto CAD版) ​ 同步视频教程:http://www.iqiyi.com/w_19rubyfogh.html 专题地图制作视频教程:http://www.iqiyi.com/w_19rvlbep4l.html#vfrm16-1-1-1 下载:全国路网数据、全国水系矢量 …

cad图转成shp文件并把其平面坐标投影配准成大地坐标(配准针对没有底图的情况)

所需工具:arcmap,supermap(这里安装过程就不写了,网上一堆,自行搜搜吧。) 一、先将cad图转成shp文件 打开arcmap中,在图层中加入数据。 在arcmap中导入cad图后,选择需要的要素导出。比如,这里需要面要素,右击面要素,选择数据,点击导出数据。 选择将要导出shp文件…

history记录日期时间和日志记录操作

history命令能查看到操作日期和时间的配置方法: 1)在/etc/profile文件中添加一行: export HISTTIMEFORMAT"%F %T whoami " 2)保存后,执行加载命令: source /etc/profile 3)然后检…

ASP.NET Core - 缓存之分布式缓存

分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护。 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时。 与其他将缓存数据存储在单个应用服务器上的缓存方案相比&am…

【SWAT水文模型】SWATCUP率定参数实例-以洮河流域为例

SWATCUP率定参数实例 以SWATCUP首次模拟结果为例,具体模拟结果如下: 模拟参数结果如下: Parameter_Name Fitted_Value Min_value Max_value 1:R__CN2.mgt -0.180000 -0.200000 0.200000 2:V__SUR…