Questions tagged «glsl»

OpenGL着色语言(GLSL)是OpenGL中着色器的标准编程语言。该语言有很多版本,每个版本对应一个OpenGL版本。OpenGL ES 2.0及更高版本具有单独的GLSL版本。

5
从4.1版开始,OpenGL中的文本呈现技术是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 关于OpenGL中的文本渲染,已经存在许多问题,例如: 如何为GUI进行OpenGL实时文本渲染? 但主要讨论的是使用固定功能管线渲染带纹理的四边形。当然,着色器必须提供更好的方法。 我并不真正在意国际化,我的大多数字符串都将是图形刻度标签(日期和时间或纯数字)。但是这些图将以屏幕刷新率重新渲染,并且可能会有很多文本(屏幕上不超过几千个字形,但足以使硬件加速的布局就不错了)。 使用现代OpenGL进行文本渲染的推荐方法是什么?(使用该方法引用现有软件是很好的证据,证明它运行良好) 几何着色器,接受例如位置和方向以及字符序列,并发出带纹理的四边形 渲染矢量字体的几何着色器 如上,但是使用镶嵌着色器代替 计算着色器以进行字体光栅化
199 opengl  text  glsl  shader  opengl-4 


11
GLSL的随机/噪声功能
由于GPU驱动程序供应商通常不愿意noiseX在GLSL中实现,因此我正在寻找“图形随机化瑞士军刀”实用程序功能集,最好对其进行优化以在GPU着色器中使用。我更喜欢GLSL,但是可以编写任何语言的代码,我可以自己将其翻译为GLSL。 具体来说,我期望: a)伪随机函数 -从M维种子计算出的[-1,1]或[0,1]上的N维均匀分布(理想情况下为任何值,但我可以限制种子设为0..1,以实现均匀的结果分配)。就像是: float random (T seed); vec2 random2 (T seed); vec3 random3 (T seed); vec4 random4 (T seed); // T being either float, vec2, vec3, vec4 - ideally. b)像Perlin 噪声这样的连续噪声 -同样是N维,分布均匀,具有一组受约束的值,而且看起来不错(一些配置外观(如Perlin级别)的选项也可能有用)。我希望像这样的签名: float noise (T coord, TT seed); vec2 noise2 (T coord, TT seed); // ... 我对随机数生成理论不太了解,因此我非常渴望获得预制的解决方案,但是我也希望得到诸如“这里有一个非常好的,高效的一维rand()”之类的答案,让我解释一下您如何在其上制作一个良好的N维rand()...”。

6
GLSL着色器的正确文件扩展名是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 12个月前关闭。 改善这个问题 我正在学习glsl底纹,并且遇到了不同的文件格式。我见过人们给他们的顶点和片段着色器.vert和.frag扩展。但是,我也看到了.vsh,并.fsh在一个单一的扩展,甚至两者一起着色器.glsl文件。所以我想知道是否存在标准文件格式,或者“正确”的格式是哪种?
127 opengl  glsl  shader 

4
这种GLSL rand()单衬板的起源是什么?
我已经看到了此伪随机数生成器,可用于在网上和此处引用的着色器: float rand(vec2 co){ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } 它被不同地称为“规范”,或“我在网上某处找到的单线”。 此功能的起源是什么?常数值看起来像是任意的吗,还是选择某些艺术?是否有讨论此功能的优点? 编辑:我遇到的对此功能的最早引用是08年2月的存档,现在原始页面已从网络上消失。但是,那里没有比其他地方更多的讨论了。
92 glsl  shader  prng 

2
片段着色器如何知道用于像素颜色的变量?
我看到了很多不同的片段着色器, #version 130 out vec4 flatColor; void main(void) { flatColor = vec4(0.0,1.0,0.0,0.5); } 它们都为“输出颜色”使用了一个不同的变量(在这种情况下flatColor)。那么OpenGL如何知道您要做什么? 我猜这行得通,因为flatColor唯一的变量定义为out,但是您可以添加更多out变量,不是吗?还是会崩溃? 实际上,作为测试,我只是运行了此命令: #version 330 in vec2 TexCoord0; uniform sampler2D TexSampler; out vec4 x; out vec4 y; void main() { y = texture2D(TexSampler, TexCoord0.xy); } 无论我使用x还是,效果都很好y。 此外,我们有一个预定义的gl_FragColor。有什么区别,为什么人们通常坚持使用自己的变量?
82 opengl  glsl 

2
创建统一的GLSL数组?
我想离开OpenGL的灯,自己做。我希望我的着色器允许可变数量的灯光。 我们可以在GLSL着色器中声明统一数组吗?如果是这样,我们将如何设置这些制服的值?
75 arrays  opengl  glsl  shader 

4
将值列表传递给片段着色器
我想将值列表发送到片段着色器中。它可能是单精度浮点数很大(两千个项目长)的列表。片段着色器需要对该列表的随机访问,我想刷新每个帧上CPU的值。 我正在考虑如何做到这一点的选择: 作为数组类型的统一变量(“ uniform float x [10];”)。但是这里似乎有限制,在我的GPU上发送数百个值非常慢,而且当我想在运行时更改它时,我还必须在着色器中硬编码上限。 作为高度为1且宽度为列表的纹理,然后使用glCopyTexSubImage2D刷新数据。 其他方法?我最近还没有跟上GL规范的所有变化,也许还有其他专门为此目的设计的方法吗?
74 opengl  glsl 

2
条件语句会减慢着色器的速度吗?
我想知道着色器(顶点/片段/像素...)内部的“ if语句”是否真的减慢了着色器性能。例如: 最好使用这个: vec3 output; output = input*enable + input2*(1-enable); 而不是使用这个: vec3 output; if(enable == 1) { output = input; } else { output = input2; } 在另一个论坛上,有一个关于该话题的讨论(2013年):http : //answers.unity3d.com/questions/442688/shader-if-else-performance.html 在这里,人们说,If陈述确实很糟糕用于着色器的性能。 同样在这里,他们正在谈论if / else语句(2012)中的内容:https : //www.opengl.org/discussion_boards/showthread.php/177762-Performance-alternative-for-if-(-) 也许硬件或着色器编译器现在更好了,并且它们以某种方式解决了这个(也许不存在)性能问题。 编辑: 在这种情况下,可以说启用是一个统一变量,并且始终设置为0: if(enable == 1) //never happens { output = vec4(0,0,0,0); } else …
74 opengl  glsl  shader  direct3d  hlsl 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.