【ThreeJS 01】了解 WebGL 以及 ThreeJS

文章目录

  • 01 介绍
  • 02 什么是 WebGL,为什么用 ThreeJS
    • 什么是 WebGL?
    • Three.js 来帮忙


01 介绍

这个课程的主讲人是 Bruno Simon, 这是他的作品集

在这里插入图片描述

他还做了一些有趣的项目:

  • https://my-room-in-3d.vercel.app
    在这里插入图片描述

  • https://organic-sphere.vercel.app

  • https://experiment-holographic-terrain.vercel.app

  • https://experiment-woodkid-volcano-robot.vercel.app

  • https://infinite-world.vercel.app/

  • https://awwwards-2022-workshop.vercel.app


02 什么是 WebGL,为什么用 ThreeJS

什么是 WebGL?

WebGL 是一种 JavaScript API,可以以惊人的速度在画布上渲染三角形。它与大多数现代浏览器兼容,并且速度很快,因为它使用了访问者的图形处理单元 (GPU)。

WebGL 不仅可以绘制三角形,还可以用于创建 2D 体验,但出于课程的目的,我们将重点介绍使用三角形的 3D 体验。

GPU 可以进行数千次并行计算。想象一下,您要渲染一个 3D 模型,而这个模型由 1000 个三角形组成——仔细想想,这个数字并不算多。每个三角形包含 3 个点。当我们想要渲染模型时,GPU 必须计算这 3000 个点的位置。由于 GPU 可以进行并行计算,因此它将一次性处理所有三角形点。

一旦模型的点被正确放置,GPU 就需要绘制这些三角形的每个可见像素。同样,GPU 将一次性处理成千上万个像素的计算。

放置点和绘制像素的指令写在我们所谓的着色器中。让我告诉你,着色器很难掌握。我们还需要为这些着色器提供数据。例如:如何根据模型变换和相机的属性放置点。这些被称为矩阵。我们还需要提供数据来帮助着色像素。如果有光并且三角形面向该光,它应该比三角形没有面向光时更亮。

这就是原生 WebGL 如此困难的原因。在画布上绘制一个三角形至少需要 100 行代码。如果您想添加透视、灯光、模型并在这种情况下为所有内容制作动画,那就祝您好运了。

但原生 WebGL 的优势在于其存在于较低级别,非常接近 GPU。这可以实现出色的优化和更多控制。

Three.js 来帮忙

Three.js 是一个遵循 MIT 许可的 JavaScript 库,可在 WebGL 上运行。该库的目标是大大简化处理我们刚才提到的所有内容的过程。您只需几行代码即可获得动画 3D 场景,而且您无需提供着色器和矩阵。

由于 Three.js 位于 WebGL 之上,我们仍然可以以某些方式与其交互。在某个时候,我们将开始编写着色器并创建矩阵。

Ricardo Cabello,又名 Mr.doob(网站、Twitter),是 Three.js 的开发者。他仍在继续开发,但现在他得到了一个大型社区的帮助。您可以在此处查看贡献者列表:https 😕/github.com/mrdoob/three.js/graphs/contributors

目前,该库每月都会更新一次,您可以在此处的发布页面中查看更改的内容:https: //github.com/mrdoob/three.js/releases

您可以在网站主页上发现许多使用 Three.js 的优秀项目:https://threejs.org/

还有一些我们会经常使用的维护良好的文档:https 😕/threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene

您可以在此处找到数百个带有公共代码的示例: https: //threejs.org/examples/#webgl_tonemapping

如果您想关注更新并发现出色的项目,我建议您关注 Mr.doob 和 Three.js 推特账户:

https://twitter.com/mrdoob

https://twitter.com/threejs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Dubbo+zookeeper 急速入门案例

项目目录结构&#xff1a; 第一步&#xff1a;创建一个SpringBoot项目&#xff0c;这里选择Maven项目或者Spring Initializer都可以&#xff0c;这里创建了一个Maven项目&#xff08;SpringBoot-Dubbo&#xff09;&#xff0c;pom.xml文件如下&#xff1a; <?xml versio…

Unity Shader Graph 2D - 使用DeepSeek协助绘制一个爱心

最近十分流行使用DeepSeek AI&#xff0c;于是想尝试着能不能用DeepSeek来帮助我实现一些Shader Graph效果&#xff0c;正好之前看到了爱心图形&#xff0c;就说干脆用DeepSeek来告诉我怎么使用Shader Graph来绘制一个爱心。 问DeepSeek怎么绘制爱心 首先打开DeepSeek的网站&a…

如何正确配置您的WordPress邮件设置

在运营WordPress网站时&#xff0c;确保邮件能够顺利发送和接收是非常重要的。无论是通知、确认邮件&#xff0c;还是营销邮件&#xff0c;邮件的可靠性会直接影响用户体验。许多站长常常会遇到邮件无法送达、被标记为垃圾邮件等问题。要解决这些问题&#xff0c;使用SMTP是一个…

MySQL调优01 - 单库调优思想

单库调优 文章目录 单库调优一&#xff1a;系统中性能优化的核心思维二&#xff1a;MySQL性能优化实践1&#xff1a;连接层的优化1.1&#xff1a;连接数是越大越好吗&#xff1f;1.2&#xff1a;偶发高峰类业务的连接数配置1.3&#xff1a;分库分表情况下的连接数配置1.4&#…

