欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

three.js中文文檔學(xué)習(xí)之創(chuàng)建場(chǎng)景

 更新時(shí)間:2017年11月20日 10:47:19   作者:larny  
這篇文章主要給大家介紹了three.js中文文檔學(xué)習(xí)之創(chuàng)建場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用three.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

什么是Three.js?

如果你正在讀這篇文章,你可能對(duì)Three.js有一定的了解,那我們來簡(jiǎn)單地介紹下Three.js是什么.
Three.js是一個(gè)庫,使得WebGL的3D效果在瀏覽器中運(yùn)用很容易。而在原始的WebGL中一個(gè)簡(jiǎn)單的立方體會(huì)變成數(shù)百Javascript和著色器代碼的行,而一個(gè)Three.js只需要一點(diǎn)點(diǎn)代碼.

本節(jié)目標(biāo)是為 three.js 做簡(jiǎn)介。我們從使用旋轉(zhuǎn)立方體來搭建場(chǎng)景開始。如果遇到困難需要幫助,頁面底部有可參考的源碼。

一個(gè)場(chǎng)景至少需要的三種類型組件

  • 相機(jī)/決定哪些東西將在屏幕上渲染
  • 光源/他們會(huì)對(duì)材質(zhì)如何顯示,以及生成陰影時(shí)材質(zhì)如何使用產(chǎn)生影響
  • 物體/他們是在相機(jī)透視圖里主要的渲染隊(duì)形:方塊、球體等

開始前

在計(jì)算機(jī)中保存如下 HTML 代碼,并在 js 目錄下包含 three.js,然后在瀏覽器中打開

<html>
 <head>
 <meta charset=utf-8>
 <title>My first three.js app</title>
 <style>
  body { margin: 0; }
  canvas { width: 100%; height: 100% }
 </style>
 </head>
 <body>
 <script src="js/three.js"></script>
 <script>
  // Our Javascript will go here.
 </script>
 </body>
</html>

接下來的代碼都會(huì)下載 script 標(biāo)簽中

創(chuàng)建示例場(chǎng)景

為了利用three.js來進(jìn)行展示,我們需要三種元素:場(chǎng)景,攝像機(jī),渲染器,以便來渲染攝像機(jī)中的場(chǎng)景。

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 );

讓我們花點(diǎn)時(shí)間來解釋發(fā)生了什么。我們現(xiàn)在創(chuàng)建了場(chǎng)景,攝像機(jī)和渲染器。

在 three.js 中有幾種攝像機(jī)。我們暫時(shí)用的是 PerspectiveCamera (透視攝像機(jī))

它的第一個(gè)屬性是視圖角(FOV),它 是能看見的視圖范圍,其值表示角度大小。

第二個(gè)屬性是寬高比。大多數(shù)情況你想要使用被高除過之后的寬度,不然會(huì)發(fā)生像在寬屏電視上放舊電影的情況 —— 圖像看起來被壓扁了。

后面兩個(gè)屬性是近景面和遠(yuǎn)景面。只會(huì)渲染這兩個(gè)面之間的區(qū)域。目前你不必關(guān)心這些,使用這些參數(shù)能提高性能。

接下來談?wù)勪秩酒?。這便是神奇之處。除了我們這里用的 WebGLRenderer 外, three.js 還提供一些渲染器用在不支持 WebGL 的老舊瀏覽器上。

除了創(chuàng)建渲染器實(shí)例,我們也需要設(shè)置應(yīng)用渲染的尺寸。推薦使用填充整個(gè)應(yīng)用的寬高 —— 本例中是瀏覽器窗口的寬高。對(duì)于性能優(yōu)先的應(yīng)用,你能使用 setSize 來設(shè)置更小的值,比如 window.innerHeight/2, window.innerWidth/2,會(huì)渲染一半的尺寸。

如果你想低分辨率地渲染整個(gè)尺寸,你可以設(shè)置 setSize 的第三個(gè)參數(shù) — uodateStyle 為 <font color="#FF1493">false</font> ,如果 canvas 元素寬高都為 100%,則會(huì)以 1/2 分辨率渲染應(yīng)用。

再爾,我們需要在 HTML 中添加被渲染的元素。渲染器通過 canvas 來給我們展示場(chǎng)景。

“都很好,但之前說的立方體呢” 讓我們現(xiàn)在添加。

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

camera.position.z = 5;

我們需要 BoxGeometry來創(chuàng)建立方體。這個(gè)對(duì)象包含立方體所有的點(diǎn)(頂點(diǎn))和填充(面)。我們以后會(huì)討論。

除了幾何體外,我們還需要材質(zhì)為其上色。three.js 提供了一些材質(zhì),但我們暫且使用 MeshBasicMaterial。所有材質(zhì)接受并應(yīng)用一個(gè)包含所有屬性的對(duì)象。為簡(jiǎn)單起見,我們僅僅提供一個(gè)顏色屬性: 綠色 —— <font color="#00ff00">0x00ff00</font> 。和 CSS 和 PS 里的一樣采用十六進(jìn)制的顏色。

我們需要的第三個(gè)要素是 Mesh。 mesh 是一個(gè)將材質(zhì)應(yīng)用到幾何體上的對(duì)象,然后我們能將其放入場(chǎng)景中,并自由移動(dòng)。

當(dāng)我們調(diào)用 scene.add() ,我們添加的會(huì)默認(rèn)顯示在坐標(biāo)(0,0,0,)處。這會(huì)導(dǎo)致攝像機(jī)和立方體內(nèi)部重疊。為了避免這點(diǎn),我們簡(jiǎn)單地把攝像機(jī)往外移一點(diǎn)。

