首页 > 其他分享 >Three.js教程:透视投影相机

Three.js教程:透视投影相机

时间:2023-06-12 13:33:15浏览次数:55  
标签:200 教程 画布 位置 Three js 相机 PerspectiveCamera 锥体

推荐:将NSDT场景编辑器加入你的3D工具链。

其他系列工具:NSDT简石数字孪生

Threejs如果想把三维场景Scene渲染到web网页上,还需要定义一个虚拟相机Camera,就像你生活中想获得一张照片,需要一台用来拍照的相机。

透视投影相机PerspectiveCamera

Threejs提供了正投影相机OrthographicCamera (opens new window)和透视投影相机PerspectiveCamera (opens new window)。本节课先给大家比较常用的透视投影相机PerspectiveCamera

透视投影相机PerspectiveCamera本质上就是在模拟人眼观察这个世界的规律。

相机位置.position

生活中用相机拍照,你相机位置不同,拍照结果也不同,threejs中虚拟相机同样如此。

比如有一间房子,你拿着相机站在房间里面,看到的是房间内部,站在房子外面看到的是房子外面效果。

相机对象Camera具有位置属性.position,通过位置属性.position可以设置相机的位置。

相机观察目标.lookAt()

你用相机拍照你需要控制相机的拍照目标,具体说相机镜头对准哪个物体或说哪个坐标。对于threejs相机而言,就是设置.lookAt()方法的参数,指定一个3D坐标。

//相机观察目标指向Threejs 3D空间中某个位置
camera.lookAt(0, 0, 0); //坐标原点
camera.lookAt(0, 10, 0);  //y轴上位置10
camera.lookAt(mesh.position);//指向mesh对应的位置

判断相机相对三维场景中长方体位置

你可以把三维场景中长方体mesh想象为一个房间,然后根据相机位置和长方体位置尺寸对比,判断两者相对位置。你可以发现设置相机坐标(200, 200, 200),位于长方体外面一处位置。

// 长方体尺寸100, 100, 100
const geometry = new THREE.BoxGeometry( 100, 100, 100 );
const mesh = new THREE.Mesh(geometry,material);
// 相机位置xyz坐标:0,10,0
mesh.position.set(0,10,0);
// 相机位置xyz坐标:200, 200, 200
camera.position.set(200, 200, 200); 

定义相机渲染输出的画布尺寸

你生活中相机拍照的照片是有大小的,对于threejs而言一样,需要定义相机在网页上输出的Canvas画布(照片)尺寸,大小可以根据需要定义,这里先随机定义一个尺寸。

Canvas画布:课程中会把threejs虚拟相机渲染三维场景在浏览器网页上呈现的结果称为Canvas画布

// 定义相机输出画布的尺寸(单位:像素px)
const width = 800; //宽度
const height = 500; //高度

透视投影相机PerspectiveCamera:视锥体

透视投影相机的四个参数fov, aspect, near, far构成一个四棱台3D空间,被称为视锥体,只有视锥体之内的物体,才会渲染出来,视锥体范围之外的物体不会显示在Canvas画布上。

// width和height用来设置Three.js输出的Canvas画布尺寸(像素px)
const width = 800; //宽度
const height = 500; //高度
// 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);

PerspectiveCamera参数介绍:

PerspectiveCamera( fov, aspect, near, far )
参数含义默认值
fov 相机视锥体竖直方向视野角度 50
aspect 相机视锥体水平方向和竖直方向长度比,一般设置为Canvas画布宽高比width / height 1
near 相机视锥体近裁截面相对相机距离 0.1
far 相机视锥体远裁截面相对相机距离,far-near构成了视锥体高度方向 2000
3D建模学习工作室    

上一篇:Three.js教程:对象克隆、复制 (mvrlink.com)

下一篇:Three.js教程:渲染器 (mvrlink.com)

标签:200,教程,画布,位置,Three,js,相机,PerspectiveCamera,锥体
From: https://www.cnblogs.com/mvrlink/p/17474793.html

