glsles相关内容

如何在 GLSL ES 中编写 const 数组

我正在尝试为 iPhone 上的 OpenGL ES 应用程序编写一个简单的顶点着色器,但我的数组构造函数给我带来了麻烦. 属性 vec4 normal;属性 vec4 位置;无效的主要(无效){常量 vec4 顶点[3] = vec4[](vec4(0.25, -0.25, 0.5, 1.0),vec4(-0.25, -0.25, 0.5, 1.0),vec4(0.25, 0.25, 0.5, ..
发布时间:2022-01-09 09:42:21 移动开发

WebGL:如何将值绑定到 mat4 属性?

在一些 WebGL 应用程序中,假设我们有一个 GLSL 顶点着色器,它的开头是这样的: 属性 vec4 foo1;属性 vec4 foo2;属性 vec4 foo3;属性 vec4 foo4; 以及一些用于为这些属性绑定数据结构的相应 Javascript 代码: var buf = gl.createBuffer(), loc;gl.bindBuffer(gl.ARRAY_BUFFER, ..
发布时间:2022-01-09 09:30:18 前端开发

如何在 float 和 vec4、vec3、vec2 之间转换?

这个问题和这里的问题非常相关(如何将 vec4 rgba 值转换为浮点数?). 已经有一些与此问题相关的文章或问题,但我想知道大多数文章都没有确定哪种类型的浮动值.只要我能想出,下面有一些浮点值打包/解包公式. 无符号归一化浮点数 有符号归一化浮点数 有符号范围浮点(我能找到范围限制的浮点值) 无符号范围浮点数 无符号浮点数 有符号浮点数 但是,这些实际上只是 2 个案 ..
发布时间:2022-01-09 08:56:14 其他开发

Three.js/GLSL - 将像素坐标转换为世界坐标

我的 Three.js 应用程序中有一个简单的着色器,它将屏幕着色为红色.但是,我想将给定世界位置右侧的所有像素着色为不同的颜色. 我看过一些 答案 建议使用改变 vec4 worldCoord = gl_ModelViewMatrix * gl_Vertex;,但由于 WebGL 使用 GLSLES,我无法使用 gl_Vertex 之类的变量. 顶点着色器 #ifdef GL_ES ..
发布时间:2021-12-31 19:00:20 其他开发

Three.js - 在单个 PointCloud 中使用多个纹理

我正在尝试使用 ShaderMaterial 在单个 PointCloud 中使用多个纹理.我将一个纹理数组连同纹理索引属性一起传递给着色器,并选择适当的纹理以在片段着色器中使用. 相关设置代码: varparticleCount = 100;var 制服 = {纹理:{类型:'电视',值:this.getTextures()}};var 属性 = {文本索引:{类型:'f',价值: [] ..
发布时间:2021-12-31 18:48:20 前端开发

在片段着色器中,为什么我不能使用平面输入整数来索引 sampler2D 的统一数组?

我想指定渲染精灵数组时要使用的纹理.所以我在它们的顶点数据中放置了一个纹理索引,并将它作为一个平面值从我的顶点着色器传递到我的片段着色器,但不能像预期的那样使用它来索引采样器数组,因为编译器认为它是“非-常数".相反,我不得不求助于下面令人作呕的代码.谁能解释一下这里发生了什么? const int numTextures = 2;统一的 sampler2D 纹理 [numTextures];在 ..
发布时间:2021-12-19 17:40:06 其他开发

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

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

在 iOS/Android 的片段着色器中使用 highp 可以吗?

根据GLSL ES 参考,支持highp 是可选的.所以我一直在我所有的片段着色器中使用 precision mediump float; 所以我没有设备兼容性问题.在某些情况下,很难以 10 位的相对精度产生好看的输出,我希望能够在必要时切换到 highp. 在片段着色器中要求 highp 支持在实践中有多安全?我已经在各种设备上尝试过,它适用于我尝试过的所有设备.我只想针对 Androi ..
发布时间:2021-06-12 20:13:52 移动开发

CPU到GPU的法线映射

我正在创建一个地形网格,并遵循此SO答案,我正在尝试迁移CPU计算的法线到基于着色器的版本,以通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能. 我正在使用 MapBox高度图获取地形数据.磁贴看起来像这样: 每个像素的高程由以下公式给出: const elevation = -10000.0 + ((red * 256.0 * 256.0 + green * 25 ..
发布时间:2020-06-24 22:01:56 其他开发

用于纹理三次投影的GLSL着色器

我正在尝试在WebGL着色器中实现纹理三次投影,如下图所示: 到目前为止我尝试过的事情: 我正在传递对象的边界框(图片中间的框),如下所示: uniform vec3 u_bbmin; uniform vec3 u_bbmax; ...所以我的投影框的八个顶点是: vec3 v1 = vec3(u_bbmin.x, u_bbmin.y, u_bbmin.z); vec3 ..
发布时间:2020-06-16 19:05:45 其他开发

在WebGL2中渲染为16位无符号整数2D纹理

如WebGL 2官方规范或文档中所述(我可以轻松地用UInt16Array填充纹理,然后使用它.但是我无法使用着色器将纹理渲染填充到其中.然后,当我在下一个着色器中采样值时,我只会得到零. 是否有人已经成功使用WebGL 2渲染为无符号整数纹理?我将非常感激,我玩了数周的纹理格式,但在这里我没有做错什么……而且在关于该主题的其他SO问题中我也没有发现自己的错误. > 您可以在下面的代码段中 ..

我可以避免在webgl中进行纹理渐变计算吗?

我们有一个webgl/three.js应用程序,该应用程序广泛使用纹理缓冲区来在遍之间传递数据并存储数据数组.这些都没有用于mipmap.我们很容易就能防止生成Mipmap:在three.js级别上,我们将min和mag过滤器设置为NearestFilter,并将generateMipmaps设置为false. 但是,着色器在编译时不知道没有映射.使用ANGLE进行编译时,我们会收到许多警告 ..
发布时间:2020-06-16 19:05:34 其他开发

WebGL是否支持1D纹理?

我一直在寻找一个明确的答案,但似乎没有人清楚地问过这个问题. 我可以在WebGL Chrome,Firefox,Safari,IE等中使用一维采样器和一维纹理吗? 编辑 可理解的是1确实是2的幂(2 ^ 0 = 1),这意味着您可以有效地使用2D采样器和纹理(高度为1且宽度为256或512等)来复制1D纹理. > 一维纹理并非没有意义,它们之所以存在,是因为它们不仅具有目的,而 ..
发布时间:2020-06-16 19:05:31 其他开发

在WebGL中为循环使用统一(或类似)的解决方法?

我正在努力在WebGL中实现片段着色器,并且遇到了只能在for循环中使用常量表达式的局限性.有人对此有合适的解决方法吗? 在我的特定情况下,我正在实现一个双边过滤器,当前在片段着色器中将窗口大小指定为const,但希望能够从JavaScript进行更改.统一不是常量,因此不能在for循环中使用,因此我正在寻找实现此目的的其他方法. 我唯一想到的是从JavaScript读取着色器源,对其 ..
发布时间:2020-06-16 19:05:27 前端开发

Mapbox Android SDK崩溃-"java.lang.Error:顶点着色器填充无法编译"

将Android Studio版本升级到2.1.3之后,每次启动应用程序时都会崩溃. 更准确地说,当尝试加载我的Mapbox视图时,它崩溃了(在此之前可以正常工作). 我做了一些研究,这似乎是一个已知问题,但是我找不到任何解决方法来解决这个问题... 我认为这可能仅是仿真器的问题,但是目前我无法尝试使用很多物理设备,因此我不确定.但是无论如何,我确实需要使用模拟器来调试我的应用程 ..
发布时间:2020-06-16 19:05:25 Java开发

OpenGL ES3阴影贴图问题

我使用OpenGL ES3在Android上的C ++项目上工作,因此我尝试使用定向光来实现阴影贴图,我对理论理解得很好,但从未成功渲染它. glGenFramebuffers(1, &depthMapFBO); glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); glGenTextures(1, &depthMap); glBindTexture(G ..
发布时间:2020-06-16 19:05:16 C/C++开发

切换到GLSL 300时,遇到以下错误

当我切换为在GLSL 300上使用OpenGL ES 3时,在碎片着色器中遇到以下错误 未声明的标识符gl_FragColor 使用GLSL 100时,一切都很好. 解决方案 现代版本的GLSL只需将片段声明为out值即可执行片段着色器输出,并且不再支持gl_FragColor,因此会出现错误.试试这个: out vec4 fragColor; void main() { ..
发布时间:2020-06-16 19:05:10 其他开发

在片段着色器中,为什么不能使用平面输入整数来索引sampler2D的统一数组?

这里是着色器的新功能,有点困惑. 我想指定渲染精灵数组时要使用的纹理.因此,我在其顶点数据中放置了一个纹理索引,并将其作为一个平面值从顶点着色器传递到片段着色器,但是不能像预期的那样使用它为采样器数组建立索引,因为编译器将其视为“非常数" ".相反,我不得不诉诸下面令人讨厌的代码.谁能解释这是怎么回事? const int numTextures = 2; uniform sampl ..
发布时间:2020-06-16 19:05:06 其他开发

使用three.js在片段着色器中手动选择多图谱

我正在Three.js中使用glsl es编写基于物理的着色器.对于镜面全局照明的添加,我使用了内部带有mipmap链的cubemap dds纹理(使用CubeMapGen进行了预先计算,因为它的解释vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod) ,但仅在顶点着色器中可用.在我的片段着色器中,我正在使用类似的功能 ..
发布时间:2020-05-21 00:45:59 其他开发