如何在info-beamer node.lua程序中绘制多边形?

时间:2015-08-14 18:53:16

标签: lua raspberry-pi glsl

我已经开始尝试使用the info-beamer software进行Raspberry Pi。它似乎支持显示PNG,文本和视频,但是当我看到GLSL原语时,我的第一直觉就是绘制纹理映射的多边形。

不幸的是,我找不到允许我使用着色器绘制一个三角形的文档。我使用GLSL做了一些玩具,所以我熟悉设置变换矩阵和绘制由顶点和片段着色器过滤的三角形的管道。

我已经在info-beamer-nodes on GitHub中了解了GL绘图的例子,但到目前为止,相关的例子都没有引起我的注意。

如何在任意UV映射多边形上使用info-beamer的GLSL着色器?

1 个答案:

答案 0 :(得分:1)

根据info-beamer的作者的评论,显然在info-beamer 0.9.1中没有绘制任意三角形的函数。

我要尝试的具体效果是一个在边缘处褪色透明的矩形。幸运的是,信息投影节点源中的30c3房间/示例说明了一种技术,我们将图像绘制为由GL片段着色器过滤的矩形。 1x1白色PNG是一个非常合理的模板,其颜色可以在我的应用程序中通过着色器的计算来替换。

当任意三角形不可用时,支持UV映射的矩形(和旋转的矩形),适用于许多用例。

我使用了以下着色器:

uniform sampler2D Texture;
varying vec2 TexCoord;
uniform float margin_h;
uniform float margin_v;

void main()
{
  float q = min((1.0-TexCoord.s)/margin_h, TexCoord.s/margin_h);
  float r = min((1.0-TexCoord.t)/margin_v, TexCoord.t/margin_v);
  float p = min(q,r);
  gl_FragColor = vec4(0,0,0,p);
}

和我的node.render()

中的这个LUA
y = phase * 30 + center.y

shader:use {
margin_h=0.03;
margin_v=0.2;
}
white:draw(x-20,y-20,x+700,y+70)
shader:deactivate()

font:write(x, y, "bacon "..(phase), 50, 1,1,0,1)