OLED显示屏使用学习——(二)

四、OLED 原理图设计注意事项 4.1 SPI 接口设计 在 SPI 接口中需保证 BS0,BS1,BS2 全为 0&#xff0c;也不是接地&#xff1b;所以在接口配置电阻中 4.2 IIC 接口设计 在 iic 接口中需要将 BS1 配置为 1&#xff0c;BS0 为 0&#xff1b;所以 R1,R4 焊接&#xff0c;R2&am…

string类OJ练习题

目录 文章目录 前言 一、反转字符串 二、反转字符串 II 三、反转字符串中的单词 III 四、验证一个字符串是否是回文 五、字符串相加&#xff08;大数加法&#xff09; 六、字符串相乘&#xff08;大数乘法&#xff09; 七、把字符串转化为整数&#xff08;atoi&#xff09; 总结…

6-图像金字塔与轮廓检测

文章目录 6.图像金字塔与轮廓检测(1)图像金字塔定义(2)金字塔制作方法(3)轮廓检测方法(4)轮廓特征与近似(5)模板匹配方法6.图像金字塔与轮廓检测 (1)图像金字塔定义 高斯金字塔拉普拉斯金字塔 高斯金字塔:向下采样方法(缩小) 高斯金字塔:向上采样方法(放大)…

javaEE-6.网络原理-http

目录 什么是http? http的工作原理&#xff1a; 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行&#xff1a; 4.正文&#xff08;body&#xff09; HTTP响应数据 1.首行&#xff1a;​编辑 2.响应头 3.空行&#xff1a; 4.响应正文…

网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)

防火墙安全策略课堂实验报告 一、拓扑 本实验拓扑包含预启动设备、DMZ区域&#xff08;含OA Server和Web Server&#xff09;、防火墙&#xff08;FW1&#xff09;、Trust区域&#xff08;含办公区PC和生产区PC&#xff09;等。具体IP地址及连接关系如给定拓扑图所示&#xf…

开源项目介绍-词云生成

开源词云项目是一个利用开源技术生成和展示词云的工具或框架&#xff0c;广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点&#xff1a; Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目&#xff0c;旨在通过扩展 wordclou…

使用DeepSeek的技巧笔记

来源&#xff1a;新年逼自己一把&#xff0c;学会使用DeepSeek R1_哔哩哔哩_bilibili 前言 对于DeepSeek而言&#xff0c;我们不再需要那么多的提示词技巧&#xff0c;但还是要有两个注意点&#xff1a;你需要理解大语言模型的工作原理与局限,这能帮助你更好的知道AI可完成任务…

redis 运维指南

一、Redis 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的内存数据存储系统&#xff0c;使用 ANSI C 语言编写&#xff0c;支持网络通信&#xff0c;可基于内存进行数据存储以实现高效读写&#xff0c;同时也提供了持久化功能将数据保存到磁盘。它以…

Windows本地部署DeepSeek-R1大模型并使用web界面远程交互

文章目录 前言1. 安装Ollama2. 安装DeepSeek-r1模型3. 安装图形化界面3.1 Windows系统安装Docker3.2 Docker部署Open WebUI3.3 添加Deepseek模型 4. 安装内网穿透工具5. 配置固定公网地址 前言 最近爆火的国产AI大模型Deepseek详细大家都不陌生&#xff0c;不过除了在手机上安…

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个…

【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案

海关在对进口货物进行查验时,需要核对报关单上的各项信息。对报关单 PDF 批量指定区域识别改名后,海关工作人员可以更高效地从文件名中获取关键信息,如货物来源地、申报价值等。例如文件名 “[原产国]_[申报价值].pdf”,有助于海关快速筛选重点查验对象,提高查验效率和监管…

用python实现进度条

前言 在Python中&#xff0c;可以使用多种方式实现进度条。以下是几种常见的进度条格式的实现方法&#xff1a; 1. 使用 tqdm 库 tqdm 是一个非常流行的库&#xff0c;可以轻松地在循环中显示进度条。 from tqdm import tqdm import time# 示例&#xff1a;简单的进度条 fo…

每日一题洛谷P5721 【深基4.例6】数字直角三角形c++

#include<iostream> using namespace std; int main() {int n;cin >> n;int t 1;for (int i 0; i < n; i) {for (int j 0; j < n - i; j) {printf("%02d",t);t;}cout << endl;}return 0; }

Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)

一、进程Process 拥有自己独立的堆和栈&#xff0c;既不共享堆&#xff0c;也不共享栈&#xff0c;进程由操作系统调度&#xff1b;进程切换需要的资源很最大&#xff0c;效率低。 对于操作系统来说&#xff0c;一个任务就是一个进程&#xff08;Process&#xff09;&#xff…

Python 梯度下降法(六):Nadam Optimize

文章目录 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nadam Optimize一、数学原理1.1 介绍1.2 符号定义1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nad…

《Kettle保姆级教学-界面介绍》

目录 一、Kettle介绍二、界面介绍1.界面构成2、菜单栏详细介绍2.1 【文件F】2.2 【编辑】2.3 【视图】2.4 【执行】2.5 【工具】2.6 【帮助】 3、转换界面介绍4、作业界面介绍5、执行结果 一、Kettle介绍 Kettle 是一个开源的 ETL&#xff08;Extract, Transform, Load&#x…