glsl相关内容
我想要一份所有制服的清单 &着色器程序对象使用的属性.glGetAttribLocation() &glGetUniformLocation() 可用于将字符串映射到位置,但我真正想要的是字符串列表,而无需解析 glsl 代码. 注意:在 OpenGL 2.0 中 glGetObjectParameteriv() 被替换为 glGetProgramiv().枚举是 GL_ACTIVE_UNI
..
我有一对 GLSL 着色器,可以为我提供场景中对象的深度图.我现在得到的是每个像素到相机的距离.我需要的是获得从像素到相机平面的距离.让我用一个小图来说明 * |--*/|/|C-----* C-----*\ |\ |* |--* 3 个星号是像素,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})(假设观
..
我正在尝试使用 OpenGL 片段着色器绘制一个三角形. 我成功地画了一个圆,但我在处理方程/逻辑或绘制三角形的代码时遇到了问题. draw_triangle(vec2 v1, vec2 v2, vec2 v3) 这是片段着色器: #version 330 核心出 vec4 frag_color;void draw_circle(vec2 shift_val,整数半径,整数颜色){ve
..
我一直在尝试弄清楚如何将 OpenGL ES 2.0 用于 2D.到目前为止,我认为我可以处理大多数事情.但我还没有想出的一件事是着色器要做什么? 我知道您在着色器中设置了相机/视图和灯光,但我不想要阴影或任何类型的照明迹象.基本上我只想在屏幕上移动精灵,让精灵看起来和我在 Photoshop 中绘制它们时完全一样. 有没有人有一个可以做到这一点的着色器的例子?或者可能是一篇讨论这个的
..
我希望通过具有可以具有不同 x 和 y 值的 vec2 半径将我当前的圆形光变成椭圆.有没有办法根据我在片段着色器中的当前代码来做到这一点? uniform struct Light{vec4 颜色;vec3 位置;vec2 半径;浮动强度;} allLights[MAX_LIGHTS];vec4calculateLight(Light light){vec2 lightDir = fragme
..
我想制作这样的波浪变形效果: 但我只能创建正常的正弦波. 这是我的片段着色器: 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;浮动
..
这最初是由@sydd 此处提出的.我对此很好奇,所以我尝试对其进行编码,但在我回答之前它已被关闭/删除,所以它在这里. 问题:如何重现/实现这个 2DGLSL 中的光线投射照明效果? 效果本身从鼠标位置向各个方向投射光线,累积影响像素强度的背景贴图 alpha 和颜色. 所以输入应该是: 鼠标位置 背景 RGBA 贴图纹理 解决方案 背景图 好的,我创建
..
我在使用非常量 int 作为索引访问片段着色器中的数组时遇到问题.我已经删除了公式,因为无论如何它在这里没有多大意义,但我的代码旨在根据当前像素计算 tileID 并使用它来确定颜色. 这是我的代码: int tileID = ;vec3 colorTest;int arrayTest[1024];for (int x = 0; x 显然 GLSL 不喜欢这个,我得到了错误: '
..
我想放弃 OpenGL 的灯光并制作我自己的灯光.我希望我的着色器允许使用可变数量的灯光. 我们可以在 GLSL 着色器中声明一个统一的数组吗?如果是这样,我们将如何设置这些制服的值? 解决方案 是的,这是可能的.您声明的统一数组类似于您在 C 中的做法,例如 uniform float v[10]; 然后您可以使用 glUniform{1,2,3,4}{f,i}v 设置它们的
..
我有几个带有统一变量的着色器,它们在所有着色器中都具有相同的名称.在所有着色器中一次更新具有相同名称的制服的最佳方法是什么?我考虑了以下方法: 1) 只需为每个程序存储该制服的位置,并在程序被指定为“已使用"程序 (glUseProgram) 后立即更新它. 缺点:每次glUseProgram 调用后,所有“共享"统一变量都会更新.此外,如果某个程序在当前帧中不是第一次使用,则所有 g
..
我正在研究着色器管理器架构,我有几个问题要问更高级的人.我目前的选择反对以下两种设计: 1.每个材质着色器程序 => 为程序中使用的每种材质创建一个着色器程序. 潜在的缺点: 考虑到每个对象可能都有自己的材质,它涉及到大量的 glUseProgram 调用. 暗示创建了许多着色器程序对象. 比 #2 更复杂的架构. 优点: 可以为材质中使用的每个“选项"专门生成
..
我希望通过具有可以具有不同 x 和 y 值的 vec2 半径将我当前的圆形光变成椭圆.有没有办法根据我在片段着色器中的当前代码来做到这一点? uniform struct Light{vec4 颜色;vec3 位置;vec2 半径;浮动强度;} allLights[MAX_LIGHTS];vec4calculateLight(Light light){vec2 lightDir = fragme
..
我在 Sage Wordpress 网站上工作,想通过 Three.js 库实现一些 WebGl.像这样 代码丢弃示例图像悬停 我一直遇到 GLSL 文件的问题.我尝试了几个不同的加载器模块.但我不断收到相同的错误.有其他人遇到过这种情况吗? 错误 无法编译,有 4 个错误 下午 5:57:14./resources/assets/scripts/routes/extras/shader
..
我试图实现 这个问题 的答案,但似乎有有点问题.如果您打开他们的 ShaderToys 并尝试更改边框半径,则圆角矩形的大小(宽度和高度)也会发生变化. 我正在寻找一种解决方案,例如 this shadertoy,其中更改边框半径不会't 改变形状的大小.不幸的是,在这个着色器玩具中,它是一个填充的圆角矩形. 是否有可能有一个未填充的圆角矩形(因此,只有边框),但也有它,如果您更改边框
..
我试图在 Vulkan 中渲染一堆小轴对齐 (2d) 四边形,而不是使用非索引绘制调用,我想尝试最小化传输开销并使用以下方案的索引绘制: #version 450vec2 inTopleft 中的布局(位置 = 0);vec2 inExtent 中的布局(位置 = 1);vec2 位置[6] = vec2[](vec2(0, 0),vec2(0, 1),vec2(1, 0),vec2(0, 1)
..
我正在处理一个场景(在 bl.ocks.org 上比在下面更容易看到) 在 Three.js 中,使用点作为渲染原语会大大受益,因为有大约 200,000 个四边形来表示,用点来表示这些四边形需要的顶点减少 4 倍,这意味着更少的绘制调用和更高的 FPS. 现在我试图在相机靠近给定点时使点变大.如果您在下面的场景中直接放大,您应该会看到效果很好.但是,如果向左或向右拖动相机,点会逐渐变小,尽
..
我尝试过搜索,这是一件微不足道的事情,但无法弄清楚,我看了很多答案,但从未用完整的工作示例回答我需要的内容. 我正在尝试在片段着色器中缩放视频纹理,并在背景中使用图像纹理.所以不能变换顶点.视频纹理需要调整为 200 x 200 并放置在顶角或底角. 它最终将使用 MediaStream 作为网络摄像头,具有透明背景效果.它与图像纹理顶部的 bodypix 一起使用,使用混合着色器,但
..
我想使用 Open GL ES 进行通用计算. 所以到目前为止我理解的是,我需要创建一个 SSBO 并将我的数据传输到那里,将缓冲区绑定到着色器中的特殊点,运行着色器并取回数据. 到目前为止我有 3 个问题: 代码无法编译:错误:未定义对“glDispatchCompute"的引用.我已经包含了 GLES3/gl31.h,功能就在那里.open gl es 的其他函数导入正确;
..
我遇到了这个真正优秀如何通过顶点着色器实现广告牌的示例,以减轻绘制和旋转大量标签以始终面向相机的繁重工作. var 场景;var 书;var shaderMaterial;var renderer = new THREE.WebGLRenderer({抗锯齿:真});renderer.setClearColor(0x000000);document.body.appendChild(rend
..