2014年12月21日日曜日

8.2.MMD 音声同期

MMDに音声同期をさせます。

前回も説明した関数を少し説明しておきます。
MP3のオープンと開いたファイルにエイリアスをつけておきます。
mciSendString(TEXT("open ../Release/zzz.mp3 alias __MP3__"), NULL, 0, NULL);
音声にオフセットをつけます。微妙なタイミングの調整ですね。
mciSendString(TEXT("seek __MP3__ to 400"), NULL, 0, 0);
音声を再生します。
mciSendString(TEXT("play __MP3__ notify"), NULL, 0, hWnd);
再生中の音声の位置を取得します。下記ソースではそこから更新タイミングを算出しています。
mciSendString(TEXT("status __MP3__ position"), szBuf, sizeof(szBuf) / sizeof(TCHAR), NULL);

2014年12月18日木曜日

8.1.MP3 音声再生

せっかくなので、音声再生させます。
今はタイマでモデル更新していますが、音声の経過で更新するのが普通ですね。
MP3を mciSendString 関数を使って再生します

7.5.MMD Open GL シャドウ(ステンシルバッファ)

7.4の動画は影をつけてしまっていました。
OpenGLのステンシルバッファを利用して影を表示しています。以下コード。

7.4.MMD アプリ実行

さっそく実行しました。

2014年12月17日水曜日

tips 実行ファイルに作業パスが含まれて、素性がばれる!

Release の デバッグ情報の生成をOFFしましょう。
pdbファイルが作成されなくなって、実行ファイルに作業パスが含まれないようになります。
ユーザ名とかが含まれているのが嫌な場合に。。。。

tips msvcr120.dll msvcr140.dll がない?

作成したアプリを他のPCで動かそうとしたらDLLが無いので動きません。
下記対応方法があります。
1.他のPCにVisualStudioをインストールする
2.作成したPCの C;\windows\system32\msvcr120.dll をアプリと同じディレクトリに入れておく。(おすすめ)
3.アプリをマルチスレッドDLL (/MD) ではなくて、マルチスレッド (/MT) で作成する。

error MD_DynamicRelease MT_StaticRelease

error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MD_DynamicRelease' が MT_StaticRelease の値 'main.obj' と一致しません。

プロパティ→構成プロパティ→C/C++→コード生成→ランタイム ライブラリの設定が
リンクするライブラリ、共通プロパティなどと異なる場合に出ます。
何と何が違うのかもきちんと出力されますので、違うところを合わせてあげてください。

2014年12月16日火曜日

7.3.MMDアプリ作成

とりあえず何かモデルに踊ってもらいましょう!

1.空のプロジェクトを作成します。

2.ソースコードをかきます。最後に載せます。
3.インクルードパスを通します。

4.MMDとBulletPhysicsを共有化し参照します。

X.マルチバイト文字を使用することとしておきます。
X.ランタイムライブラリはマルチスレッド DLL(/MD)でビルドします。

2014年12月15日月曜日

7.2.MMD 下準備② MMD をライブラリ化

直接プロジェクトに組み込んでもいいのですが、この際libにします.too。
1.Win32コンソールアプリケーション"MMD"を作成します。
2.次へ→スタティックライブラリを選択します。
3.ARTK_MMD_src/src/MMD(前回DLしておいたもの)を下記の通り登録します。

4.インクルードパスを通します。

5.ビルドします。MMD/Release/BulletPhysicsWrap.libができます。

X.マルチバイト文字を使用することとしておきます。
X.ランタイムライブラリはマルチスレッド DLL(/MD)でビルドします。

7.1.MMD 下準備① Bullet Physics のWrapper をライブラリ化

直接プロジェクトに組み込んでもいいのですが、この際libにします。

1.空のソリューション"MMD"を作成します。

2.新しいプロジェクトを追加します。

3.Win32コンソールアプリケーション"BulletPhysics"を作成します。


4.次へ→スタティックライブラリを選択します。

