问题标签 [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.
cg - 如何在 CPU 上运行 Cg 顶点/片段着色器?
我正在我的小上网本(运行 Linux)上使用 Cg 玩一些顶点和片段着色器。显然,我将经常达到图形控制器的资源限制,所以想知道是否有一种很好的方法可以在 CPU 上运行着色器,只是为了测试它们。像D3D的refrast...
TIA
安迪
opengl - 从 OpenGL 渲染输出中获取法线信息
我会尽量保持简单。
我想要一种从帧缓冲区输出(或类似输出)访问场景正常信息的方法。同样的方式可以使用 glGetTexImage 和 GL_DEPTH_COMPONENT 访问深度缓冲区。
我知道我可以设置一个片段着色器,它在 RGB 颜色空间中输出法线信息,而这些信息又可以从渲染图像中读取。但是,我想知道是否有办法在 openGL API 中执行此操作。
我会根据要求尽可能澄清任何事情,谢谢
opengl - 模糊 OpenGL 中的深度缓冲区 - 如何在片段着色器中访问 mipmap 级别?
我试图通过在片段着色器中模糊和混合 mipmap 级别来模糊深度纹理。
我有两个帧缓冲区对象:
1)附加了深度渲染对象的颜色帧缓冲区。
2) 附加了深度纹理的 z 帧缓冲区。
一旦我将场景渲染到颜色帧缓冲区对象,我就可以对深度缓冲区对象进行 blit,并且可以成功渲染它(输出是 GL_LUMINANCE 深度纹理)。
我可以通过在绘制深度缓冲区之前选择它来成功访问任何给定的 mipmap 级别,例如,我可以渲染 mipmap 级别 3,如下所示:
作为替代方案,我想将偏差参数添加到 texture2D() GLSL 函数,或者使用 texture2DLod() 并使用单个纹理采样器进行操作,但是每当我选择超过 0 的级别时,mipmap 似乎没有'未生成:
我不确定 mipmapping 如何与 glBlitFramebuffer() 一起工作,但我的问题是设置程序以使对 texture2D/texture2DLod 的调用给出预期结果的正确方法是什么?
谢谢,丹尼斯
opengl - 加剧 OpenGL 纹理问题
我在尝试将纹理加载到 VRAM 时遇到问题。我在 Mac OS X 上使用 OpenGL。通过将颜色传递到片段着色器中,我已经成功渲染了几何图形。但是,一旦我尝试加载纹理,就不会渲染任何几何图形,我只能看到背景颜色。这是我的纹理加载代码:
这是我的片段着色器代码:
我意识到其中一些代码可能不是必需的,但我一直在尝试我能想到的一切。
谢谢。
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
arrays - 将 int 数组传递给片段着色器
我试图在 OpenGL ES 中绘制一个迭代函数。一个整数数组会根据迭代函数命中给定像素的频率进行更新。我想将此密度数组传递给片段着色器,并使用它在覆盖整个屏幕的简单四边形上绘制结果。
我的问题是:我可以将此数组作为制服直接传递给着色器并通过使用gl_FragCoord来查找给定位置的密度来生成像素
或者
我是否应该使用数组来使用GL_LUMINANCE创建具有一个通道的纹理并将其传递给着色器?
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;
并访问它:
但它坏了。
我究竟做错了什么?
opengl-es - 从片段着色器中删除纹理坐标
我有一个顶点和片段着色器,我想显示纯色而不是纹理。
我有以下顶点和片段着色器。
我如何必须修改片段着色器以不显示纹理?(对不起我的英语不好)。
谢谢。
glsl - 着色器帧缓冲区回读
我想知道较新的着色器模型是否支持从目标帧缓冲区读回像素值。我假设这已经在绘图管道的后期(非可编程)阶段完成,这让我希望这个功能可能已经添加到可编程管道中。
我知道可以绘制到纹理绑定帧缓冲区,然后将此纹理发送到着色器,我只是希望有一种更优雅的方式来实现相同的功能。
opengl - 顶点着色器与片段着色器
我已经阅读了一些关于 Cg 的教程,但有一件事对我来说不是很清楚。顶点着色器和片段着色器之间到底有什么区别?在什么情况下,一种比另一种更适合?