渲染場(chǎng)景

如果你在 HTML 文件中復(fù)制了如上代碼,屏幕不會(huì)顯示東西。因?yàn)槲覀冞€沒渲染場(chǎng)景。所以我們需要調(diào)用渲染器或者動(dòng)畫循環(huán)。

function animate() {
 requestAnimationFrame( animate );
 renderer.render( scene, camera );
}
animate();

這會(huì)創(chuàng)建一個(gè)讓渲染器每秒繪制一幀的循環(huán)。如果你對(duì)網(wǎng)頁游戲編程不了解,你可能會(huì)說“為什么不 寫setInterval 函數(shù)呢?”事實(shí)上,我們可以,但是 requestAnimationFrame 好處更多。最重要的好處是當(dāng)瀏覽器切換到另一個(gè)標(biāo)簽頁時(shí),requestAnimationFrame 會(huì)暫停渲染,因此不會(huì)浪費(fèi)寶貴的處理能力和電池壽命。

讓立方體動(dòng)起來

如果你插入了我們剛剛創(chuàng)建的代碼,你應(yīng)該會(huì)看見一個(gè)綠色的立方體。讓它旋轉(zhuǎn)起來不至于單調(diào)。

在animate 函數(shù)中的 renderer.render 上添加如下代碼:

cube.rotation.x += 0.01;
cube.rotation.y += 0.01;

它會(huì)按幀運(yùn)行(每秒60幀),并賦予立方體優(yōu)雅的動(dòng)畫。基本上,應(yīng)用運(yùn)行時(shí),你想移動(dòng)或改變?nèi)魏卧?,必須通過動(dòng)畫循環(huán)。你當(dāng)然在此處能調(diào)用其他函數(shù),以免animate函數(shù)上百行代碼結(jié)尾。

結(jié)果

恭喜!你現(xiàn)在創(chuàng)建好了第一個(gè) three.js 應(yīng)用。很簡(jiǎn)單,但總得突破。

完整代碼參考如下。琢磨一下并深刻理解其工作機(jī)理

<html>
 <head>
 <title>My first three.js app</title>
 <style>
  body { margin: 0; }
  canvas { width: 100%; height: 100% }
 </style>
 </head>
 <body>
 <script src="js/three.js"></script>
 <script>
  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 );

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

  camera.position.z = 5;

  var animate = function () {
  requestAnimationFrame( animate );

  cube.rotation.x += 0.1;
  cube.rotation.y += 0.1;

  renderer.render(scene, camera);
  };

  animate();
 </script>
 </body>
</html>

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • JS之相等操作符詳解

    JS之相等操作符詳解

    下面小編就為大家?guī)硪黄狫S之相等操作符詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • js獲取ip和地區(qū)

    js獲取ip和地區(qū)

    本文主要介紹了js獲取ip和地區(qū)的方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 微信JS接口大全

    微信JS接口大全

    這篇文章主要為大家分享了最全面詳細(xì)的微信JS接口大全,希望對(duì)大家有幫助,感興趣的小伙伴們可以參考一下
    2016-08-08
  • ES6中async函數(shù)與await表達(dá)式的基本用法舉例

    ES6中async函數(shù)與await表達(dá)式的基本用法舉例

    async和await是我們進(jìn)行Promise時(shí)的一個(gè)語法糖,async/await為了讓我們書寫代碼時(shí)更加流暢,增強(qiáng)了代碼的可讀性,下面這篇文章主要給大家介紹了關(guān)于ES6中async函數(shù)與await表達(dá)式的基本用法,需要的朋友可以參考下
    2022-07-07
  • 淺談Javascript線程及定時(shí)機(jī)制

    淺談Javascript線程及定時(shí)機(jī)制

    這篇文章主要介紹了淺談Javascript線程及定時(shí)機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • js計(jì)算系統(tǒng)當(dāng)前日期是星期幾的方法

    js計(jì)算系統(tǒng)當(dāng)前日期是星期幾的方法

    這篇文章主要為大家詳細(xì)介紹了js計(jì)算系統(tǒng)當(dāng)前日期是星期幾4種方法,需要的朋友可以參考下
    2016-07-07
  • JS實(shí)現(xiàn)圖片切換效果

    JS實(shí)現(xiàn)圖片切換效果

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)圖片切換效果 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JavaScript模擬數(shù)組合并concat

    JavaScript模擬數(shù)組合并concat

    這篇文章主要介紹了JavaScript模擬數(shù)組合并concat的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • JavaScript在瀏覽器中的執(zhí)行機(jī)制

    JavaScript在瀏覽器中的執(zhí)行機(jī)制

    既然說到了JavaScript,那么就會(huì)繞不過去執(zhí)行上下文,只有理解了執(zhí)行上下文才能更好的理解JavaScript本身,不過本部分不是專門講解?JavaScript的,主要從JavaScript的執(zhí)行順序開始介紹一下JavaScript是怎樣運(yùn)行的
    2023-09-09
  • 詳解JS截取字符串的三個(gè)方法substring,substr,slice

    詳解JS截取字符串的三個(gè)方法substring,substr,slice

    js中有三個(gè)截取字符的方法,分別是substring()、substr()、slice(),平時(shí)我們可能都用到過,但總是會(huì)對(duì)這些方法有點(diǎn)混淆。本文將詳細(xì)介紹一下這三者的區(qū)別,需要的可以參考一下
    2022-03-03

最新評(píng)論