2016-03-23 4 views
2

Iはワイヤフレーム形式でOpenGLでオブジェクト(3.3)を描画しようとしているとそれをレンダリング、のみ、その鋭い縁部(すなわち、隣接する面の法線が持っている場合あるデルタ角)とその輪郭/シルエット/境界線との間の距離である。私のデータ構造は、三角形とその頂点のみが格納された三角形メッシュです。 私は"Hardware Determined Edge Features" by Morgan McGuire and John F. Hughes"Hardware Generated Object Silhouettes" by Michal Valient の両方をオンラインで計算しました。これは両方とも、エッジ決定にGPUを使用できるようにするための「回避策」を実装する必要がある理由です。抽出鋭い三角形メッシュからエッジとその輪郭とOpenGL

私はそれがシャープなエッジをオフラインいったん決定し、後でレンダリングのために何とかこの情報を保存し、視点にオンライン依存オブジェクトの輪郭/シルエット/境界を決定するために最善だろうと思いました。

は私の検索の間に私はCGAL、ハーフエッジ、OpenMeshにつまずいたが、それのいずれかを使用しての経験がありません。

私の質問は次のようになります:
鋭いエッジを特定する方法は?または、メッシュを通過して隣接リストを作成し、すべてのエッジをテストしますか? (顔の法線とドットプロダクトを取得してそれらの間の角度を取得するクロスプロダクト)
これを後で簡単にレンダリングするには、これをどのようにして保存するのですか?鈍いエッジの縮退三角形を作成しますか?あまりにも多くの情報がこの方法で失われますか?行を格納し、描画する形式を使用しますか? どのようにレンダリングするのですか?オンライン輪郭/シルエットを決定する方法

これは広範な質問ですが、誰かが私をある方向に導くことができますし、言及されたライブラリ(CGAL、OpenMesh)のいずれかで前にこれを行ったこともあります。

答えて

2

私が間違っていない場合、鋭いエッジは常に視点に依存します。ノーマルが正面または背面に向かっているかどうかを判断するには、「視点」が必要です。

これは、CPU上で1回だけでなく、ジオメトリシェーダでよく行われることです(カメラを移動する場合は機能しません)。ジオメトリシェーダ技術のために

、あなたは+その隣接関係を三角形を送信する必要があります。この情報を使用してこれは一度だけhalfedges構造(迅速かつ簡単な方法)を用いて計算することができ、またはあなたが、あなたは(あなたがGPUに送信することを)あなたのインデックスリストを作成

for each triangle t1 
    for each triangle t2 
     if t2 has 2 indices common with t1 then 
      add t2 to t1 adjacency list 
     endif 
    endfor 
endfor 

のようなループを持つことができます、

for each triangle t1 
    indexList.append(t1.a, t1.b, t1.c) 
    for each triangle t2 in t1 adjacency 
     idx = find the index not common with t1 
     indexList.append(idx) 
    endfor 
endfor 
+0

次のようになりますどのご回答いただきありがとうございます。私が理解しているように、「視点」が何であっても、シャープなエッジは鋭いエッジに留まります(バックフェースのカリングが後方に向いている部分を省略するために使用される場合)。いいえ? ハーフエッジ構造を作成して、隣接する面の法線を簡単に計算し、シャープなエッジである線を簡単に保存することができますか? obj-fileとGL_LINES経由でレンダリングしますか? シルエットについてのみ、例えば、説明したように「視点」が必要である。 [ここ](http://ogldev.atspace.co.uk/www/tutorial39/tutorial39.html)。正しい? – Michael

+0

鋭いエッジを見つけるために、この論文http://e-collection.library.ethz.ch/eserv/eth:4390/eth-4390-01.pdf(メッシュエッジ検出)を見てください。あなたはまだ輪郭線を検出する作業をしています。 バックカリングについてのご意見は、三角形の巻線を使用して実行され、頂点/ゲーム/テスシェーダの出力(https://www.opengl.org/wiki/Face_Culling)によって異なります。それは間接的に視点に依存します。 – Zouch

関連する問題