2012-07-21 49 views
14

如何用着色器創建線條(可能是彩色的)?我正在使用可編程管道,我是openGL的初學者。我找不到一個關於如何用着色器繪製線條的例子..我想我必須將VAO(頂點數組對象)加載到着色器中,但那又如何?我應該使用哪些功能?openGL:帶着色器的線條

+0

你知道如何繪製三角形嗎?它確實沒有什麼不同,你只需指定GL_LINES而不是GL_TRIANGLES來代替glDrawArrays/glDrawElements – Tim 2012-07-21 17:58:18

+0

任何示例代碼? – 2012-07-21 18:12:20

回答

9

首先,設置使用shaderprogram。然後使用glDrawArrays(或元素,如果您的數據被索引)繪製線條,並使用mode = GL_LINES或其他線條繪製模式之一。

下面是一個代碼示例,用於在每個末端使用不同顏色的2D線條。如果陰影模式設置爲平滑,OpenGL將沿線插入顏色。

struct LineSegment_t 
{ 
    float x1, y1; 
    float r1,g1,b1,a1; 
    float x2, y2; 
    float r2,g2,b2,a2; 
}; 

int num_verts = lines.size()*2; 
glBindVertexArray(line_vao); // setup for the layout of LineSegment_t 
glBindBuffer(GL_ARRAY_BUFFER, LineBufferObject); 
glBufferData(GL_ARRAY_BUFFER, sizeof(LineSegment_t)/2 * num_verts, &lines[0], GL_DYNAMIC_DRAW); 
glDrawArrays(GL_LINES, 0, num_verts); 

如果您需要更多靈活性,可以通過從線端點創建矩形(4點)來使用三角形繪製線。在2D中,您可以通過使用法線/垂直線(-y,x)在所需的線上翻譯端點來創建4個點。在3D中,您需要確保三角形與廣告牌上的相機對齊。