日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.three.js世界的4大要素

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.three.js世界的4大要素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、三大組件

在Three.js中,要渲染物體到網頁中,我們需要3個組建:場景(scene)、相機(camera)和渲染器(renderer)。有了這三樣東西,才能將物體渲染到網頁中去。

記住關建語句:有了這三樣東西,我們才能夠使用相機將場景渲染到網頁上去。

創建這三要素的代碼如下:

var scene = new THREE.Scene(); // 場景 var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);// 透視相機 var renderer = new THREE.WebGLRenderer(); // 渲染器 renderer.setSize(window.innerWidth, window.innerHeight); // 設置渲染器的大小為窗口的內寬度,也就是內容區的寬度 document.body.appendChild(renderer.domElement);

1、場景

在Threejs中場景就只有一種,用THREE.Scene來表示,要構件一個場景也很簡單,只要new一個對象就可以了,代碼如下:

var scene = new THREE.Scene();
var scene = new THREE.Scene();

場景是所有物體的容器,如果要顯示一個蘋果,就需要將蘋果對象加入場景中。

2、相機

另一個組建是相機,相機決定了場景中那個角度的景色會顯示出來。相機就像人的眼睛一樣,人站在不同位置,抬頭或者低頭都能夠看到不同的景色。

場景只有一種,但是相機卻又很多種。和現實中一樣,不同的相機確定了呈相的各個方面。比如有的相機適合人像,有的相機適合風景,專業的攝影師根據實際用途不一樣,選擇不同的相機。對程序員來說,只要設置不同的相機參數,就能夠讓相機產生不一樣的效果。

在Threejs中有多種相機,這里介紹兩種,它們是:

透視相機(THREE.PerspectiveCamera)、這里我們使用一個透視相機,透視相機的參數很多,這里先不詳細講解。后面關于相機的那一章,我們會花大力氣來講。定義一個相機的代碼如下所示:(已經迫不及待想看看相機的參數了,點這里)

var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);

3、渲染器

最后一步就是設置渲染器,渲染器決定了渲染的結果應該畫在頁面的什么元素上面,并且以怎樣的方式來繪制。這里我們定義了一個WebRenderer渲染器,代碼如下所示:

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

注意,渲染器renderer的domElement元素,表示渲染器中的畫布,所有的渲染都是畫在domElement上的,所以這里的appendChild表示將這個domElement掛接在body下面,這樣渲染的結果就能夠在頁面中顯示了。

4、添加物體到場景中

那現在,我們將一個物體添加到場景中:

var geometry = new THREE.CubeGeometry(1,1,1); var material = new THREE.MeshBasicMaterial({color: 0x00ff00}); var cube = new THREE.Mesh(geometry, material); scene.add(cube);

代碼中出現了THREE.CubeGeometry,THREE.CubeGeometry是什么東東,他是一個幾何體,幾何體由什么組成,已經不是本課的主要內容了,后面的課程我們會詳細的學到。不過這里你只需要知道CubeGeometry是一個正方體或者長方體,究竟是什么,由它的3個參數所決定,cubeGeometry的原型如下代碼所示:

CubeGeometry(width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides) width:立方體x軸的長度height:立方體y軸的長度depth:立方體z軸的深度,也就是長度

想一想大家就明白,以上3個參數就能夠確定一個立方體。

剩下的幾個參數就要費解和復雜一些了,不過后面我們會自己來寫一個立方體,到時候,你會更明白這些參數的意義,這里你可以將這些參數省略。

5、渲染

終于到了最后一步,這一步做完后,就可以該干嘛干嘛去了。

渲染應該使用渲染器,結合相機和場景來得到結果畫面。實現這個功能的函數是

renderer.render(scene, camera);

渲染函數的原型如下:

render( scene, camera, renderTarget, forceClear )

各個參數的意義是:

scene:前面定義的場景camera:前面定義的相機renderTarget:渲染的目標,默認是渲染到前面定義的render變量中forceClear:每次繪制之前都將畫布的內容給清除,即使自動清除標志autoClear為false,也會清除。

6、渲染循環

渲染有兩種方式:實時渲染和離線渲染 。

先看看離線渲染,想想《西游降魔篇》中最后的佛主,他肯定不是真的,是電腦渲染出來的,其畫面質量是很高的,它是事先渲染好一幀一幀的圖片,然后再把圖片拼接成電影的。這就是離線渲染。如果不事先處理好一幀一幀的圖片,那么電影播放得會很卡。CPU和GPU根本沒有能力在播放的時候渲染出這種高質量的圖片。

實時渲染:就是需要不停的對畫面進行渲染,即使畫面中什么也沒有改變,也需要重新渲染。下面就是一個渲染循環:

function render() {cube.rotation.x += 0.1;cube.rotation.y += 0.1;renderer.render(scene, camera);requestAnimationFrame(render); }

其中一個重要的函數是requestAnimationFrame,這個函數就是讓瀏覽器去執行一次參數中的函數,這樣通過上面render中調用requestAnimationFrame()函數,requestAnimationFrame()函數又讓rander()再執行一次,就形成了我們通常所說的游戲循環了。

如不能理解游戲循環,請在這里提問。

場景,相機,渲染器之間的關系

Three.js中的場景是一個物體的容器,開發者可以將需要的角色放入場景中,例如蘋果,葡萄。同時,角色自身也管理著其在場景中的位置。

相機的作用就是面對場景,在場景中取一個合適的景,把它拍下來。

渲染器的作用就是將相機拍攝下來的圖片,放到瀏覽器中去顯示。他們三者的關系如下圖所示:

轉載于:https://www.cnblogs.com/zj-kingder/p/7380996.html

總結

以上是生活随笔為你收集整理的1.three.js世界的4大要素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。