THREE实战2_正交投影相机与透视相机

简介: THREE实战2_正交投影相机与透视相机

正交投影相机

特点:看见物体的远近高低比例都是相同

就像maya中的三视图。

看一下鄙人以前做的一个简单模型伞。

  • 侧视图

  • 俯视图

正交投影构造函数OrthographicCamera

OrthographicCamera( left, right, top, bottom, near, far );

参数 含义
left 左平面距离相机中心的垂直距离
right 右平面距离相机中心的垂直距离
top 顶平面距离相机中心的垂直距离
bottom 低平面距离相机中心的垂直位置
near 近平面距离相机中心的垂直位置
far 远平面距离相机中心的垂直距离

maya的顶视图相机,相机中心就是它的焦点位置。

透视相机

  • 透视图

    透视相机就像我们的人眼

    透视投影相机的构造函数PerspectiveCamera
PerspectiveCamera(fov,aspect,near,far);
参数 含义
fov 视角
aspect 纵横比
near 近平面
far 原平面

maya的透视相机

THREE实战

前期的工作重构代码:

<script>
        //场景的物体
        var cube=null,mesh=null,scene=null;
        function initObject() {
            var geometry = new THREE.CubeGeometry(300,300,300,);//正方体
            //白色反射所有光线,利于检测灯光
            var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} );//白色
            mesh = new THREE.Mesh( geometry,material);
            mesh.position = new THREE.Vector3(0,0,0);
            scene.add(mesh);
        }
        //灯光
        function initLight() {
            light_direction=new THREE.DirectionalLight(0x0000FF,1);//方向光蓝色
            light_direction.position.set(10,20,6);
        }
        //函数入口
        function threeStart() {
            initThree();
            initCamera();
            initScene();
            initLight();
            initObject();
            animation();
        }
        // 循环渲染
        function animation()
        {
            renderer.render(scene, camera);
            requestAnimationFrame(animation);//递归调用
        }
        </script>
<body onload="threeStart();">
<div id="canvas-frame"></div>
</body>
case1:正交投影相机的使用

相机中心视为原点,left与bottom为负值

//正交投影相机
        function initCamera() {
        var camera;
        camera=new THREE.OrthographicCamera(-width/2,width/2,height/2,-height/2,1,1000);
        camera.position.x = 0;
        camera.position.y = 0;
        camera.position.z = 700;
        camera.up.x = 0;//相机朝向位置
        camera.up.y = 1;
        camera.up.z = 0;
        camera.lookAt(new THREE.Vector3(0,0,0));
        }

调整左侧距离left=-width时

case2:透视相机的使用
//透视相机45视角,屏幕纵横比,1-1000的距离区间
        function initCamera() {
        var camera;
        camera = new THREE.PerspectiveCamera(45, width/height, 1, 1000);
        camera.position.x = 0;
        camera.position.y = 0;
        camera.up.x = 0;//相机朝向位置
        camera.up.y = 1;
        camera.up.z = 0;
        camera.lookAt(new THREE.Vector3(0,0,0));
        }

调整视角120度,视角0-180度之间看到的物体会越来越小


目录
相关文章
|
安全 Java 关系型数据库
elasticsearch安装dynamic-synonym插件
如何快速掌握Elasticsearch8.x同义词插件的使用,本文将层层深入带你从0到1理解ES的插件开发
elasticsearch安装dynamic-synonym插件
|
存储 缓存 安全
[笔记]深入解析Windows操作系统《二》系统架构
深入解析Windows操作系统《二》系统架构
1996 0
[笔记]深入解析Windows操作系统《二》系统架构
|
Linux 网络安全
NFS 服务器安装
NFS(Network File System)网络文件系统,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。当我们在 NFS 服务器设置好一个共享目录后,其他的有权访问 NFS 客户端就可以将这个共享目录挂载到文件系统自定义的挂载点,挂载好后客户端在本地能够看到服务端共享目录中的所有数据
419 1
|
存储 SQL 关系型数据库
OceanBase的架构特点
【8月更文挑战第10天】OceanBase的架构特点
572 66
|
数据挖掘 UED
ERP系统的用户体验与界面设计:提升用户满意度与操作效率
【7月更文挑战第29天】 ERP系统的用户体验与界面设计:提升用户满意度与操作效率
1266 1
|
JSON 监控 API
2024年7月免费天气API接口推荐
天气API对于开发人员来说是构建响应更快、安全性更高的应用程序的有力工具。使用天气API可以帮助开发者提供出色的用户体验,实现高效的数据管理。
1174 0
|
算法 安全 网络安全
客户端如何验证ssl/tls证书的合法性
客户端是如何验证ssl/tls证书的合法性
1118 1
|
Android开发 Shell
Appium之ADB指令详解
前言 学Android测试,ADB指令是必学的。 图1 一、ADB概述        Android Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分:        1、客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。
1840 0
|
SQL Java 数据库连接
Java实战:hutool-db实现多数据源配置
我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。
Java实战:hutool-db实现多数据源配置
|
安全 API Android开发
RK3326 android10.0(Q) OTA 实战
RK3326 android10.0(Q) OTA 实战
884 0
RK3326 android10.0(Q) OTA 实战