2013-09-28 67 views
0

我想渲染紋理與OpenGL + GLSL着色器。首先,我試圖用白色填充30x30紋理的每個像素。我傳遞到0到899的頂點着色器索引,表示紋理的每個像素。它是否正確? 頂點着色器:Opengl GLSL渲染紋理

flat in int index; 

void main(void) { 
gl_Position = vec4((index % 30)/15 - 1, floor(index/30)/15 - 1, 0, 1); 
} 

片段着色器:

out vec4 color; 


void main(void) { 
color = vec4(1, 1, 1, 1); 
} 

回答

1

您正在試圖使900個頂點,每個像素一個頂點?你爲什麼這樣做?你使用的是什麼原始類型。這隻有在你使用點時纔有意義,但是你需要對輸出座標進行一些細微的修改才能真正擊中碎片中心。

通常的做法是渲染一個只填充整個幀緩衝區的四元組(簡單表示爲只有4個頂點的trinagle條)。爲了達到這個目的,你只需要將視口設置爲完整的frambeuffer,並且渲染是從(-1,-1)到(1,1)的四倍。

請注意,在這兩種方法中,您都不需要頂點屬性。您可以只使用gl_VertexID(直接替換爲您的方法中的index,或直接替換爲四個四個頂點座標的常量數組的索引)。

+0

我想呈現900頂點,因爲我想能夠改變紋理的每個像素的顏色,我使用GL_POINTS。 – user1760770

+0

@ user1760770:welll,您也可以使用該四合一應用更改每個單點的顏色。爲每個片段調用片段着色器。如果您擔心如何通過片段着色器獲取數據:紋理是standrad的答案。您甚至可以使用TBO直接訪問FS中的某個緩衝區對象。 – derhass

+0

我不太清楚如何在片段着色器中獲取片段的位置。 – user1760770