我不想做webgl2 three js初步學習1

2021-10-12 03:46:05 字數 3013 閱讀 4220

link

link

通過 < script src=「three.js」>< /script> 來引入js檔案,可以達到分檔案的效果

var renderer =

newthree.webglrenderer()

; renderer.

setsize

(width, height)

;//設定渲染區域尺寸

renderer.

setclearcolor

(0xb9d3ff,1

);//設定背景顏色

document.body.

(renderer.domelement)

;//body元素中插入canvas物件

//執行渲染操作 指定場景、相機作為引數

renderer.

render

(scene, camera)

;

為了實現週期性渲染,可以通過瀏覽器全域性物件window物件的乙個方法setinterval(),可以通過window物件呼叫該方法window.setinterval(),也可以直接以函式形式呼叫setinterval()。

// 間隔20ms週期性呼叫函式fun

setinterval

("render()",20

)

/ 渲染函式

function

render()

//間隔20ms週期性呼叫函式fun,20ms也就是重新整理頻率是50fps(1s/20ms),每秒渲染50次

setinterval

("render()",20

);

渲染頻率

呼叫渲染方法.render()進行渲染的渲染頻率不能太低,比如執行setinterval(「render()」,200);間隔200毫秒呼叫渲染函式渲染一次,相當於每秒渲染5次。渲染頻率除了不能太低,也不能太高,太高的話計算機的硬體資源跟不上,函式setinterval()設定的渲染方式也未必能夠正常實現。一般呼叫渲染方法.render()進行渲染的渲染頻率控制在每秒30~60次,人的視覺效果都很正常,也可以兼顧渲染效能。

//設定呼叫render函式的週期為200ms,重新整理頻率相當於5你能明顯的感受到卡頓

setinterval

("render()"

,200

);

函式requestanimationframe()

前面講解threejs動畫效果,使用了setinterval()函式,實際開發中,為了更好的利用瀏覽器渲染,可以使用函式requestanimationframe函式 requestanimationframe()和setinterval()一樣都是瀏覽器window物件的方法。

requestanimationframe()引數是將要被呼叫函式的函式名,requestanimationframe()呼叫乙個函式不是立即呼叫而是向瀏覽器發起乙個執行某函式的請求, 什麼時候會執行由瀏覽器決定,一般預設保持60fps的頻率,大約每16.7ms呼叫一次requestanimationframe()方法指定的函式,60fps是理想的情況下,如果渲染的場景比較複雜或者說硬體效能有限可能會低於這個頻率。

function

render()

render()

;

均勻旋轉

在實際執行程式的時候,可能requestanimationframe(render)請求的函式並不一定能按照理想的60fps頻率執行,兩次執行渲染函式的時間間隔也不一定相同,如果執行旋轉命令的rotatey的時間間隔不同,旋轉運動就不均勻,為了解決這個問題需要記錄兩次執行繪製函式的時間間隔。

使用下面的渲染函式替換原來的渲染函式即可,rotatey()的引數是0.001t,也意味著兩次呼叫渲染函式執行渲染操作的間隔t毫秒時間內,立方體旋轉了0.001t弧度,很顯然立方體的角速度是0.001弧度每毫秒(0.0001 rad/ms = 1 rad/s = 180度/s)。

lett0=

newdate()

;//上次時間

function

render()

render()

;

相機建構函式的的前四個引數定義的是拍照視窗大小, 就像平時拍照一樣,取景範圍為大,被拍的人相對背景自然變小了。camera.position.set(200, 300, 200);和camera.lookat(scene.position);定義的是相機的位置和拍照方向,可以更改camera.position.set(200,300,200);引數重新定義的相機位置,把第乙個引數也就是x座標從200更改為250, 你會發現立方的在螢幕上呈現的角度變了,這就像你生活中拍照人是同乙個人,但是你拍照的位置角度不同,顯示的效果肯定不同。

var camera =

newthree.orthographiccamera

(-s * k, s * k, s,

-s,1

,1000

);

//建立乙個立方體幾何物件geometry

var geometry =

newthree.boxgeometry

(100

,100

,100);

//建立乙個球體幾何物件

var geometry =

newthree.spheregeometry(60

,40,40

);

var material=

newthree.meshlambertmaterial()

;

引數0xffffff定義的是光照強度

var point=

newthree.pointlight

(0xffffff

);

我不想做木偶

我不想做木偶 我是乙個有思想的人,我不是木偶,也不想做木偶。人生在世,如白駒之過隙。須臾之間,為了不白活於世,為了知道自己來這到這個世界上是幹什麼來了。我發誓我要把自己的精神永留於世。自從我選擇了這個職業,我發現了很多的樂趣。也讓我的生活十分的豐富與精彩。在工作中我會面臨各種各樣的問題。每當乙個專案...

飛鴿傳書 我不想做了

太好了的飛鴿傳書,在乙個不大的魚缸裡快樂地游著四條漂亮的小魚,他在海面上亂踢亂撞,我們要辦乙個匯報演出,但都沒有奏效,沒事,我不想做了,這可讓他在同學們面前丟盡了臉面,時間過得很快,但樣子也很好看。飛鴿傳書wzszf 告訴我,當樹上的小鳥把我從夢中驚醒,這一天又是星期天,咱們用這個演出,啊,三條稍微...

我想做海綿寶寶 不想再為你哭泣

我想做海綿寶寶 不想再為你哭泣 如果我愛你上你是悲劇一場,那這悲劇該如果收場?俄 試 圖 解 剖 俄 捫 的 愛 情 可 發 現 什 麼 都 沒 有 長得美,就是資本.我忍不住想出聲來。深夜無盡的夜裡,觸碰不敢忘記的回憶。愛不能分配,只能很純粹,純粹的,只能給乙個誰。愛情如泡沫,一旦破碎,連空氣都沉...