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

Three.js學(xué)習(xí)之文字形狀及自定義形狀

 更新時間:2016年08月01日 16:51:57   投稿:daisy  
今天小編帶大家學(xué)習(xí)的是Three.js的文字形狀與自定義形狀,文章內(nèi)容很詳細,對大家學(xué)習(xí)Three.js或許有幫助,下面一起來看看吧。

1.文字形狀

  說起3d文字想起了早年word里的一些藝術(shù)字:

  那么TextGeometry可以用來創(chuàng)建三維的文字形狀。

  使用文字形狀需要下載和引用額外的字體庫。這里,我們以 helvetiker字體為例。

引用:

<script type="text/javascript" src="你的路徑/helvetiker_regular.typeface.json"></script>

  TextGeometry的構(gòu)造函數(shù)是:

THREE.TextGeometry(text, parameters)

  text是文字字符串;

  parameters是以下參數(shù)組成的對象:

    · size:字號大小,一般為大寫字母的高度

    · height:文字的厚度

    · curveSegments:弧線分段數(shù),使得文字的曲線更加光滑

    · font:字體,默認是'helvetiker',需對應(yīng)引用的字體文件

    · weight:值為'normal'或'bold',表示是否加粗

    · style:值為'normal'或'italics',表示是否斜體

    · bevelEnabled:布爾值,是否使用倒角,意為在邊緣處斜切

    · bevelThickness:倒角厚度

    · bevelSize:倒角寬度

  創(chuàng)建一個三維文字:new THREE.TextGeometry('Hello', {size: 1, height: 1}),其效果為:

 

  可以適當(dāng)調(diào)整材質(zhì)和光照以達到期望效果:

//金屬發(fā)亮物體
var material = new THREE.MeshPhongMaterial({  
  color: 0xffff00,
  specular:0xffff00,  
  //指定該材質(zhì)的光亮程度及其高光部分的顏色,如果設(shè)置成和color屬性相同的顏色,則會得到另一個更加類似金屬的材質(zhì),如果設(shè)置成grey灰色,則看起來像塑料
  shininess:0    
  //指定高光部分的亮度,默認值為30
});
        
//方向光
var light = new THREE.DirectionalLight(0xffffff);
light.position.set(-5, 10, 5);
scene.add(light);

  源碼:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>3.js測試六</title>
  </head>
  <body onload="init()">
    <canvas id="mainCanvas" width="400px" height="300px" ></canvas>
  </body>
  <script type="text/javascript" src="js/three.min.js"></script>
    <!-- Find more information at https://github.com/mrdoob/three.js/tree/master/examples/fonts -->
    
    <script type="text/javascript">
      function init() {
        var renderer = new THREE.WebGLRenderer({
          canvas: document.getElementById('mainCanvas')
        });
        renderer.setClearColor(0x000000);
        var scene = new THREE.Scene();
        
        // camera
        var camera = new THREE.OrthographicCamera(-2.5, 2.5, 1.875, -1.875, 0.1, 100);
        camera.position.set(5, 5, 20);
        camera.lookAt(new THREE.Vector3(1, 0, 0));
        scene.add(camera); 
        
//       var material = new THREE.MeshBasicMaterial({
//         color: 0xffff00,
//         wireframe: true
//       });
        //金屬發(fā)亮物體
        var material = new THREE.MeshPhongMaterial({  
          color: 0xffff00,
          specular:0xffff00,  
          //指定該材質(zhì)的光亮程度及其高光部分的顏色,如果設(shè)置成和color屬性相同的顏色,則會得到另一個更加類似金屬的材質(zhì),如果設(shè)置成grey灰色,則看起來像塑料
          shininess:0    
          //指定高光部分的亮度,默認值為30
        });
        
        //方向光
        var light = new THREE.DirectionalLight(0xffffff);
        light.position.set(-5, 10, 5);
        scene.add(light);

        // load font
        var loader = new THREE.FontLoader();
        loader.load('./helvetiker_regular.typeface.json', function(font) {
          var mesh = new THREE.Mesh(new THREE.TextGeometry('Hello', {
            font: font,
            size: 1,
            height: 1
          }), material);
          scene.add(mesh);
          
          // render
          renderer.render(scene, camera);
        });
      }
      
    </script>
</html>

