问题标签 [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.
opengl-es - gl_Color 是 WebGL 上未声明的标识符
我正在查看具有以下代码片段的http://www.swiftless.com/tutorials/glsl/3_glcolor.html :
我尝试在我的 WebGL 上使用 gl_Color。我收到 gl_Color 是未声明的标识符的错误。
我做错什么了?
在此先感谢您的帮助。
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.RGB
gl.UNSIGNED_BYTE
LUMINESCANCE_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 上对其进行了测试。我相信我对浮点运算一无所知。
android - 从顶点和片段着色器中删除法线
我正在使用 C++ 中的 OpenGL ES 2.0 开发一个 Android 2.2 应用程序。
这是我的顶点和片段着色器:
我对 OpenGL ES 2.0 开发非常陌生。
有人告诉我,如果我想在我的渲染上使用灯光,我必须对顶点和片段着色器进行一些复杂的修改。所以,我不知道怎么做,法线不是必需的。
我的问题是:
如何修改不使用法线的顶点和片段着色器?
谢谢
graphics - 托管 DirectX 后处理片段着色器渲染问题
我正在使用带有 C# 的 Managed Direct X 2.0,并且我正在尝试将片段着色器应用于通过使用 RenderToSurface 帮助器类将屏幕渲染到纹理而构建的纹理。
我用来执行此操作的代码是:
渲染到我的 Surface,RenderSurface,它附加到一个名为 RenderTexture 的纹理对象
然后我调用以下代码将表面渲染到屏幕上,将第二个着色器“PostProc”应用于渲染的纹理。此着色器基于每个像素组合颜色值并将场景转换为灰度。我在这里学习教程:http ://rbwhitaker.wikidot.com/post-processing-effects
然而,我看到的只是原始渲染场景,渲染到纹理,但未被第二个着色器修改。
FX文件在下面,以防它很重要。
opengl - GLSL:如何获得像素 x、y、z 世界位置?
我想根据它们在世界上的 xyz 位置来调整颜色。
我在我的片段着色器中尝试了这个:
但似乎颜色会根据我的相机角度/位置而变化,我如何使坐标独立于我的相机位置/角度?
这是我的顶点着色器:
Edit2:更改了标题,所以我想要世界坐标,而不是屏幕坐标!
Edit3:添加了我的完整代码
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,这是我现在得到的:
我想得到:
一些想法来实现这一点?任何帮助,将不胜感激。
ipad - 有人可以确认运行 3.2.x 的 iPad 是否支持片段着色器中的纹理映射?
在模拟器中,我在 3.2 下测试时没有遇到任何问题,但是,在设备上,纹理没有出现。在 4.2 下,它在模拟器和设备中都可以正常工作。
我试图查明问题并想知道是否有人可以确认 3.2.x(仅限 iPad)中该特定功能是否存在错误。如果您对可能出现的问题有其他想法,请告诉我。我对OpenGL不是很有经验。
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,所以它似乎应该继续工作。任何想法为什么它不?
image-processing - 组合多个opengl片段着色器
我想将一些图像处理工作移植到 OpenGL 以使用 OpenGL ES 来提高性能。我有一个非常简单的阈值算法,但我想将其他过滤器组合到图像中(例如对比度)。
我的第一个想法是通过使用多个片段着色器来完成这个。但是,我想很快地做到这一点,所以这会导致很多状态变化吗?我读过的唯一方法是通过处理纹理然后多次调用“使用程序”来做到这一点。
有没有更有效的方法来做到这一点?理想情况下,我想执行对比度拉伸和直方图平衡作为步骤的一部分。
除非我可以将它组合成一个着色器,否则 FBO 是否适合我?
我对 OpenGL 有点陌生(以防你不知道)。
谢谢!
西蒙
glsl - GLSL 标准化鼠标输入
我是这个着色器世界的新手,只是想尝试一些东西。我想做以下事情:
在鼠标周围的特定半径内,背景中的纹理应该旋转 10°。鼠标坐标是绝对值,所以要使用它们,我必须对它们进行规范化,这样我就可以在纹理中处理正确的空间。但不知何故,这不起作用。旋转有效,但我得到了一点偏移的颜色信息。
我认为问题是,normalize(mouse)
但我不知道如何正确地做到这一点。这是着色器:
我正在使用煤渣来做到这一点。
谢谢你。