2015-08-14 23 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)