0

これはかなり初心者の質問ですが、多くの計算を必要とする OpenGL で複雑な形状をレンダリングすることを考えると、それを後で再び開くことができるモデルのような状態にエクスポートする方法はありますか?

プログラムの起動時に形状が計算されるため、プログラムの外部で (Blender などを使用して) それらを作成することはできません。レンダリングは、移動、回転、描画などを行います。ただし、形状を編集する必要はありませんが、3D 状態にしたいので、画像を保存することはできません。

OpenTK 1.0、VB.NET (.NET 4) を使用しています

4

2 に答える 2

3

明らかな可能性は、頂点をファイルに書き込み、必要に応じて再ロードすることです。特別な理由がない限り、Wavefront OBJや Ogre3dメッシュ XMLファイルなど、多くの既存のファイル形式のいずれかを使用することをお勧めします。

于 2010-10-09T15:37:00.003 に答える
1

これは、OpenGL ディスプレイ リストにとって理想的な状況のように思えます。それらを使用する方法は、最初に使用するディスプレイ リスト ID を OpenGL に要求することです。

GLuint draw_id = glGenLists(1);

(一度に複数の連続した ID を要求することもできますが、この場合は 1 つだけ要求しています) 次に、最初に描画ルーチンを介して、glNewList を呼び出します。

glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();

これは実際には形状をレンダリングしないことに注意してください (形状をレンダリングする glNewList で GL_COMPILE_AND_EXECUTE を使用できます、一般的に推奨されません)。

さて、オブジェクトを描画する必要があるときはいつでも:

< set up your OpenGL matrices >
glCallList(draw_id);

最後に、作業が完了したら、glDeleteLists を使用できます。

いくつかの最適化を行うことができ、すべての関数呼び出しのオーバーヘッドが取り除かれるため、表示リストは実際にレンダリングを高速化できます。

現在、技術的には、OpenGL ディスプレイ リストは OpenGL 3.0 以降 (glTranslate、glVertex glBegin... grrr と共に) では推奨されていません (ただし、削除されていません!)。将来の証明として、頂点配列を使用する必要がありますが、それはかなり複雑です。

于 2010-10-09T21:33:05.443 に答える