2.自定義形狀

  對于Three.js沒有提供的形狀,可以提供自定義形狀來創(chuàng)建。

  由于自定義形狀需要手動指定每個頂點位置,以及頂點連接情況,如果該形狀非常復(fù)雜,程序員的計算量就會比較大。在這種情況下,建議在3ds Max之類的建模軟件中創(chuàng)建模型,然后使用Three.js導(dǎo)入到場景中,這樣會更高效方便。

  自定義形狀使用的是Geometry類,它是其他如CubeGeometry、SphereGeometry等幾何形狀的父類,其構(gòu)造函數(shù)是:

THREE.Geometry()

  初始化一個幾何形狀,然后設(shè)置頂點位置以及頂點連接情況:

 

  源碼:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>3.js測試六-二</title>
  </head>
  <body onload="init()">
    <canvas id="mainCanvas" width="400px" height="300px" ></canvas>
  </body>
  <script type="text/javascript" src="js/three.js"></script> 
  <script type="text/javascript">
    function init() {
      var renderer = new THREE.WebGLRenderer({
        canvas: document.getElementById('mainCanvas')
      });
      renderer.setClearColor(0x000000);
      var scene = new THREE.Scene();
      
      // camera
      var camera = new THREE.OrthographicCamera(-5, 5, 3.75, -3.75, 0.1, 100);
      camera.position.set(25, 25, 25);
      camera.lookAt(new THREE.Vector3(0, 0, 0));
      scene.add(camera);
      
      var material = new THREE.MeshBasicMaterial({
        color: 0xffff00,
        wireframe: true
      });
      
      // 初始化幾何形狀
      var geometry = new THREE.Geometry();
      
      // 設(shè)置頂點位置
      // 頂部4頂點
      geometry.vertices.push(new THREE.Vector3(-1, 2, -1));
      geometry.vertices.push(new THREE.Vector3(1, 2, -1));
      geometry.vertices.push(new THREE.Vector3(1, 2, 1));
      geometry.vertices.push(new THREE.Vector3(-1, 2, 1));
      // 底部4頂點
      geometry.vertices.push(new THREE.Vector3(-2, 0, -2));
      geometry.vertices.push(new THREE.Vector3(2, 0, -2));
      geometry.vertices.push(new THREE.Vector3(2, 0, 2));
      geometry.vertices.push(new THREE.Vector3(-2, 0, 2));
      
      // 設(shè)置頂點連接情況
      // 頂面
      geometry.faces.push(new THREE.Face3(0, 1, 3));
      geometry.faces.push(new THREE.Face3(1, 2, 3));
//     geometry.faces.push(new THREE.Face4(0, 1, 2, 3));
      // 底面
      geometry.faces.push(new THREE.Face3(4, 5, 6));
      geometry.faces.push(new THREE.Face3(5, 6, 7));
//     geometry.faces.push(new THREE.Face4(4, 5, 6, 7));
      // 側(cè)面
      geometry.faces.push(new THREE.Face3(1, 5, 6));
      geometry.faces.push(new THREE.Face3(6, 2, 1));
      geometry.faces.push(new THREE.Face3(2, 6, 7));
      geometry.faces.push(new THREE.Face3(7, 3, 2));
      geometry.faces.push(new THREE.Face3(3, 7, 0));
      geometry.faces.push(new THREE.Face3(7, 4, 0));
      geometry.faces.push(new THREE.Face3(0, 4, 5));
      geometry.faces.push(new THREE.Face3(0, 5, 1));
//      // 四個頂點組成的面
//      geometry.faces.push(new THREE.Face4(0, 1, 5, 4)); 
//      geometry.faces.push(new THREE.Face4(1, 2, 6, 5)); 
//      geometry.faces.push(new THREE.Face4(2, 3, 7, 6)); 
//      geometry.faces.push(new THREE.Face4(3, 0, 4, 7));
      
      var mesh = new THREE.Mesh(geometry, material);
      scene.add(mesh);
      
      // render
      renderer.render(scene, camera);
    }
  </script>
</html>

  需要注意的是,new THREE.Vector3(-1, 2, -1)創(chuàng)建一個矢量,作為頂點位置追加到geometry.vertices數(shù)組中。

  而由new THREE.Face3(0, 1, 2)創(chuàng)建一個三個頂點組成的面,追加到geometry.faces數(shù)組中。三個參數(shù)分別是三個頂點在geometry.vertices中的序號。如果需要設(shè)置由四個頂點組成的面片,可以類似地使用THREE.Face4。

