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

 更新时间:2022年12月01日 10:33:53   作者:随便起一个名字吧  
这篇文章主要为大家详细介绍了如何利用Three.js中的BufferGeometry绘制酷炫的三角形,文中的示例代码讲解详细,感兴趣的可以尝试一下

在前一章中,我们通过 BufferGeometry 创建了一个正方形,本节我们利用 BufferGeometry 打造一簇酷炫的三角形,最终的效果如下图所示:

从效果图中可以发现,每一个三角形的位置、大小、颜色都是随机的。

// 共有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);
}

代码并不复杂,创建50个三角形,每个三角形有三个顶点,每个顶点由 x 、y、z 三个值组成,所以 Float32Array 中需要存储9个值,而每个值都在 -5 ~ 5 之间。实现后的效果图如下所示:

最后我们为 MeshBasicMaterial 添加一下透明效果即可,如文档所示,我们不仅需要设置 opacity,还需要将材质的 transparent 设置成 true。

所以我们将 material 的创建改成下述代码:

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

至此,我们的酷炫的一簇三角形已经完成,但是仍然存在一些问题——浏览器尺寸变化时画面并不会自适应,下面我们就来解决这个问题。

首先我们要监听 windowresize 事件,并在其中更新画布的大小

// 监听画面变化,更新渲染渲染画面
window.addEventListener("resize", () => {
    // 更新渲染器
    renderer.setSize(window.innerWidth, window.innerHeight);
})

但是运行后会发现,虽然画布大小发生了变化,但同时绘制的图形也被压缩了

我们要更新摄像头的宽高比,同时,我们还需要调用 updateProjectionMatrix() 方法用于更新摄像机投影矩阵。在 resize 事件中继续添加下述代码:

// 更新摄像头
camera.aspect = window.innerWidth / window.innerHeight;
// 更新摄像机的投影矩阵,在任何参数被改变以后必须被调用。
camera.updateProjectionMatrix();

如此便完成了我们的诉求,当浏览器尺寸发生变化时,渲染的画面也随之更新。

到此这篇关于利用Three.js绘制酷炫的三角形的文章就介绍到这了,更多相关Three.js绘制三角形内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序如何获取用户手机号

    微信小程序如何获取用户手机号

    这篇文章主要为大家详细介绍了微信小程序如何获取用户手机号,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Linux下使用jq友好的打印JSON技巧分享

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

    本文主要给大家介绍通过一个叫jq的小工具,非常的实用,给大家参考下
    2014-11-11
  • JavaScript六种常见的继承方法分享

    JavaScript六种常见的继承方法分享

    继承是面向对象编程中的一个重要概念,它允许一个对象(子类或派生类)获取另一个对象(父类或基类)的属性和方法,在 JavaScript 中,有多种方式可以实现继承,本文将给大家介绍六种常见的JavaScript继承方法,需要的朋友可以参考下
    2023-09-09
  • JS中Date的一些常用方法小结

    JS中Date的一些常用方法小结

    Data()日期对象是一个构造函数,必须使用new来调用创建我们的日期对象,下面这篇文章主要给大家介绍了关于JS中Date的一些常用方法,需要的朋友可以参考下
    2022-10-10
  • Js callBack 返回前一页的js方法

    Js callBack 返回前一页的js方法

    通过 window.opener 实现。关于这个对象的用法请查阅相关资料。
    2008-11-11
  • JS简单循环遍历json数组的方法

    JS简单循环遍历json数组的方法

    这篇文章主要介绍了JS简单循环遍历json数组的方法,结合实例形式简单分析了JavaScript循环遍历json数组的方法,并提供了jQuery遍历json的方法,需要的朋友可以参考下
    2016-04-04
  • JavaScript SHA512&SHA256加密算法详解

    JavaScript SHA512&SHA256加密算法详解

    本文给大家分享的是javascript版的SHA512&SHA256加密算法的代码,以及用法,有需要的小伙伴可以参考下。
    2015-08-08
  • JS数组方法concat()用法实例分析

    JS数组方法concat()用法实例分析

    这篇文章主要介绍了JS数组方法concat()用法,结合实例形式分析了JS数组concat()方法具体功能、用法及操作注意事项,需要的朋友可以参考下
    2020-01-01
  • 详解微信小程序的 request 封装示例

    详解微信小程序的 request 封装示例

    这篇文章主要介绍了详解微信小程序的 request 封装示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • JS查找数组中重复元素的方法详解

    JS查找数组中重复元素的方法详解

    这篇文章主要介绍了JS查找数组中重复元素的方法,结合具体实例形式对比分析了javascript针对数组的遍历、判断、排序等相关操作技巧,需要的朋友可以参考下
    2017-06-06

最新评论