2016-05-07 1 views
0

私はOpenGLでピッキング機能に取り組んでいます。私は、モデルが三角形であるとき、私はglPolygonMode(GL_FRONT_AND_BACK, GL_Lines);を使用して3本のラインをレンダリングすることができることを知っている: 1OpenGLでGL_LINESを使用する場合、2つのエンドポイントのみをレンダリングする方法は?

私もモデルが三角形であるとき、私はglPolygonMode(GL_FRONT_AND_BACK, GL_Points);を使用して3ポイントをレンダリングすることができることを知っている:

2

今私はこの問題に取り組んでいます:GL_LINESを使って線をレンダリングするときに2つの端点をレンダリングする方法を見つけることができません。 GL_LINESの仕組みを制御するglPolygonMode()に似たものはありますか?

+0

「glLineMode()」、AFAIKなどはありません。 – user3078414

答えて

1

GL_LINESは、プリミティブ(三角形)がこの場合にどのように満たされるかを記述する。

塗りつぶされた三角形ではなく、一連の線または連結されていない点として表示されていても、元のプリミティブを漠然と作成することができます。しかし、ラインの場合、ポイントを何かに単純化すれば、あなたが見ているもの(ポイントがどのように接続されたか)を理解するのに必要な重要な情報が失われます。

ラインモードは、これに照らして意味をなさないでしょう。実際に存在していた最も近いものは、おそらくラインの点描です。

代わりに、GL_POINTSをプリミティブとして使用してください。あなたが達成しようとしているもののラインは必要ありません。

0

方法GL_LINES作品を制御glPolygonMode()に似たものはありますか?

一言で言えば、いいえ。自分で(エンドポイントだけを送信するだけで)これを実装する必要があります。

0

GL_LINESではなくGL_POINTS primitivesとしてレンダリングできます。もちろん、1つのドット以上の大きさになるようにポイントサイズを適用する必要があります。

0

すでに指摘したように、glLineMode()呼び出しのようなものはありません。簡単な状態設定で行をポイントに変えることができます。

描画呼び出しを変更できる場合は、ポイントを描画するときには、明らかにGL_POINTSをプリミティブ型として使用できます。

他の回答が主張しているのとは反対に、描画呼び出しを変更できないと仮定しても、これを行う方法があると思います。線を入力プリミティブ型として持つジオメトリシェーダを使用し、出力プリミティブ型として指すことができます。ジオメトリシェーダは次のようになります。

layout(lines) in; 
layout(points, max_vertices = 2) out; 

void main() { 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 

    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 

    EndPrimitive(); 
} 
関連する問題