5.ARTK_MMD_src/src/BulletPhysics(前回DLしておいたもの)を下記の通り登録します。

6.インクルードパスを通します。

7.ビルドします。MMD/Release/BulletPhysicsWrap.libができます。


X.マルチバイト文字を使用することとしておきます。

X.ランタイムライブラリはマルチスレッド DLL(/MD)でビルドします。

2014年12月12日金曜日

5.OpenGL サンプルプログラム

新しいプロジェクトを追加します。

まずはコード。(折りたたみ機能ほしいね。(折りたたみできました。

2014年12月10日水曜日

4.GLUT サンプルプログラム

出来上がった freeglut と glew を使って 簡単なプログラムを実行します。


サンプルプログラムを用意します。

6.Bullet Physics コンパイル

ダウンロードしたbuild3-masterのbuild3の下に vs2010.bat があるので実行。
すると vs2010 ディレクトリが作成され、その中に sln ファイルができる。

必要なのはBulletCollision BulletDynamics LinearMath の3つ

すべて、ランタイムライブラリをマルチスレッドDLL設定にしておきます。

ビルドします。
binディレクトリに libファイルが3つできます。

3.glewのコンパイル

ダウンロードしたソースコード一式を展開すると、build/vc12/glew.slnがあるので、Visual Studio Express 2013で開く。 すでにプロジェクトでglew_sharedが選ばれているので、ビルド。
glewはデバッグしないので、Releaseでコンパイルします。
bin/Release/Win32の中にglew32.dllができます。
lib/Release/Win32の中にglew32.libができます。


MXがついた構成はMultiple Rendering Contextsをサポートさせたい場合

2.freeglut コンパイル

ダウンロードしたソースコード一式を展開すると、VisualStudio/2012/freeglut.slnがあるので、Visual Studio Express 2013で開く。
すでにプロジェクトでfreeglutが選ばれているので、ビルド。

2010プロジェクトから置換しますか?って聞いてきますので、Yes!
glutはデバッグしないので、Releaseでコンパイルします。
libの中にfreeglut.libとfreeglut.dllができます。

Release staticってなに?って方はお調べください。

マルチスレッド(/MT)でビルドしていますがマルチスレッドDLL(/MD)のほうがいい気がします。

2014年12月9日火曜日

1.Visual C++ & OpenGL ソースコードのダウンロード

Visual C++からOpenGLを使うためには
freeglutからsource 2.8.1をダウンロード。
GLEWからsourceをダウンロード。
ついでに、Bullet Physicsもダウンロード MMDもここからダウンロードしておく。

どうしてGLUTじゃなくて、freeglutなの?
という方は自分で調べてみてくだされ。

Vitual Studio Express 2013 ダウンロード

Visual Studio Express 2013 Download
目的によっても違うのですが、Visual Studio Express 2013 with Update 4 for Windowsをダウンロードします。 私の場合はISOを落としてインストールしました。

どうでもいい話(1)

どうでもいい話だが、、、
Visual Studio express 2013 を再インストールするに当たり、すべてアンインストールしよう!
Visual Studio 2005あたりから入っているが、すべて消そう。
ポリシーとして、あまりwindowsを汚さない!

2014年12月8日月曜日

Visual Studio Express 2013 C++ と OpenGL

Visual Studio Express 2013 C++ で OpenGL を利用するための準備。
1.Visual Studio Express 2013 をインストール
2.glew32.dll が必要である。glewのsourceをDL。Visual Studio Express 2013 C++でコンパイルする。
3.glut32.dll が必要である。freeglutのsourceをDL。Visual Studio Express 2013 C++でコンパイルする。
コンパイル済みのDLLがあるが、汎用性を考慮してコンパイルする。
(実はコンパイル済みのDLLでいろいろはまった。。。。)

はじめに

Visual C++とOpenGLを使ってMMDを実装していきます。
OpenGLと音声、動画、などを扱っていこうと思います。
いろいろ調べて、実装は完了したのですが、備忘録的にブログを作成していきます。
ソースコードも積極的に載せていこうと思います。