问题标签 [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 投票
1 回答
895 浏览

cg - 如何在 CPU 上运行 Cg 顶点/片段着色器?

我正在我的小上网本(运行 Linux)上使用 Cg 玩一些顶点和片段着色器。显然,我将经常达到图形控制器的资源限制,所以想知道是否有一种很好的方法可以在 CPU 上运行着色器,只是为了测试它们。像D3D的refrast...

TIA

安迪

0 投票
1 回答
530 浏览

opengl - 从 OpenGL 渲染输出中获取法线信息

我会尽量保持简单。

我想要一种从帧缓冲区输出(或类似输出)访问场景正常信息的方法。同样的方式可以使用 glGetTexImage 和 GL_DEPTH_COMPONENT 访问深度缓冲区。

我知道我可以设置一个片段着色器,它在 RGB 颜色空间中输出法线信息,而这些信息又可以从渲染图像中读取。但是,我想知道是否有办法在 openGL API 中执行此操作。

我会根据要求尽可能澄清任何事情,谢谢

0 投票
1 回答
4088 浏览

opengl - 模糊 OpenGL 中的深度缓冲区 - 如何在片段着色器中访问 mipmap 级别?

我试图通过在片段着色器中模糊和混合 mipmap 级别来模糊深度纹理。

我有两个帧缓冲区对象:
1)附加了深度渲染对象的颜色帧缓冲区​​。
2) 附加了深度纹理的 z 帧缓冲区。

一旦我将场景渲染到颜色帧缓冲区​​对象,我就可以对深度缓冲区对象进行 blit,并且可以成功渲染它(输出是 GL_LUMINANCE 深度纹理)。

我可以通过在绘制深度缓冲区之前选择它来成功访问任何给定的 mipmap 级别,例如,我可以渲染 mipmap 级别 3,如下所示:

作为替代方案,我想将偏差参数添加到 texture2D() GLSL 函数,或者使用 texture2DLod() 并使用单个纹理采样器进行操作,但是每当我选择超过 0 的级别时,mipmap 似乎没有'未生成:

我不确定 mipmapping 如何与 glBlitFramebuffer() 一起工作,但我的问题是设置程序以使对 texture2D/texture2DLod 的调用给出预期结果的正确方法是什么?

谢谢,丹尼斯

0 投票
1 回答
195 浏览

opengl - 加剧 OpenGL 纹理问题

我在尝试将纹理加载到 VRAM 时遇到问题。我在 Mac OS X 上使用 OpenGL。通过将颜色传递到片段着色器中,我已经成功渲染了几何图形。但是,一旦我尝试加载纹理,就不会渲染任何几何图形,我只能看到背景颜色。这是我的纹理加载代码:

这是我的片段着色器代码:

我意识到其中一些代码可能不是必需的,但我一直在尝试我能想到的一切。

谢谢。

0 投票
1 回答
1587 浏览

opengl - BlitzMax - 为 png 文件生成 2D 霓虹发光线效果

我希望在 BlitzMax 中创建发光的线条效果,例如星球大战光剑或激光束。不必是实时的,而只是 TImage 对象,然后可能保存到 PNG 以供以后在动画中使用。我很高兴使用 3D 功能,但它将用于 2D 游戏。

由于它将在黑色/空间背景上,我的策略是绘制一系列具有颜色和高透明度的白色模糊线,然后最终中心线不那么模糊,更白。我想画的其实是贝塞尔曲线。绘制曲线很容易,但我无法使用上述技术来创建良好的激光/霓虹灯效果,因为它看起来非常分段。所以,我认为最好在渲染良好的地方使用模糊效果/着色器,这是一条 1 像素的贝塞尔曲线。

我遇到的问题是:

  • 将着色器应用于屏幕上绘制线条的特定区域。如果有办法在纹理上画线,然后模糊该纹理并保存 png,那将是很棒的消息。必须有办法做到这一点,但我还没有让正确的元素一起工作。任何熟悉这些东西的人的帮助将不胜感激。
  • 仅使用 2D 调用可能是有利的,更易于理解和重用。
  • 很高兴知道如何保存保留透明度/alpha 内容的 PNG。

ps 我已经查看了这篇文章(和其他文章),让示例工作,甚至开发了我自己的 5x5 着色器。但是,它是 3D 和场景范围的东西,似乎不能很好地转换为 2D 或只是某个区域。 http://www.blitzbasic.com/Community/posts.php?topic=85263

0 投票
1 回答
2356 浏览

arrays - 将 int 数组传递给片段着色器

我试图在 OpenGL ES 中绘制一个迭代函数。一个整数数组会根据迭代函数命中给定像素的频率进行更新。我想将此密度数组传递给片段着色器,并使用它在覆盖整个屏幕的简单四边形上绘制结果。

我的问题是:我可以将此数组作为制服直接传递给着色器并通过使用gl_FragCoord来查找给定位置的密度来生成像素

或者

我是否应该使用数组来使用GL_LUMINANCE创建具有一个通道的纹理并将其传递给着色器?

0 投票
2 回答
5296 浏览

arrays - 如何用一维纹理替换 GLSL 统一数组

我正在尝试让 Ardor3D 的地形系统在 SM3.0 硬件上工作。

当前的 GLSL 片段着色器使用统一的 vec2 数组将 xy 坐标数组传递给片段着色器。

由于动态索引统一数组仅适用于 SM4.0+ 硬件,要使其在 SM3.0 上运行,我需要将其替换为 1D 浮点纹理。

当前数组如下所示: uniform vec2 sliceOffset[8];

并像这样访问: vec2 offset = sliceOffset[int(unit)];

我对 OpenGL 和 GLSL 非常有经验,所以我在转换时遇到了一些问题。

到目前为止,我已经这样做了:创建一维纹理 - 宽度 = 8 - 格式 = RGBA32F

为纹理创建一维缓冲区

  • 宽度 = 8 * 4 = 32 个浮点数,或 32 * 4 = 32 个字节大
  • 像这样填充浮动缓冲区:

[x0,y0,0,0,x1,y1,0,0,x2,y2,0,0,x3,y3,0,0,x4,y4,0,0,x5,y5,0,0,x6,y6,0,0,x7,y7,0,0]

为纹理创建一维采样器

  • 最小过滤器=最近的,没有mip贴图
  • mag 过滤器 = 最近
  • 环绕模式 = 夹到边缘

在 GLSL 中,我将采样器定义为: uniform sampler1D sliceOffset;

并访问它:

但它坏了。

我究竟做错了什么?

0 投票
1 回答
787 浏览

opengl-es - 从片段着色器中删除纹理坐标

我有一个顶点和片段着色器,我想显示纯色而不是纹理。

我有以下顶点和片段着色器。

我如何必须修改片段着色器以不显示纹理?(对不起我的英语不好)。

谢谢。

0 投票
5 回答
4729 浏览

glsl - 着色器帧缓冲区回读

我想知道较新的着色器模型是否支持从目标帧缓冲区读回像素值。我假设这已经在绘图管道的后期(非可编程)阶段完成,这让我希望这个功能可能已经添加到可编程管道中。

我知道可以绘制到纹理绑定帧缓冲区,然后将此纹理发送到着色器,我只是希望有一种更优雅的方式来实现相同的功能。

0 投票
5 回答
104360 浏览

opengl - 顶点着色器与片段着色器

我已经阅读了一些关于 Cg 的教程,但有一件事对我来说不是很清楚。顶点着色器和片段着色器之间到底有什么区别?在什么情况下,一种比另一种更适合?