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

我开始尝试使用 Raspberry Pi 上的 info-beamer 软件 进行实验。它似乎支持显示 PNG、文本和视频,但当我看到 GLSL 基元时,我的第一反应是绘制贴有纹理的多边形。

不幸的是,我找不到文档,使我能够使用着色器绘制甚至一个单独的三角形。我已经使用 GLSL 制作了一些玩具,因此熟悉设置转换矩阵和由顶点和片段着色器过滤的三角形的流水线。

我在 GitHub 上的 info-beamer-nodes 中搜索有关 GL 绘图的示例,但相关示例目前尚未引起我的注意。

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

点赞
用户995935
用户995935

根据 info-beamer 的作者的评论,可以明确地看出在 info-beamer 0.9.1 中没有可用于绘制任意三角形的函数。

我要尝试的特定效果是一个在边缘处淡化至透明的矩形。幸运的是,info-beamer-nodes 源代码中的 30c3-room/ 示例展示了一种技术,我们可以将一个图像绘制成一个矩形,然后通过 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); }

`` `

和这个 LUA 在我的 node.render()

`` ` y = 相位 * 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)

`` `

2015-08-14 19:56:34