three.js 中ShaderChunk的, common.glsl 介绍

1. three.js 中ShaderChunk的, common.glsl 介绍

在three.js中,我们可以编写底层的shader代码,是通过 THREE.ShaderMaterial 来进行的。
但是three.js他也通过了一些 shader 代码片段,哎我们可以通过引入这些 shader代码片段,在自己的 THREE.ShaderMaterial中哈哈哈

现在我们讲一下,这个common.glsl 文件是干嘛的。
common.glsl 文件他主要是存放了一些常见变量,函数的文件。
例如

#define PI 3.141592653589793
#define PI2 6.283185307179586
#define PI_HALF 1.5707963267948966
#define RECIPROCAL_PI 0.3183098861837907
#define RECIPROCAL_PI2 0.15915494309189535
#define EPSILON 1e-6

从这可以看出来,是什么,他声明了 PI, PI2, PI_HALF, RECIPROCAL_PI,…
这个变量的含义就是,圆周率,2Π,1/2 Π …

还有,他是写了一个随机函数

highp float rand( const in vec2 uv ) {const highp float a = 12.9898, b = 78.233, c = 43758.5453;highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );return fract( sin( sn ) * c );}

入射光的结构体

struct IncidentLight {vec3 color; // 入射光的颜色vec3 direction; // bool visible;
};
// 入射光的结构体

矩阵的转置

mat3 transposeMat3( const in mat3 m ) {mat3 tmp;tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );return tmp;}

将 rgb 的颜色转换成亮度

float luminance( const in vec3 rgb ) {// assumes rgb is in linear color space with sRGB primaries and D65 white point// 假设rgb在具有sRGB原色和D65白点的线性色彩空间中const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );return dot( weights, rgb );}

判断矩阵是不是一个透视投影矩阵

bool isPerspectiveMatrix( mat4 m ) {return m[ 2 ][ 3 ] == - 1.0;}

将球体 三维坐标 映射到 二维平面上

vec2 equirectUv( in vec3 dir ) {// 在glsl中,equirectUv的作用是将一个dir映射到一个二维纹理坐标上// dir is assumed to be unit lengthfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;return vec2( u, v );}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意: 思路:观察到操作数很小,最值问题操作数很容易想到dp,用表示第个元素,操作了次的最小值总和,转移的时候枚举连续操作了几次即可,而连续操作了几次即将全部变成…

陈随易:论技术思维和产品思维

大家好,我是不被定义的前端之虎陈随易。 我的个人网站是:https://chensuiyi.me,欢迎大家眼熟我。 写这篇文章呢,源于一次群聊。 群友有一个产品,其中涉及到免费用户和付费用户对 pdf 的查看权限问题,使用…

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

gitee本地项目上传

1.先生成SSH密钥 ssh-keygen -t rsa -C "trueelegance163.com" 2.gitee配置公钥,设置对应的公钥名称比如:localtest; Git 全局设置:若刚安装完Git,需要进行Git的配置【若已配置完成,此步骤可以跳过】 git config --global user…

SQL注入基础-4

GetSHELL 一、文件读写注入 1、原理:利用文件读写权限进行注入,可以写入一句话木马,也可以读取系统文件的敏感信息。 2、要求和条件:用户最高权限(可以尝试更改secure_file_priv)和网站绝对路径 3、网站的绝对路径 (1)常见路…

大语言模型从Scaling Laws到MoE

1、摩尔定律和伸缩法则 摩尔定律(Moores law)是由英特尔(Intel)创始人之一戈登摩尔提出的。其内容为:集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍;而经常被引用的“18个月”&#xf…

CSS精灵图、字体图标、HTML5新增属性、界面样式和网站 favicon 图标

精灵图 为什么要使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度,因此,为了有效地减少服务…

扫雷实现详解【递归展开+首次必展开+标记雷+取消标记雷】

扫雷 一.扫雷设计思路二.扫雷代码逐步实现1.创建游戏菜单2.初始化棋盘3.打印棋盘4.随机布置雷5.统计周围雷的个数6.递归展开棋盘7.标记雷8.删除雷的标记9.保证第一次排雷的安全性棋盘必定展开10.排查雷11.判断输赢 三.扫雷总代码四.截图 一.扫雷设计思路 1.创建游戏菜单。  2.…

Leetcode—1056. 易混淆数【简单】Plus

2024每日刷题(126) Leetcode—1056. 易混淆数 💩山实现代码 class Solution { public:bool confusingNumber(int n) {int arr[10] {0};int notNum 0;int arr2[12] {0};int size 0;while(n) {int x n % 10;arr[x] 1;arr2[size] x;if(…

力扣爆刷第132天之动态规划五连刷(子序列问题)

力扣爆刷第132天之动态规划五连刷(子序列问题) 文章目录 力扣爆刷第132天之动态规划五连刷(子序列问题)总结:一、1035. 不相交的线二、53. 最大子数组和三、392. 判断子序列四、115. 不同的子序列五、583. 两个字符串的…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架,详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架,专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口,可以用于构建神经网络模型,并…

【Java基础】Maven的生命周期(clean+site+default)

1. 前言 在 Maven 出现之前,项目构建的生命周期就已经存在,开发人员每天都在对项目进行清理,编译,测试及部署,但由于没有统一的规范,不同公司甚至不同项目之间的构建的方式都不尽相同。 Maven 从大量项目…

Java Web网页设计(7)-网页查看

7.面我们讲最后一个操作 修改的操作 在讲修改之前 我们先讲一个知识点 表单调用的通常是doPost方法 超链接通常调用的是doGet方法 操作如何在同一个方法 (doGet中) 进行区分 type OrderDao orderDaonew OrderDao(); String typereq.getParameter("type"); …

如何学习 Unreal Engine

学习Unreal Engine(简称UE),尤其是最新的UE5,是一项复杂但值得的任务,因为它是游戏开发和实时3D内容创建的强大工具。以下是一些建议来帮助您开始学习Unreal Engine: 1. **了解基础知识**:在深…

nn.GRU层输出:state与output的关系

在 GRU(Gated Recurrent Unit)中,output 和 state 都是由 GRU 层的循环计算产生的,它们之间有直接的关系。state 实际上是 output 中最后一个时间步的隐藏状态。 GRU 的基本公式 GRU 的核心计算包括更新门(update gat…

Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml

<AR-PACKAGES><AR-PACKAGE><SHORT-NAME>bosch</SHORT-NAME><AR-PACKAGES>...</AR-PACKAGES>

c++中unrodered_map与unordered_set的基本使用

unordered_map 在C中&#xff0c;std::unordered_map 是一个无序关联容器&#xff0c;它包含可以重复的键-值对组合&#xff0c;但每个键在容器中必须是唯一的。与std::map不同&#xff0c;std::unordered_map不按照键的排序顺序存储元素&#xff0c;而是使用哈希表来存储元素…

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…

STM32解决空闲中断误触发问题.

在用串口传输大量数据时&#xff0c;发现空闲中断误触发 我是在做用串口将大量数据传入MCU这易操作时&#xff0c;发现一帧数据还没发完成&#xff0c;就进如来空闲中断&#xff0c;导致数据不完整&#xff0c;有点数据混乱了。 参考别的博主说法&#xff0c;在1个或1.5个字节时…

将java项目上传到GitHub步骤

文章目录 GitHub 作用github如何修改默认分支为master手把手教你把项目上传github上github怎么删除仓库或项目执行到push时报错的解决办法github怎么修改仓库语言 GitHub 作用 GitHub 是一个存放软件代码的网站&#xff0c;主要用于软件开发者存储和管理其项目源代码&#xff…