最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Three.js繪制酷炫的三角形

 更新時間:2022年12月01日 10:33:53   作者:隨便起一個名字吧  
這篇文章主要為大家詳細(xì)介紹了如何利用Three.js中的BufferGeometry繪制酷炫的三角形,文中的示例代碼講解詳細(xì),感興趣的可以嘗試一下

在前一章中,我們通過 BufferGeometry 創(chuàng)建了一個正方形,本節(jié)我們利用 BufferGeometry 打造一簇酷炫的三角形,最終的效果如下圖所示:

從效果圖中可以發(fā)現(xiàn),每一個三角形的位置、大小、顏色都是隨機的。

// 共有50個三角形
for (let i = 0; i < 50; i++) {
    // 每一個三角形,需要三個頂點,每個頂點需要3個值
    const geometry = new THREE.BufferGeometry();
    const vertices = new Float32Array(9);
    for (let j = 0; j < 9; j++) {
        // 頂點的位置在 -5 ~ 5 之間
        vertices[j] = Math.random() * 10 - 5;
    }

    geometry.setAttribute("position", new THREE.BufferAttribute(vertices, 3));

    const color = new THREE.Color(Math.random(), Math.random(), Math.random());

    const material = new THREE.MeshBasicMaterial({
        color,
    });

    const mesh = new THREE.Mesh(geometry, material);

    scene.add(mesh);
}

代碼并不復(fù)雜,創(chuàng)建50個三角形,每個三角形有三個頂點,每個頂點由 x 、y、z 三個值組成,所以 Float32Array 中需要存儲9個值,而每個值都在 -5 ~ 5 之間。實現(xiàn)后的效果圖如下所示:

最后我們?yōu)?MeshBasicMaterial 添加一下透明效果即可,如文檔所示,我們不僅需要設(shè)置 opacity,還需要將材質(zhì)的 transparent 設(shè)置成 true。

所以我們將 material 的創(chuàng)建改成下述代碼:

const material = new THREE.MeshBasicMaterial({
    color,
    transparent: true,
    opacity: 0.5,
});

至此,我們的酷炫的一簇三角形已經(jīng)完成,但是仍然存在一些問題——瀏覽器尺寸變化時畫面并不會自適應(yīng),下面我們就來解決這個問題。

首先我們要監(jiān)聽 windowresize 事件,并在其中更新畫布的大小

// 監(jiān)聽畫面變化,更新渲染渲染畫面
window.addEventListener("resize", () => {
    // 更新渲染器
    renderer.setSize(window.innerWidth, window.innerHeight);
})

但是運行后會發(fā)現(xiàn),雖然畫布大小發(fā)生了變化,但同時繪制的圖形也被壓縮了

我們要更新攝像頭的寬高比,同時,我們還需要調(diào)用 updateProjectionMatrix() 方法用于更新攝像機投影矩陣。在 resize 事件中繼續(xù)添加下述代碼:

// 更新攝像頭
camera.aspect = window.innerWidth / window.innerHeight;
// 更新攝像機的投影矩陣,在任何參數(shù)被改變以后必須被調(diào)用。
camera.updateProjectionMatrix();

如此便完成了我們的訴求,當(dāng)瀏覽器尺寸發(fā)生變化時,渲染的畫面也隨之更新。

到此這篇關(guān)于利用Three.js繪制酷炫的三角形的文章就介紹到這了,更多相關(guān)Three.js繪制三角形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序如何獲取用戶手機號

    微信小程序如何獲取用戶手機號

    這篇文章主要為大家詳細(xì)介紹了微信小程序如何獲取用戶手機號,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Linux下使用jq友好的打印JSON技巧分享

    Linux下使用jq友好的打印JSON技巧分享

    本文主要給大家介紹通過一個叫jq的小工具,非常的實用,給大家參考下
    2014-11-11
  • JavaScript六種常見的繼承方法分享

    JavaScript六種常見的繼承方法分享

    繼承是面向?qū)ο缶幊讨械囊粋€重要概念,它允許一個對象(子類或派生類)獲取另一個對象(父類或基類)的屬性和方法,在 JavaScript 中,有多種方式可以實現(xiàn)繼承,本文將給大家介紹六種常見的JavaScript繼承方法,需要的朋友可以參考下
    2023-09-09
  • JS中Date的一些常用方法小結(jié)

    JS中Date的一些常用方法小結(jié)

    Data()日期對象是一個構(gòu)造函數(shù),必須使用new來調(diào)用創(chuàng)建我們的日期對象,下面這篇文章主要給大家介紹了關(guān)于JS中Date的一些常用方法,需要的朋友可以參考下
    2022-10-10
  • Js callBack 返回前一頁的js方法

    Js callBack 返回前一頁的js方法

    通過 window.opener 實現(xiàn)。關(guān)于這個對象的用法請查閱相關(guān)資料。
    2008-11-11
  • JS簡單循環(huán)遍歷json數(shù)組的方法

    JS簡單循環(huán)遍歷json數(shù)組的方法

    這篇文章主要介紹了JS簡單循環(huán)遍歷json數(shù)組的方法,結(jié)合實例形式簡單分析了JavaScript循環(huán)遍歷json數(shù)組的方法,并提供了jQuery遍歷json的方法,需要的朋友可以參考下
    2016-04-04
  • JavaScript SHA512&SHA256加密算法詳解

    JavaScript SHA512&SHA256加密算法詳解

    本文給大家分享的是javascript版的SHA512&SHA256加密算法的代碼,以及用法,有需要的小伙伴可以參考下。
    2015-08-08
  • JS數(shù)組方法concat()用法實例分析

    JS數(shù)組方法concat()用法實例分析

    這篇文章主要介紹了JS數(shù)組方法concat()用法,結(jié)合實例形式分析了JS數(shù)組concat()方法具體功能、用法及操作注意事項,需要的朋友可以參考下
    2020-01-01
  • 詳解微信小程序的 request 封裝示例

    詳解微信小程序的 request 封裝示例

    這篇文章主要介紹了詳解微信小程序的 request 封裝示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • JS查找數(shù)組中重復(fù)元素的方法詳解

    JS查找數(shù)組中重復(fù)元素的方法詳解

    這篇文章主要介紹了JS查找數(shù)組中重復(fù)元素的方法,結(jié)合具體實例形式對比分析了javascript針對數(shù)組的遍歷、判斷、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評論

泌阳县| 祁门县| 蓬莱市| 冷水江市| 兴业县| 宁城县| 米易县| 镇宁| 神农架林区| 江口县| 宁国市| 新晃| 安宁市| 平舆县| 扶风县| 静乐县| 宿迁市| 乾安县| 廊坊市| 太仓市| 蒙自县| 房产| 崇礼县| 体育| 达州市| 梁河县| 华安县| 五常市| 社会| 台湾省| 天等县| 丰县| 巴林右旗| 吉隆县| 金门县| 栾川县| 清苑县| 雅安市| 浙江省| 韩城市| 勐海县|