//頂面
geometry.faces.push(new THREE.Face4(0, 1, 2, 3));
//底面
geometry.faces.push(new THREE.Face4(4, 5, 6, 7));
//四個側(cè)面
geometry.faces.push(new THREE.Face4(0, 1, 5, 4));
geometry.faces.push(new THREE.Face4(1, 2, 6, 5));
geometry.faces.push(new THREE.Face4(2, 3, 7, 6));
geometry.faces.push(new THREE.Face4(3, 0, 4, 7));

以上就是小編為大家整理的Three.js學(xué)習(xí)之文字形狀及自定義形狀的全部內(nèi)容,之前小編也整理了幾篇關(guān)于Three.js的相關(guān)文章,有需要的可以通過下面相關(guān)文章的鏈接查看,希望能幫到學(xué)習(xí)Three.js的大家。

相關(guān)文章

  • Highcharts學(xué)習(xí)之?dāng)?shù)據(jù)列

    Highcharts學(xué)習(xí)之?dāng)?shù)據(jù)列

    數(shù)據(jù)列配置是 Highcharts 最復(fù)雜也是最靈活的配置,如果說 Highcharts 是靈活多變,細節(jié)可定制的話,那么數(shù)據(jù)列配置就是這個重要特性的核心。
    2016-08-08
  • Three.js學(xué)習(xí)之文字形狀及自定義形狀

    Three.js學(xué)習(xí)之文字形狀及自定義形狀

    今天小編帶大家學(xué)習(xí)的是Three.js的文字形狀與自定義形狀,文章內(nèi)容很詳細,對大家學(xué)習(xí)Three.js或許有幫助,下面一起來看看吧。
    2016-08-08
  • 淺談輕量級js模板引擎simplite

    淺談輕量級js模板引擎simplite

    這篇文章主要介紹了淺談輕量級js模板引擎simplite的簡介和用法的相關(guān)資料,需要的朋友可以參考下
    2015-02-02
  • 組件庫Monmrepo架構(gòu)與開發(fā)調(diào)試環(huán)境構(gòu)建詳解

    組件庫Monmrepo架構(gòu)與開發(fā)調(diào)試環(huán)境構(gòu)建詳解

    這篇文章主要為大家介紹了組件庫Monmrepo架構(gòu)與開發(fā)調(diào)試環(huán)境構(gòu)建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 交互式可視化js庫gojs使用介紹及技巧

    交互式可視化js庫gojs使用介紹及技巧

    這篇文章主要介紹了如何使用可視化庫gojs及使用時的小技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2022-01-01
  • 淺談JavaScript前端開發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    淺談JavaScript前端開發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    以AngularJS為代表的MVVM結(jié)構(gòu)框架或庫這兩年來在前端界真是火到不行,大有對抗傳統(tǒng)jQuery綁定思想的趨勢,這里我們結(jié)合傳統(tǒng)的MVC結(jié)構(gòu),來淺談JavaScript前端開發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)
    2016-06-06
  • ThinkJS中如何使用MongoDB的CURD操作

    ThinkJS中如何使用MongoDB的CURD操作

    最近因為心血來潮想要試試thinkJS操作mongoDB,去官方文檔看了看,默認是只給了mysql的配置,源代碼也是沒有配置mongo的,只有一個官方案例,無奈只能自己學(xué)習(xí)了,下面是自己的一些學(xué)習(xí)總結(jié),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • JS日程管理插件FullCalendar中文說明文檔

    JS日程管理插件FullCalendar中文說明文檔

    JS日程管理插件FullCalendar提供了豐富的屬性設(shè)置和方法調(diào)用,開發(fā)者可以根據(jù)FullCalendar提供的API快速完成一個日歷日程的開發(fā),本文將FullCalendar的常用屬性和方法、回調(diào)函數(shù)等整理成中文文檔,以供參閱。
    2017-02-02
  • JavaScript庫omit源碼解析

    JavaScript庫omit源碼解析

    這篇文章主要為大家介紹了JavaScript庫omit源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Highcharts學(xué)習(xí)之坐標軸

    Highcharts學(xué)習(xí)之坐標軸

    今天講交互圖表Highcharts的坐標軸,我們將對Highcharts圖表的坐標軸組成、坐標軸類型等進行詳細系統(tǒng)講解。下面一起來看看。
    2016-08-08

最新評論