glsl相关内容

深度作为 GLSL 中相机平面的距离

我有一对 GLSL 着色器,可以为我提供场景中对象的深度图.我现在得到的是每个像素到相机的距离.我需要的是获得从像素到相机平面的距离.让我用一个小图来说明 * |--*/|/|C-----* C-----*\ |\ |* |--* 3 个星号是像素,C 是相机.星号的线是“深度".在第一种情况下,我得到了从像素到相机的距离.第二,我希望得到每个像素到平面的距离. 一定有办法通过使用一些 ..
发布时间:2021-11-25 00:53:25 C#

如何计算切线和副法线?

在 OpenGL 着色语言 (GLSL) 中谈论凹凸贴图、镜面高光和这些东西 我有: 一组顶点(例如 {0.2,0.5,0.1, 0.2,0.4,0.5, ...}) 法线数组(例如 {0.0,0.0,1.0, 0.0,1.0,0.0, ...}) 点光源在世界空间中的位置(例如 {0.0,1.0,-5.0}) 观看者在世界空间中的位置(例如 {0.0,0.0,0.0})(假设观 ..
发布时间:2021-11-25 00:36:36 C#

在 OpenGL 片段着色器中绘制三角形

我正在尝试使用 OpenGL 片段着色器绘制一个三角形. 我成功地画了一个圆,但我在处理方程/逻辑或绘制三角形的代码时遇到了问题. draw_triangle(vec2 v1, vec2 v2, vec2 v3) 这是片段着色器: #version 330 核心出 vec4 frag_color;void draw_circle(vec2 shift_val,整数半径,整数颜色){ve ..
发布时间:2021-11-24 22:28:54 C#

什么样的 2D 游戏着色器(即超级马里奥)

我一直在尝试弄清楚如何将 OpenGL ES 2.0 用于 2D.到目前为止,我认为我可以处理大多数事情.但我还没有想出的一件事是着色器要做什么? 我知道您在着色器中设置了相机/视图和灯光,但我不想要阴影或任何类型的照明迹象.基本上我只想在屏幕上移动精灵,让精灵看起来和我在 Photoshop 中绘制它们时完全一样. 有没有人有一个可以做到这一点的着色器的例子?或者可能是一篇讨论这个的 ..
发布时间:2021-11-24 22:21:18 C#

如何将点光源转换为椭圆形/椭圆形?

我希望通过具有可以具有不同 x 和 y 值的 vec2 半径将我当前的圆形光变成椭圆.有没有办法根据我在片段着色器中的当前代码来做到这一点? uniform struct Light{vec4 颜色;vec3 位置;vec2 半径;浮动强度;} allLights[MAX_LIGHTS];vec4calculateLight(Light light){vec2 lightDir = fragme ..
发布时间:2021-11-24 22:14:15 C/C++开发

如何在着色器中制作波浪变形效果?

我想制作这样的波浪变形效果: 但我只能创建正常的正弦波. 这是我的片段着色器: precision mediump float;不同的 vec2 v_texCoord;统一的 sampler2D s_baseMap;vec2 正弦波(vec2 p){浮动圆周率 = 3.14159;浮动 A = 0.15;浮动 w = 10.0 * pi;浮动 t = 30.0*pi/180.0;浮动 ..
发布时间:2021-11-24 21:23:05 C#

如何在 GLSL 中实现 2D raycasting 光效

这最初是由@sydd 此处提出的.我对此很好奇,所以我尝试对其进行编码,但在我回答之前它已被关闭/删除,所以它在这里. 问题:如何重现/实现这个 2DGLSL 中的光线投射照明效果? 效果本身从鼠标位置向各个方向投射光线,累积影响像素强度的背景贴图 alpha 和颜色. 所以输入应该是: 鼠标位置 背景 RGBA 贴图纹理 解决方案 背景图 好的,我创建 ..
发布时间:2021-11-24 21:11:11 C#

索引表达式必须是常量 - WebGL/GLSL 错误

我在使用非常量 int 作为索引访问片段着色器中的数组时遇到问题.我已经删除了公式,因为无论如何它在这里没有多大意义,但我的代码旨在根据当前像素计算 tileID 并使用它来确定颜色. 这是我的代码: int tileID = ;vec3 colorTest;int arrayTest[1024];for (int x = 0; x 显然 GLSL 不喜欢这个,我得到了错误: ' ..
发布时间:2021-11-18 05:11:27 其他开发

创建一个 GLSL 制服数组?

我想放弃 OpenGL 的灯光并制作我自己的灯光.我希望我的着色器允许使用可变数量的灯光. 我们可以在 GLSL 着色器中声明一个统一的数组吗?如果是这样,我们将如何设置这些制服的值? 解决方案 是的,这是可能的.您声明的统一数组类似于您在 C 中的做法,例如 uniform float v[10]; 然后您可以使用 glUniform{1,2,3,4}{f,i}v 设置它们的 ..
发布时间:2021-11-18 03:18:15 其他开发

一次更新多个着色器程序中的统一变量

我有几个带有统一变量的着色器,它们在所有着色器中都具有相同的名称.在所有着色器中一次更新具有相同名称的制服的最佳方法是什么?我考虑了以下方法: 1) 只需为每个程序存储该制服的位置,并在程序被指定为“已使用"程序 (glUseProgram) 后立即更新它. 缺点:每次glUseProgram 调用后,所有“共享"统一变量都会更新.此外,如果某个程序在当前帧中不是第一次使用,则所有 g ..
发布时间:2021-11-17 02:27:05 其他开发

GLSL 多着色器程序 VS 制服切换

我正在研究着色器管理器架构,我有几个问题要问更高级的人.我目前的选择反对以下两种设计: 1.每个材质着色器程序 => 为程序中使用的每种材质创建一个着色器程序. 潜在的缺点: 考虑到每个对象可能都有自己的材质,它涉及到大量的 glUseProgram 调用. 暗示创建了许多着色器程序对象. 比 #2 更复杂的架构. 优点: 可以为材质中使用的每个“选项"专门生成 ..
发布时间:2021-11-17 01:58:08 其他开发

如何将点光源转换为椭圆形/椭圆形?

我希望通过具有可以具有不同 x 和 y 值的 vec2 半径将我当前的圆形光变成椭圆.有没有办法根据我在片段着色器中的当前代码来做到这一点? uniform struct Light{vec4 颜色;vec3 位置;vec2 半径;浮动强度;} allLights[MAX_LIGHTS];vec4calculateLight(Light light){vec2 lightDir = fragme ..
发布时间:2021-10-26 16:09:46 C/C++开发

Webpack 和 GLSL 着色器

我在 Sage Wordpress 网站上工作,想通过 Three.js 库实现一些 WebGl.像这样 代码丢弃示例图像悬停 我一直遇到 GLSL 文件的问题.我尝试了几个不同的加载器模块.但我不断收到相同的错误.有其他人遇到过这种情况吗? 错误 无法编译,有 4 个错误 下午 5:57:14./resources/assets/scripts/routes/extras/shader ..
发布时间:2021-09-23 18:53:15 其他开发

如何在 WebGL 中创建合适的圆角矩形?

我试图实现 这个问题 的答案,但似乎有有点问题.如果您打开他们的 ShaderToys 并尝试更改边框半径,则圆角矩形的大小(宽度和高度)也会发生变化. 我正在寻找一种解决方案,例如 this shadertoy,其中更改边框半径不会't 改变形状的大小.不幸的是,在这个着色器玩具中,它是一个填充的圆角矩形. 是否有可能有一个未填充的圆角矩形(因此,只有边框),但也有它,如果您更改边框 ..
发布时间:2021-09-23 18:37:03 其他开发

每个顶点 ID 而不是顶点索引?

我试图在 Vulkan 中渲染一堆小轴对齐 (2d) 四边形,而不是使用非索引绘制调用,我想尝试最小化传输开销并使用以下方案的索引绘制: #version 450vec2 inTopleft 中的布局(位置 = 0);vec2 inExtent 中的布局(位置 = 1);vec2 位置[6] = vec2[](vec2(0, 0),vec2(0, 1),vec2(1, 0),vec2(0, 1) ..
发布时间:2021-09-20 20:33:27 其他开发

Three.js:随着相机靠近点而增加点的大小

我正在处理一个场景(在 bl.ocks.org 上比在下面更容易看到) 在 Three.js 中,使用点作为渲染原语会大大受益,因为有大约 200,000 个四边形来表示,用点来表示这些四边形需要的顶点减少 4 倍,这意味着更少的绘制调用和更高的 FPS. 现在我试图在相机靠近给定点时使点变大.如果您在下面的场景中直接放大,您应该会看到效果很好.但是,如果向左或向右拖动相机,点会逐渐变小,尽 ..
发布时间:2021-09-07 19:11:39 前端开发

缩放视频纹理与图像纹理混合

我尝试过搜索,这是一件微不足道的事情,但无法弄清楚,我看了很多答案,但从未用完整的工作示例回答我需要的内容. 我正在尝试在片段着色器中缩放视频纹理,并在背景中使用图像纹理.所以不能变换顶点.视频纹理需要调整为 200 x 200 并放置在顶角或底角. 它最终将使用 MediaStream 作为网络摄像头,具有透明背景效果.它与图像纹理顶部的 bodypix 一起使用,使用混合着色器,但 ..
发布时间:2021-09-06 19:52:48 前端开发

Open GL ES 3.1 计算着色器的最小工作示例

我想使用 Open GL ES 进行通用计算. 所以到目前为止我理解的是,我需要创建一个 SSBO 并将我的数据传输到那里,将缓冲区绑定到着色器中的特殊点,运行着色器并取回数据. 到目前为止我有 3 个问题: 代码无法编译:错误:未定义对“glDispatchCompute"的引用.我已经包含了 GLES3/gl31.h,功能就在那里.open gl es 的其他函数导入正确; ..
发布时间:2021-07-23 20:03:26 移动开发