three.js 常見問題

2023-02-16 17:23 更新

哪一種三維物體格式能夠得到最好地支持?

推薦使用glTF(gl傳輸格式)來對(duì)三維物體進(jìn)行導(dǎo)入和導(dǎo)出,由于glTF這種格式專注于在程序運(yùn)行時(shí)呈現(xiàn)三維物體,因此它的傳輸效率非常高,且加載速度非???。

three.js同樣也為其它廣受歡迎的格式(例如FBX、Collada以及OBJ等)提供了載入工具。即便如此,你應(yīng)當(dāng)還是首先嘗試著在你的項(xiàng)目中建立一個(gè)基于glTF的工作流程。 了解更多詳細(xì)信息,請(qǐng)查看載入3D模型

為什么在示例中會(huì)有一些和viewport相關(guān)的meta標(biāo)簽?

<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">

這些標(biāo)簽用于在移動(dòng)端瀏覽器上控制視口的大小和縮放(頁面內(nèi)容可能會(huì)以與可視區(qū)域不同的大小來呈現(xiàn))。

Safari: Using the Viewport

MDN: Using the viewport meta tag

如何在窗口調(diào)整大小時(shí)保持場(chǎng)景比例不變?

我們希望所有的物體,無論它們距離攝像機(jī)有多遠(yuǎn),都能呈現(xiàn)相同尺寸,即使是在窗口被重新調(diào)整大小的時(shí)候。 解決這個(gè)問題的關(guān)鍵,是一個(gè)很重要的公式:給定距離,求可見高度

visible_height = 2 * Math.tan( ( Math.PI / 180 ) * camera.fov / 2 ) * distance_from_camera;

如果我們以一定的百分比增加了窗口的高度,那我們所想要的結(jié)果便是所有距離的可見高度都增加相同的百分比。 這并不能通過改變攝像機(jī)的位置來實(shí)現(xiàn),相反,你得改變攝像機(jī)的視野角度(FOV)。這是個(gè)示例:Example.

為什么我的物體的一部分是不可見的?

這可能是由于面剔除而導(dǎo)致的。面是具有朝向的,這個(gè)朝向決定了哪邊是正面或者哪邊是背面。 在正常情況下,渲染時(shí)會(huì)將背面進(jìn)行剔除。要查看這是不是你所遇到的問題,請(qǐng)將material的side更改為THREE.DoubleSide。

material.side = THREE.DoubleSide

為什么有時(shí)候無效的輸入會(huì)讓three.js返回奇怪的結(jié)果?

出于性能考慮,大多數(shù)情況下 three.js 不驗(yàn)證輸入。確保所有輸入均有效是你的應(yīng)用的責(zé)任。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)