threejs相机和渲染器

渲染器

渲染器其实代表的是canvas标签。

渲染器的类型

WebGLRender

使用WebGL来渲染图形,速度较快,但是有些机器不支持WebGL。

CanvasRender

使用canvas2d来渲染图形,在较老的版本上,主要是用来渲染2D图形。现在这个渲染器在新版本中已弃用。

创建渲染器

创建渲染器代码如下:

renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);

setSize方法设置的是canvas标签的大小,比如:

renderer.setSize(100,100)

等于:

<canvas style="width:100px;height:100px;"></canvas>

相机

相机定义了场景中哪部分是可以见的,相机有自己的位置(position)、朝向(lookAt)和可视域。我们创建的图形一定要放在相机的可视域中才能看得见。可视域与相机的类型、相机的位置和朝向都有关。

相机的类型和创建

threejs提供的相机有正交相机(OrthographicCamera)、透视相机(PerspectiveCamera)、全景相机(CubeCamera)和3D相机(StereoCamera)。

正交相机

正交相机拍摄的效果类似设计图,重在表现物体的实际尺寸,没有近小远大的效果,如下图:


正交相机的构造方法如下:

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

这个六个参数即是指定视域的左右上下近远六个范围。正交相机的视域是立方体:

可以打开 :【threejs相机例子】,按o键,就可以看到正交相机的演示,右边的线框则展示出正交相机的视域示意图。

透视相机

透视相机拍摄的效果类似人眼所见,即有近小远大的效果,如下图:

透视相机的构造方法如下:

PerspectiveCamera( fov, aspect, near, far )

fov参数指定视角,aspect指定视图宽高比,后两个参数指定近平面和远平面。透视相机的视域是一个台体:

可以打开 :【threejs相机例子】,按p键,就可以看到透视相机的演示,右边的线框则展示出透视相机的视域示意图。

全景相机

全景相机就是可以360度拍摄的相机,见过百度地图全景街景拍摄车的话,应该会有印象,就像下面这个:

在threejs中,全景相机构造也类似,使用六个不同方向上的相机同时拍摄,将拍摄的结果融合到同一个画面中。这有点像VR的概念,无论你看向画面的哪个方向,都能看到那个方向的景物。可以打开下面的链接体验一下:【全景相机的例子】

3D相机

这个3D相机应该叫浮雕3D相机,它是用两个不同位置的透视相机同时拍摄,将拍摄的结果合成为一个画面。这便是早期3D电影的表现方法,通过让人的两只眼睛看到稍微不同的图像,来欺骗人的感觉,让人好像看到了立体一样。可以打开下面的链接,看看这种相机的拍摄效果:【3D相机例子】

你会发现直接看,画面似乎很模糊,但是当你戴上红蓝眼镜时,画面就变成了立体的了。关于浮雕3D电影可参考:【浮雕3D电影】

相机和渲染器的关系

在threejs中,渲染器可以视为是canvas标签,相机可以视为画布。注意画布和canvas标签不是同一个东西,canvas标签是画布的容器。画布就好比一张图片,而canvas标签就像img标签。

因此:

renderer.setSize(100,100)

相当于:

<canvas style="width:100px;height:100px;"></canvas>

var camera = new THREE.OrthographicCamera(-500,500,100,-100,1,1000);

相当于:

<canvas heigth="1000" width="1000"></canvas>

当然,这种类比过于简单,实际中,threejs做的工作要更多。

canvas标签大小和画布大小不一致会引发的问题

如果canvas标签和画布大小不一致,则会拉伸画布填充canvas标签,这会导致画面变形。例如:

camera = new THREE.OrthographicCamera(-500,500,20,-20,1,100);
renderer.setSize(1000,1000);

在上面的代码中,canvas标签较大,而故意将画布高度设得很小,画出来的效果大致如下:

可以看到,字母在竖直方向上被拉长了。


threejs相关的其它文章见:threejs教程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类的 三大特性 封装,继承,多态 overload与override的区别

OOP三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 封装的目的&#xff1a;为了让类更安全封装的做法&#xff1a;1.类里面的成员变量做为private2.使用成员方法来间接访问成员变量3.在该方法里面加限制条件 php类里面不允许出现同名方法 继承 概念&#xff1a;子类…

三级菜单 python_python三级菜单

