ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

C#で3Dモデルを表示したい場合の方法メモ

色々と方法はあるようですが、古さ・情報の多さ・手順の煩雑さ・不具合の有無などそれぞれに色々なメリット・デメリットが存在するようです。

とりあえず調べて分かった範囲で雑にメモしておきます。

 ※随時更新

Managed DirectXを使う方法


Managed DirectX というもののおかげで C# でも DirectX を扱うことができるようです。

怖いものなんてない!!: C#で「using Microsoft.DirectX;」をすると参照エラーになる

 Visual Studio Community 2017をインストールするとDirectX SDKも同時にインストールされている様子。しかしusingディレクティブでDirectX関連のネームスペースを指定してもエラーになるので、関連するDLLファイルを直接参照してあげる必要があるようです。

C#でゲームプログラム講座 - DirectX - DirectGraphics①

 DirectXでゲーム用に3Dモデルを描画することについて丁寧に説明されています。
 ただしテクスチャを貼ってアルファブレンディングするところで更新が止まっています。

ステップアップ (Managed DirectX Direct3D) - ソーサリーフォース

 モデルの描画・ライティング・カメラと一通り丁寧に解説されています。
 ただし今の自分の環境ではサンプルの実行ファイルが起動できません。
 また、提示されているコードを試してみるとフォームが表示されず。。

C#でツールを作る その1-Direct3Dの初期化- - while( c++ );

 順に更新記事を辿っていくと記事も多く色々と試されています。

3D でウインドウを表示

01 - DirectX + C# 3D basic Terrain Generator Tutorial (setting up DX plus 1 basic triangle) - YouTube 

SlimDXを使う方法


SlimDX - Wikipedia

 SlimDXC# で DirectX11 を使うためのラッパーだそうです。
 Microsoft公式のラッパーよりも使い易いとか。
 SlimDXの公式サイトが見れない状態ですが、Visual StudioからNuGetで検索してインストールすることで無事に動作しました。

C#でDirectX11入門一覧 (SlimDX入門)|Memeplexes

 SlimDXを使った3D表示についてかなり丁寧に解説されています。
 しかもカメラ・ライティング・テクスチャなど一通り取り上げられています。
 こちらをベースに勉強していくと良さそうです。
 掲載されているコード自体にはコメントを記載されていないので、とりあえずコードを移植したら、解説をじっくり読みつつ自分で該当箇所にコメントを入れていく感じで見ていっています。

C#でDirectX 軽い気持ちでSlimDXを使うとき用ライブラリSlimDXSketchを作りました - 渋谷ほととぎす通信

 ひとつ前のSlimDX入門の記事をアレンジして解説されています。
 こちらの「三角形を描画する」の記事では、「myEffect2.fx」という名前のファイルを追加して、記事中で解説されているシェーダのコードをこちらに記載し、実行ファイルと同じ場所に置いてやればOKです。

という訳でとりあえず三角形の描画ができました!

f:id:moko_03_25:20190108171148j:plain

 

OpenTKを使う方法


OpenTK(Open Toolkit Library)は C#OpenGL を使うためのラッパーだそうです。
こちらもNuGetからインストールするので良いようです。

Index | #region OpenTK

 OpenTKの使い方をかなり多岐に渡って解説されています。
 Windowsフォームに組み込む際に関しての解説もあります。

MonoGameを使う方法

 

MonoGame

 C#で記述できてDirectXを扱い易くしたというXNAは終了しましたが、マイクロソフト自身がXNAを移植したものがMonoGameだそうで、XNAのコードがほぼそのまま動くそうです。

 ちなみにこの記事を書いた2019.1.13 時点では、公式サイトでDLできる最新バージョンは 3.7.1 で、インストーラーにVisual Studio 2017のTemplateが含れていました。

MonoGameで2Dゲームを作る(前書き) - Qiita
MonoGame入門Ⅰ - Qiita
MonoGame で 3D 描画 - Qiita

 MonoGame自体の解説が少なそうですが、XNAのサンプルが活用できるようなのでそのあたりでカバーできて良いかも知れません。

かんたんXNA4.0 (XNA入門)|Memeplexes

 SlimDXの項目でもリンクを貼っていますが、こちらではXNAも豊富に解説されています。
 ただMonoGameだとすんなり画像が読めないなどあるのでこちらを参考にしてうまくいきました。

ActiVizを使う方法


Kitware - Experts in Visualization Technologies and Image Processing
VTK - The Visualization Toolkit

 ActiVizC# で VTK(The Visualization ToolKit)を使うためのラッパーだそうです。
 こちらもNuGetからインストールするので良いようです。

C#で3Dモデル表示(VTKのC#ラッパActiVizによる方法) - whoopsidaisies's diary

SharpDXを使う方法


C# de げぇむプログラマー - SharpDX(DirectX) Top