2015-08-14 19 views
1

我已经开始尝试the info-beamer software Raspberry Pi。它似乎支持显示PNG,文本和视频,但是当我看到GLSL基元时,我的第一本能是绘制纹理映射多边形。如何在信息投影仪node.lua程序中绘制多边形?

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

对于GL绘图的例子,我已经在info-beamer-nodes on GitHub中进行了大量的讨论,但是相关的例子已经逃过了我的注意。

如何在任意UV贴图多边形上使用信息投影仪的GLSL着色器?

+1

你可以添加你想要做什么的更多信息?也许有另一种方式来实现,而不使用目前不支持的三角形网格。 – dividuum

回答

1

根据info-beamer作者的评论,很明显,绘制任意三角形的函数在info-beamer 0.9.1中不可用。

我打算尝试的具体效果是在边缘淡化为透明的矩形。幸运的是,info-beamer-nodes源代码中的30c3-room/example示例了一种技术,我们将图像绘制为由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 = 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)