menu {北京:{海淀:{五道口:{soho:{},网易:{},google:{}},中关村:{爱奇艺:{},汽车之家:{},youku:{},},上地:{百度:{},},},昌平:{沙河:{老男孩:{},北航:{},},天通苑:{},回龙观:{},},朝阳:{},东城:{},},上海:{闵行:{"人民广场":{炸鸡店:{}}},闸北:{火车战:{携程:{}}},浦…

threejs概览

threejs术语和概念 threejs的API很长&#xff0c;有很多概念和术语&#xff0c;理解了这些概念和术语&#xff0c;才能更好的使用threejs。这些概念和术语都藏在API右侧的大纲中&#xff0c;下图简单整理了一下这些概念&#xff1a; 这些概念又分为四个大类&#xff08;见上图…

C#生成新浪微博短网址 示例源码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using DotNetSample.Models;using System.Web.Script.Serialization;namespace DotNetSample.Utils{public class ShortUrlHelper{/// <summary>/// 获取新浪短域名/// </summary…

leetcode数组汇总_[LeetCode] 300. 最长上升子序列

题目链接&#xff1a; https://leetcode-cn.com/problems/longest-increasing-subsequence难度&#xff1a;中等通过率&#xff1a;43.0%题目描述:给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释:…

threejs创建平面几何形状

创建平面几何形状 平面几何形状有三种&#xff1a;点&#xff0c;线&#xff0c;面三种&#xff0c;下面说说用threejs创建这几种形状的方法。 创建点 创建点可以使用Points类。 function createPoints(){//创建一个Geometry&#xff0c;并添加点let geometry new THREE.G…

新建vue3项目(未完待续)

vite 官网 https://cn.vitejs.dev/ 使用 vite 创建项目 npm create vitelatest 进入目录后 执行 npm install 运行程序 npm run dev vscode 不要同时安装 vetur 和 volar 关于安装eslint 官网 &#xff1a;https://eslint.org 安装ESLINT npm install eslint …

wcf 返回图片_wcf http 返回图片

做项目时候用wcf 返回图片,从官网上找了找一次只能返回一张图片&#xff0c;但是一直查不到返回多个图片的方法&#xff0c;ios 可以异步加载看速度也可以&#xff0c;先记录一下等以后用解决了再发[ServiceContract]public interface IImageServer{[OperationContract, WebGet…

threejs精灵(Sprite)

Sprite精灵 Sprite叫精灵&#xff0c;计算机图形学中&#xff0c;精灵指包含于场景中的二维图像或动画&#xff08;wiki&#xff09;。在threejs中&#xff0c;这样说明Sprtite&#xff08;doc&#xff09; : A sprite is a plane that always faces towards the camera , ge…

Ubuntu更改鼠标灵敏度

需要命令:xinput 清自行用 man xinput 查询 xinput 帮助文档 1、插入鼠标&#xff0c;打开终端&#xff0c;输入命令&#xff1a;xinput 查询当前已挂在设备 2、拔出鼠标&#xff0c;打开终端&#xff0c;再输入命令&#xff1a;xinput 查询当前已挂在设备&#xff0c;发现缺少…

echarts 生成 迁徙图_echarts3 迁徙图 迁入迁出(示例代码)

geoCoordMap {‘上海‘: [121.4648,31.2891],‘佛山‘: [112.8955,23.1097],‘保定‘: [115.0488,39.0948],‘兰州‘: [103.5901,36.3043],‘包头‘: [110.3467,41.4899],‘北京‘: [116.4551,40.2539],‘天津‘: [117.4219,39.4189],‘常州‘: [119.4543,31.5582],‘广州‘: […

threejs骨架形状

骨骼动画 骨骼是什么&#xff1f;骨骼就是一个可以控制其它形状的对象。在threejs中&#xff0c;骨骼&#xff08;Bone&#xff09;就是一个空的Object3D对象&#xff0c;当然&#xff0c;也可以是任何Object3D对象的子类。 创建骨架 创建骨架总体来说就四步&#xff1a; 创…

.net 知识积累

日历模式&#xff1a; 可以使用按钮事件进行触发 &#xff1b; 设置默认按钮&#xff1a; this.Form.DefaultButton"ID属性" &#xff1b; 注意此功能只能应用于.net控键中&#xff0c;必须位于 ruant "Server"; DefaultButton 必须是 IButtonControl 类…

tx2无法识别网络_Jetson TX2开篇--网络配置

续接上文&#xff0c;硬件连接完毕后&#xff0c;接通电源&#xff0c;按开机按钮。系统开机首次进入的是以nvidia用户登录的Ubuntu 命令行界面。习惯使用图形界面的用户莫慌&#xff0c;首次开机通过startx 命令发现无法启动图形界面&#xff0c;解决办法见(Jetson TX2开篇--安…

threejs加载3D模型例子

加载3D模型 首先要引入ColladaLoader加载器&#xff0c;Collada是一个3D模型交换方案&#xff0c;即不同的3D模型可以通过Collada进行相互转换&#xff0c;言外之意&#xff0c;threejs可以使用Collada将3D模型的数据转换成自己支持的格式&#xff0c;从而在浏览器上渲染出来。…

snailsvn使用教程_mac下使用snailSVN的踩坑之旅

一个很心酸的故事&#xff0c;公司了使用苹果电脑的只有我一个人&#xff0c;然后刚开始使用苹果电脑&#xff0c;开启了我饿自闭之旅&#xff0c;网上查到的一些方法是不可以使用的&#xff0c;所以我把正确的方法记录下来&#xff0c;给大家指个路首先&#xff0c;说明下&…

bzoj 1083 繁忙的都市

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1083 题解&#xff1a; 在bzoj里能遇到如此如此水的题真是不容易…… 乍一看好像有点吓人&#xff0c;其实是一道Kruskal模板题…… 1 #include<cstdio>2 #include<algorithm>3 using namesp…

threejs纹理

纹理 纹理用来表现物体的细节。理论上可以将物体的每个细节建模出来&#xff0c;但是这样时间成本和性能成本都太高&#xff0c;因此&#xff0c;将物体的一些细节用纹理来表示。 图片纹理 图片纹理直接在物体表面应用图片。可以使用TextureLoader类的load方法来加载纹理。 …

mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计

今天来讲一下怎么利用MySql进行库表设计1 引擎选择在 mysql 5.1 中&#xff0c;引入了新的插件式存储引擎体系结构&#xff0c;允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构&#xff0c;允许数据库专业人员或者设计库表的软件开发人员为…

刷题向》一道逆向思维题(BZOJ1046)(NORMAL)

这道题对于一类题都有一个通用思路&#xff1a;反向递减序列即为正向字典序。 对于逆向思维的题还要多做才能培养这种对于逆向思维的感觉。 想到这种方法之后&#xff0c;就很简单了。 因为nm不会炸&#xff0c;所以反向LIS叠一个贪心就能过了。 直接甩题目&代码 Descripti…