web-dev-qa-db-ja.com

何を使う? Tao、SharpGL、OpenTK、DirectX P / Invoke、XNA、MDX、SlimDX、Windows APIコーデックパック

昔は簡単でした。あなたはあなた自身の3Dのものを作り、それからDirectXが来て、それからOpenGLが来ました。 .Net開発者にとって、MDXは素晴らしいものでした。その後、XNAがMDXを引き継ぎましたが、同じではありません。 XNAは、すべてのコンテンツがパイプライン化され、固定モデルなどのプリロードが行われる、非常にゲーム中心のようです。

それで、私たちは今どこに立っていますか?数日間のreasearch/trial&errorの後で、どこを見ても、半分開発されたライブラリ、オーバーヘッドのあるライブラリ、厳しい制限、または過度に複雑なライブラリを見つけました。

「フリーハンド」の3Dをやりたい。たとえば、3Dで画面に200kドットを表示し、30fpsでそれらを移動します(Kinect深度画像)。 3Dスクリーンセーバー、オーディオ分析プラグインなどを作成したいと考えています。これらはすべてコンテンツパイプラインのプレハブではなく、高いパフォーマンスが必要です。そして(ええと)私はそれを.Netからやりたいのです。

誰でも簡単/理解できるライブラリを使った経験はありますが、それでもある程度の自由とスピードは得られますか?

59
Tedd Hansen

OpenTK に着陸したようです。 OpenGL APIに多かれ少なかれ直接アクセスできるようになり、依存関係の負荷を必要としないと思います。

比較的わかりやすいです。開始するには、数行の(そして理解可能な)コード行が必要です。オブジェクトを保持していないので、パスごとに何でも自由に変更できます。これは、主にメモリへの安全でないポインタで作業しているので素晴らしいことです。

もちろんスピードと使いやすさを両立させるのは難しい。速度を上げるには、3D APIと直接通信する必要がありますが、使いやすさのためには抽象化が必要です。したがって、これは私が試した他のAPIよりも低レベルのAPIと見なす必要があります。プレハブキャラクターアニメーションを実行したい場合は、XNAがおそらくより良い選択ですが、私の使用(上記)の場合、これは今のところ非常に有望です(4〜5時間のハッキング)。

いくつかのサンプルコード:

private void Render()
{
   // Every frame
   GL.MatrixMode(MatrixMode.Modelview);
   GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
   GL.LoadMatrix(ref cameraMatrix);

   GL.Begin(BeginMode.Points);

   // Here I can add lots of points. I add 200k without any big problem.
   // It seems these points could have been passed in as an array pointer too,
   //  but I'll look at that later.
   GL.Vertex3(x2, y2, z2);

   GL.End();
   glControl.SwapBuffers();
}
13
Tedd Hansen

あなたがMDXが好きなら、SlimDXはあなたの路地のすぐ上にあるはずです。これは基本的にMDXの代わりですが、疑わしい設計上の決定の多くが修正され、さらに多くの機能が含まれています。 MDXで使用していたものはすべて、SlimDXに何らかの形で存在します。

8
MikeP

または、OpenGL用の別のC#ラッパーパッケージ:OpenGL DotNetもあります。私にとっては素晴らしい作品です! http://www.taylaninan.com/opengl-dotnet.php で確認してください。

OpenGLをバージョン4.4までラップし、550以上のOpenGL拡張機能をサポートします。また、GLU、GLUT、FreeGLUT、DevIL(開発者の画像ライブラリ)、ILU、DevIL用ILUTもサポートしています。

上記のライブラリ用の低レベルAPIです。

3
Taylan İnan

しばらく前に同様の問題に直面しましたが、以下はもちろん私たちの意見です。私たちの主な懸念の1つは、ライブラリが多用途であり、非常に高品質で無料の3D画像を生成し、インストーラーに余分な制約を課さないことです。つまり、正しいファイルをインストールする必要があるXNAなどです。これは頭​​痛の可能性のある原因のようでした。最終的には、DirectXを採用し、GUIをC#で記述しました。 3Dとの必要なすべての対話は、wndprocで行われました。これにより、DirectXの能力とC#によるGUI開発の容易さの両方が得られました。私たちはこれを後悔していません。

1
Pedery