-1

モデル soucast1.3DS を持っています。このモデルを CAD Autodesk Inventor で開くと、次のようになります。

Autodesk Inventor のモデル

OpenGL を使用した単純なアプリケーションを使用すると、

OpenGL アプリのモデル

GL.Color3(Color.Aqua);
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
DrawMatrix(); // draw model
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
GL.Enable(EnableCap.PolygonOffsetLine);
GL.PolygonOffset(-1.0f, -1.0f);
GL.Color3(Color.Black);
DrawMatrix(); // draw model

だから、私の質問は:

Inventor からわかるように、アプリケーション (OpenGL) で同じ結果を得るにはどうすればよいですか? (領域の端のみが黒くなります)

4

2 に答える 2

2

多くのアプローチがあります。トリッキーなシェーダーの組み合わせ、ステンシル バッファー、またはオブジェクト スケーリングを使用できます。わずかに拡大したモデルを黒色で描画し、前面を落とします (例: GL_CULL_FACE=GL_CW)。次に、正しいスケールと色で通常のモデルを描画し、背面 (GL_CCW) を落とします。

ゲームで漫画のようなシェーディングに使用できる完璧なソリューションではありません。CAD には不正確すぎる可能性があります。あなたに合わない場合は、google opengl edge Outline を参照してください。

明確にするために:3Dモデリングソフトウェアは、面に加えてエッジに関する情報を常に持っているため、モデルが描画された後にエッジラインを描画するだけで、アウトラインが得られます. エッジがない場合 (または、ゲームのように、メモリ消費やその他の問題のためにエッジを持ちたくない場合)、何らかの形のエッジ検出またはハックを実行する必要があります。

于 2013-09-19T08:37:09.660 に答える
0

私はそれを解決しました。モデルを STL (三角形と法線を含む) に変更し、検出された領域 (法線の比較) と境界線を検出するアルゴリズムを記述します。

結果は次 のとおりです。

于 2013-09-25T06:54:26.023 に答える