问题标签 [fragment-shader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5446 浏览

opengl-es - gl_Color 是 WebGL 上未声明的标识符

我正在查看具有以下代码片段的http://www.swiftless.com/tutorials/glsl/3_glcolor.html :

我尝试在我的 WebGL 上使用 gl_Color。我收到 gl_Color 是未声明的标识符的错误。

我做错什么了?

在此先感谢您的帮助。

0 投票
2 回答
1363 浏览

shader - WebGL 片段着色器中奇怪的浮点运算

我正在编写一个简单的 WebGL 程序。我在着色器程序中遇到了一个奇怪的行为:

条件( 1.01 * 2.0 > 1.0 )评估为真,但条件( 0.99 * 2.0 > 1.0 )评估为flase

每次我将小于的数字乘以其他数字时1.0,我得到的数字小于1.0

为什么会这样?

[编辑]

我正在使用片段着色器使用窗口级别和窗口高度(线性斜坡)将 16 位无符号整数数据更改为 8 位位图并显示在屏幕上。由于没有直接的方法将 16 位数据存储为 WebGL(AFAIK)中的内部格式,我决定创建,将第一个字节存储在 R 通道中,第二个字节存储在 B 通道中Uint8Array(width*height*3)并将其放入纹理(也许会更好)。gl.RGBgl.UNSIGNED_BYTELUMINESCANCE_ALPHA

在着色器中,我重建字形字节并进行调平。着色器程序:

如您所见,有一条愚蠢的线if( 1.0*2.0 > 1.1 ) gl_FragData[0] = vec4(1,0,0,1); 是我测试浮点运算的地方。在这个例子中,整个图像是红色的,但是当条件是答案时0.999999999*2.0 > 1.1,答案是错误的。当我重新采样的 16 位图像中出现奇怪的伪影时,我开始怀疑某些事情。

我在 Chrome 8 和 Firefox 4 上对其进行了测试。我相信我对浮点运算一无所知。

0 投票
1 回答
758 浏览

android - 从顶点和片段着色器中删除法线

我正在使用 C++ 中的 OpenGL ES 2.0 开发一个 Android 2.2 应用程序。

这是我的顶点和片段着色器:

我对 OpenGL ES 2.0 开发非常陌生。

有人告诉我,如果我想在我的渲染上使用灯光,我必须对顶点和片段着色器进行一些复杂的修改。所以,我不知道怎么做,法线不是必需的。

我的问题是:

如何修改不使用法线的顶点和片段着色器?

谢谢

0 投票
1 回答
665 浏览

graphics - 托管 DirectX 后处理片段着色器渲染问题

我正在使用带有 C# 的 Managed Direct X 2.0,并且我正在尝试将片段着色器应用于通过使用 RenderToSurface 帮助器类将屏幕渲染到纹理而构建的纹理。

我用来执行此操作的代码是:

渲染到我的 Surface,RenderSurface,它附加到一个名为 RenderTexture 的纹理对象

然后我调用以下代码将表面渲染到屏幕上,将第二个着色器“PostProc”应用于渲染的纹理。此着色器基于每个像素组合颜色值并将场景转换为灰度。我在这里学习教程:http ://rbwhitaker.wikidot.com/post-processing-effects

然而,我看到的只是原始渲染场景,渲染到纹理,但未被第二个着色器修改。

FX文件在下面,以防它很重要。

0 投票
4 回答
49426 浏览

opengl - GLSL:如何获得像素 x、y、z 世界位置?

我想根据它们在世界上的 xyz 位置来调整颜色。

我在我的片段着色器中尝试了这个:

但似乎颜色会根据我的相机角度/位置而变化,我如何使坐标独立于我的相机位置/角度?

这是我的顶点着色器:

Edit2:更改了标题,所以我想要世界坐标,而不是屏幕坐标!

Edit3:添加了我的完整代码

0 投票
2 回答
18360 浏览

opengl-es - GLSL 中的纹理和颜色?

我不知道如何使用 OpenGL ES 2.0 获得与 OpenGL ES 1.1 类似的结果。我想实际使用一个 Sampler2D(将我的纹理与 Alpha 通道混合到帧缓冲区)并设置一个颜色。纹理应该以颜色绘制 - 就像在 OpenGL ES 1.1 中我的 FragmentShader 看起来像这样:

但是“+ colorVarying”部分用黑色破坏了我的alpha通道(因为我还添加了colorVarying,如果AlphaValue为0)并产生奇怪的渐变效果......纹理和颜色通道如何在固定功能管道中结合?我对 glColor4f 的替换是:

我正在使用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 如果这在某种程度上相关......

对于颜色 1.0、0.0、1.0、1.0,这是我现在得到的: 现在

我想得到:

我想看的

一些想法来实现这一点?任何帮助,将不胜感激。

0 投票
1 回答
114 浏览

ipad - 有人可以确认运行 3.2.x 的 iPad 是否支持片段着色器中的纹理映射?

在模拟器中,我在 3.2 下测试时没有遇到任何问题,但是,在设备上,纹理没有出现。在 4.2 下,它在模拟器和设备中都可以正常工作。

我试图查明问题并想知道是否有人可以确认 3.2.x(仅限 iPad)中该特定功能是否存在错误。如果您对可能出现的问题有其他想法,请告诉我。我对OpenGL不是很有经验。

0 投票
1 回答
961 浏览

iphone - 当我切换到纯 alpha (A8) pixelFormat 时,为什么我的片段着色器无法读取 alpha 信息?

我正在创建一个使用 OpenGL ES 2.0 的 iOS 应用程序。我对 OpenGL 有点陌生,所以这可能是一个微不足道的错误。

我创建了一个简单的着色器来处理使用 alpha 通道用另一个纹理遮盖一个纹理。蒙版纹理初始化如下:

glGenTextures(1, &name); glBindTexture(GL_TEXTURE_2D, 名称);

glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

glGenFramebuffersOES(1, &buffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, 缓冲区);

glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, 名称, 0);

glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);

然后(稍后)我在遮罩纹理上绘制一些东西,并将遮罩纹理链接到这个片段着色器以将其应用到另一个纹理:

这完全呈现了我想要的样子。但是,为了减少绑定蒙版纹理缓冲区的开销(这似乎很大),我尝试对蒙版纹理使用 8 位仅 alpha 像素格式。但是,如果我从 RGBA 设置中更改代码:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

...仅 alpha 版:

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 1024, 768, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 缓冲区);

...片段着色器无法绘制任何内容。因为我首先只使用蒙版纹理中的 alpha,所以它似乎应该继续工作。任何想法为什么它不?

0 投票
2 回答
2368 浏览

image-processing - 组合多个opengl片段着色器

我想将一些图像处理工作移植到 OpenGL 以使用 OpenGL ES 来提高性能。我有一个非常简单的阈值算法,但我想将其他过滤器组合到图像中(例如对比度)。

我的第一个想法是通过使用多个片段着色器来完成这个。但是,我想很快地做到这一点,所以这会导致很多状态变化吗?我读过的唯一方法是通过处理纹理然后多次调用“使用程序”来做到这一点。

有没有更有效的方法来做到这一点?理想情况下,我想执行对比度拉伸和直方图平衡作为步骤的一部分。

除非我可以将它组合成一个着色器,否则 FBO 是否适合我?

我对 OpenGL 有点陌生(以防你不知道)。

谢谢!

西蒙

0 投票
1 回答
4806 浏览

glsl - GLSL 标准化鼠标输入

我是这个着色器世界的新手,只是想尝试一些东西。我想做以下事情:
在鼠标周围的特定半径内,背景中的纹理应该旋转 10°。鼠标坐标是绝对值,所以要使用它们,我必须对它们进行规范化,这样我就可以在纹理中处理正确的空间。但不知何故,这不起作用。旋转有效,但我得到了一点偏移的颜色信息。

我认为问题是,normalize(mouse)但我不知道如何正确地做到这一点。这是着色器:

我正在使用煤渣来做到这一点。

谢谢你。