2012-07-21 17 views
14

シェーダを使って線を描くにはどうすればいいですか?プログラマブルなパイプラインを使用しています。私はOpenGLの初心者です。シェーダで線を描く方法の例が見つかりません。シェーダにVAO(頂点配列オブジェクト)をロードする必要があると思いますが、それでは何ですか?どのような機能を使用すればいいのですか?OpenGL:シェーダのあるライン

+0

三角形を描く方法は分かりますか?それは本当に違いはありません、あなたはGL_TRIANGLESの代わりにGL_LINESを指定して、glDrawArrays/glDrawElements – Tim

+0

のサンプルコードを指定しますか? –

答えて

9

まず、シェーダープログラムを設定します。次に、mode = GL_LINESまたは他の線描画モードのいずれかを使用してglDrawArrays(またはデータがインデックスされている場合はElements)を使用して線を描画します。

ここには、両端に色の異なる2D線のコード例があります。シェーディングモードがsmoothに設定されている場合、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では、ビンボーディングのように三角形をカメラに合わせる必要があります。

関連する問題