标签: glsl

从版本4.1开始,OpenGL中的文本渲染技术是什么?

关于OpenGL中的文本呈现已经有很多问题,例如:

但主要讨论的是使用固定功能管道渲染纹理四边形.当然着色器必须做出更好的方法.

我并不真正关心国际化,我的大部分字符串都是情节刻度标签(日期和时间或纯数字).但是这些图将以屏幕刷新率重新渲染,并且可能会有相当多的文本(屏幕上不超过几千个字形,但足够硬件加速布局会很好).

使用现代OpenGL进行文本渲染的推荐方法是什么?(引用现有软件使用该方法是很好的证据,它运作良好)

  • 接受例如位置和方向以及字符序列并发出纹理四边形的几何着色器
  • 渲染矢量字体的几何着色器
  • 如上所述,但改为使用曲面细分着色器
  • 用于进行字体光栅化的计算着色器

opengl shader text glsl opengl-4

196
推荐指数
4
解决办法
7万
查看次数

如何调试GLSL着色器?

我需要调试一个GLSL程序,但我不知道如何输出中间结果.是否可以使用GLSL制作一些调试跟踪(如printf)?

opengl debugging glsl

179
推荐指数
6
解决办法
12万
查看次数

GLSL的随机/噪声功能

由于GPU驱动程序供应商通常不愿意noiseX在GLSL中实现,我正在寻找"图形随机化瑞士军刀"效用函数集,最好在GPU着色器中进行优化.我更喜欢GLSL,但任何语言代码都可以为我做,我可以将它自己翻译成GLSL.

具体来说,我希望:

a)伪随机函数 - 在[-1,1]或[0,1]上的N维,均匀分布,从M维种子计算出来(理想情况下是任何值,但我可以将种子限制在内比方说,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.
Run Code Online (Sandbox Code Playgroud)

b)像Perlin Noise这样的连续噪声 - 再次,N维,+ - 均匀分布,具有约束的值集合,并且看起来很好(配置外观像Perlin级别的一些选项也可能是有用的).我希望签名如下:

float noise  (T coord, TT seed);
vec2  noise2 (T coord, TT seed);
// ...
Run Code Online (Sandbox Code Playgroud)

我不太关注随机数生成理论,所以我最急切地想要一个预先制定的解决方案,但我也很感激"这是一个非常好,高效的1D兰特()这些答案,让我解释一下你如何在它上面制作一个好的N维兰特()...".

random shader glsl noise perlin-noise

167
推荐指数
8
解决办法
15万
查看次数

GLSL着色器的正确文件扩展名是什么?

我正在学习glsl着色,我遇到了不同的文件格式.我见过人们给出他们的顶点和片段着色器.vert.frag扩展.但我也看到.vsh.fsh扩展,甚至两个着色器在一个.glsl文件中.所以我想知道是否有标准的文件格式,或者哪种方式是'正确的'?

opengl shader glsl

124
推荐指数
4
解决办法
5万
查看次数

这个GLSL兰德()单线的起源是什么?

我已经看到这个伪随机数生成器用于在这里和那里引用的着色器:

float rand(vec2 co){
  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
Run Code Online (Sandbox Code Playgroud)

它被称为"规范",或"我在网上找到的单行".

这个功能的起源是什么?恒定值是否像它们看起来一样任意或是否有一些艺术选择?有没有讨论这个功能的优点?

编辑:我遇到的这个函数最早的参考是从20082月开始的这个档案,原来的页面现在已经从网上消失了.但是那里没有比其他任何地方更多的讨论.

shader glsl prng

88
推荐指数
3
解决办法
3万
查看次数

片段着色器如何知道用于像素颜色的变量?

我看到很多不同的片段着色器,

#version 130

out vec4 flatColor;

void main(void)
{
    flatColor = vec4(0.0,1.0,0.0,0.5);
}
Run Code Online (Sandbox Code Playgroud)

并且它们都使用不同的变量来表示"颜色"(在这种情况下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);
}
Run Code Online (Sandbox Code Playgroud)

无论我使用x还是使用它都很好y.


此外,我们有一个预定义的gl_FragColor.有什么区别,为什么人们通常坚持使用他们自己的变量?

opengl glsl

76
推荐指数
2
解决办法
3万
查看次数

将值列表传递给片段着色器

我想将一个值列表发送到片段着色器.它是一个可能很大(几千个项目长)的单精度浮标列表.片段着色器需要随机访问此列表,我想在每个帧上刷新CPU的值.

我正在考虑如何做到这一点:

  1. 作为数组类型的统一变量("uniform float x [10];").但是这里似乎有限制,在我的GPU上发送超过几百个值非常慢,而且当我宁愿在运行时更改它时,我还必须对着色器中的上限进行硬编码.

  2. 作为高度为1且列表宽度的纹理,然后使用glCopyTexSubImage2D刷新数据.

  3. 其他方法?我最近没有跟上GL规范中的所有变化,也许还有一些专门为此目的设计的方法?

opengl glsl

70
推荐指数
3
解决办法
4万
查看次数

创建GLSL阵列的制服?

我想留下OpenGL的灯光,然后自己做.我希望我的着色器允许可变数量的灯光.

我们可以在GLSL着色器中声明一组制服吗?如果是这样,我们如何设定这些制服的价值?

arrays opengl shader glsl

65
推荐指数
2
解决办法
5万
查看次数

内部映射着色器自阴影

我正在修补Joost van Dongen的内部映射着色器,我正在尝试实现自我阴影.我仍然无法弄清楚阴影投射光矢量需要的坐标.你可以在这里看到一些有用的演示 我已经附加了光线位置,偏移到相机位置只是为了看看发生了什么,但显然它没有看起来也不错.着色器代码如下.在片段着色器中查找SHADOWS DEV.有问题的向量是:shad_Eshad_I.

顶点着色器:

varying vec3 oP; // surface position in object space
varying vec3 oE; // position of the eye in object space
varying vec3 oI; // incident ray direction in object space

varying vec3 shad_E; // shadow light position
varying vec3 shad_I; // shadow direction

uniform vec3 lightPosition;

void main() {

    // inverse veiw matrix
    mat4 modelViewMatrixInverse = InverseMatrix( modelViewMatrix );

    // surface position in object space
    oP …
Run Code Online (Sandbox Code Playgroud)

raytracing glsl shadow webgl three.js

60
推荐指数
1
解决办法
1612
查看次数

如何使用OpenGL ES 2.0着色器执行这些图像处理任务?

如何使用OpenGL ES 2.0着色器执行以下图像处理任务?

  • 色彩空间变换(RGB/YUV/HSL/Lab)
  • 旋转的图像
  • 转换为草图
  • 转换成油画

opengl-es image-processing glsl opengl-es-2.0

53
推荐指数
1
解决办法
2万
查看次数