13 Three.js照相機的正交投影和透視投影
這一篇文章會的人也不看,不會的人也不需要專業術語,我直接大白話介紹一下webgl裡面的照相機。
照相機就相當於在模型世界中,設定一個位置,將前方的內容拍攝下來,然後再給canvas,在視窗裡面顯示出來在當前位置的影像。
再說的簡單一些,就相當於我們拿著手機拍了一張照片,放到了視窗裡面顯示出來。而動畫則是一直拍,一直顯示而已。
因為繪製出來的圖形是3d的,而我們的螢幕只能顯示2d的圖片。所以,在成像的時候我們需要設定投影的方式,來獲取形成的影像。
正交投影:
形成的影像都是標準的尺寸大小,不會產生偏差。
一般使用在建模,工業上面。
使用:
正交投影照相機(Orthographic Camera)設定起來較為直觀,它的建構函式是:
THREE.OrthographicCamera(left, right, top, bottom, near, far)
這六個引數分別代表正交投影照相機拍攝到的空間的六個面的位置,這兩個面圍成一個長方體,我們稱其為視景體(Frustum)。只有在視景體內部(下圖中的灰色部分)的物體才可能顯示在螢幕上,而視景體外的物體會在顯示之前被裁減掉。
為了保持照相機的橫豎比例,需要保證 (right - left) 與 (top - bottom) 的比例與 Canvas寬度與高度的比例一致。
near 與 far 都是指到照相機位置在深度平面的位置,而照相機不應該拍攝到其後方的物體,因此這兩個值應該均為正值。為了保證場景中的物體不會因為太近或太遠而被照相機忽略,一般 near 的值設定得較小, far 的值設定得較大,具體值視場景中物體的位置等決定。
設定相機的拍攝方向:
camera.position.set(x, y, z);
上面是設定相機的位置
camera.lookAt(new THREE.Vector3(0, 0, 0));
上面是設定相機觀察的方向,上面是預設原點
不過一定要注意, lookAt 函式接受的是一個 THREE.Vector3 的例項,因此千萬別寫成camera.lookAt(0, 0, 0) ,否則非但不能得到理想的效果,而且不會報錯,使你很難找到問題所在。
透視投影:
更接近人眼的觀看效果,有“近大遠小”的效果。
應用比較廣泛,只要不是正交的應用,基本上使用透視投影就好了。
使用:
透視投影照相機(Perspective Camera)的建構函式是:
THREE.PerspectiveCamera(fov, aspect, near, far)
透檢視中,灰色的部分是視景體,是可能被渲染的物體所在的區域。 fov 是視景體豎直方向上的張角(是角度制而非弧度制),如側檢視所示。
aspect 等於 width / height ,是照相機水平方向和豎直方向長度的比值,通常設為Canvas 的橫縱比例。
near 和 far 分別是照相機到視景體最近、最遠的距離,均為正值,且 far 應大於near 。
fov的值越大,裡面的圖形會顯得越小。這是為什麼?我們從下面的的側檢視來看,雖然正方體的實際大小並未改變,但是將照相機的豎直張角設定更大是,視景體變大了,因而正方體相對於整個視景體的大小就變小了,看起來正方形就顯得變小了。
fov不會改變畫面的橫豎比例,aspect能夠改變。
本節參考了three.js入門指南
相關文章
- [OpenGL ES] 正交投影
- WebGL-三維透視投影Web
- win10照相機在哪裡_win10照相機怎麼開啟Win10
- 視訊投影(二維視訊投影到三維模型上)模型
- 全息水幕投影,打造投影視覺新體驗!佩京科技視覺
- 手機投影到deepin
- 透視和正交同時顯示
- w10系統如何投影到電視_w10系統投影到電視的操作步驟
- three.js中的相機介紹JS
- 透過機器人應用視覺機器人視覺
- 透視表excel透視表怎麼做 excel的資料透視表怎麼弄Excel
- ps透視裁剪扣取透視面上的相框內容
- win10電腦沒有照相功能怎麼設定_win10沒有照相功能的設定方法Win10
- 松下電視智慧投影Mirror for Panasonic TV
- 安卓手機如何投影到電腦?手機螢幕投影到電腦安卓
- 透視表pivot_table和交叉表crosstabROS
- Three.js開發指南(9):建立動畫和移動相機JS動畫
- three.js 製作機房(下)JS
- three.js 製作機房(上)JS
- EMCC 13新增其它主機和資料庫資料庫
- 全息投影+音樂噴泉,帶你享受神秘的視覺盛宴!視覺
- MySQL筆記 13 檢視MySql筆記
- Roku智慧電視投影Mirror for Roku Mac版軟體Mac
- 圖解WebGL和Three.js工作原理圖解WebJS
- win10 怎麼把螢幕投到電視上_win10系統怎麼透過無線方式將螢幕投影到電視Win10
- ios手機怎麼投影到win10電腦_ios手機如何投影到win10電腦iOSWin10
- Github Repository 視覺化 (D3.js & Three.js)Github視覺化JS
- Git 中的物件模型和檔案的詳細檢視 —— Git 學習筆記 13Git物件模型筆記
- 【帶著canvas去流浪(13)】用Three.js製作簡易的MARVEL片頭動畫(下)CanvasJS動畫
- Three.js入門-相機控制器JS
- three.js 利用滑鼠移動攝像機JS
- Flutter中的3D透視效果Flutter3D
- three.js 尤拉角和四元數JS
- Three.js開發指南(4):使用Three.js的材質JS
- Excel資料透視表怎麼做 Excel資料透視表技巧Excel
- three.js學習3_相機相關JS
- Vue和React的檢視更新機制對比VueReact
- 透視Matplotlib核心功能和工具包 - Cartopy工具包
- 透視Matplotlib核心功能和工具包 - Seaborn工具包