相关文章

  • 关于map/list集合 和 json串的相互转换
    JSON.parse(tempWhiteBoardTextBook);//将接收到的服务器字符串转为JavaScript对象;JSON.stringify(tempWhiteBoardTextBook);//将JavaScript对象或值转换为JSON字符串,一般是发送json数据到服务器; 1、使用此net.sf.json.JSONObject包将map/list集合或者json串转......
  • Java XML教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介XML是一种简单的基于文本的语言,旨在以纯文本格式存储和传输数据。它代表可扩展标记语言。JavaXML入门教程-从基本到高级概念的简单步骤了解JavaXML,其中包括概述,JavaXML解析器,DOM解析器,解析XML文档,查询XML文档,创建XML文档,修改XML文档,SAX解析器,JDOMXMLParser,StAXP......
  • ABP入门教程4 - 初始化运行
    点这里进入ABP入门教程目录 编译解决方案重新生成解决方案,确保生成成功。连接数据库打开JD.CRS.Web.Host/appsettings.json,修改数据库连接设置ConnectionStrings.打开JD.CRS.Web.Host/appsettings.json,做同样修改.   迁移数据库方法一设置JD.CRS.Web.Mvc为启始项目打开工具/......
  • ABP入门教程3 - 解决方案
    点这里进入ABP入门教程目录 创建项目点这里进入ABP启动模板 如图操作,我们先生成一个基于.NETCore的MPA(多页面应用).点击"Createmyproject!"即可创建项目. 解读项目展示层(JD.CRS.Web.Mvc)提供一个用户界面,实现用户交互操作。ASP.NETCoreMVC(模型-视图-控制器)可以视为展示层......
  • ABP入门教程5 - 界面调整
    点这里进入ABP入门教程目录 调整前调整后调整项页面标题把favicon.ico替换为指定LogoJD.CRS.Web.Mvc\wwwroot\favicon.ico顶部工具栏把logo.png替换为指定LogoJD.CRS.Web.Mvc\wwwroot\images\logo.png更新Layout JD.CRS.Web.Mvc\Views\Shared\_Layout.cshtml 左侧菜单栏调整用户......
  • ABP入门教程2 - 体系架构
    点这里进入ABP入门教程目录 介绍应用程序代码库的分层是一种广泛接受的技术,可帮助降低复杂性并提高代码可重用性。为了实现分层体系结构,ASP.NETBoilerplate遵循域驱动设计的原理。DDD分层体系架构领域驱动设计(DDD:Domain-DrivenDesign)有四个基本层:展示层:为用户提供界面。使用......
  • ABP入门教程6 - 领域层创建实体
    点这里进入ABP入门教程目录 创建实体在领域层(即JD.CRS.Core)下新建文件夹Entitys//用以存放实体对象添加一个实体类Course.cs//课程信息1usingAbp.Domain.Entities;2usingAbp.Domain.Entities.Auditing;3usingAbp.Timing;4usingSystem;5usingSystem.Collecti......
  • VSCode详细使用教程
    VSCode(VisualStudioCode)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,算是目前前端开发几乎完美的软件开发工具。1.VSCode下载VSCode下载链接:https://code.visualstudio.com/2.VSCode汉化 3.VSCode常用插件(安装步骤同汉化) 3.1AutoCloseTag(自动闭合HTML/XML标签......
  • 大数据NiFi(十九):实时Json日志数据导入到Hive
    文章目录实时Json日志数据导入到Hive一、配置“TailFile”处理器1、创建“TailFile”处理器2、配置“PROPERTIES”二、配置“EvaluateJsonPath”处理器1、创建“EvaluateJsonPath”处理器2、配置“PROPERTIES”3、连接“TailFile”处理器和“EvaluateJsonPath”处理器三、配置“Rep......
  • js:typeof和Object.prototype.toString检测数据类型
    (目录)typeof检测数据类型console.log(typeof100);//"number"console.log(typeof"abc");//"string"console.log(typeoffalse);//"boolean"console.log(typeofundefined);//"undefined"console.log(typeoffunction......