スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Xファイルを解析してみる

【リンク】 ◆解説系TOP◆

うーん 未だにゲームに使えるようなアニメーションの実装が出来ていない状況です。
もっと簡単な仕様になればいいのに・・・!と思う。

とりあえず、xファイルの解析をしてみることにしました。

"Xファイル"で検索すると、なんかアメリカの映画みたいなのがヒットするんですが、
コレではなく、3Dモデルを定義する方です。

解析は、単純に拡張子を.txtにして読むだけす。
(右クリック → 名前の変更 → .txtにする)

で、まずタダの立方体を作って中身を見てみました。
【参考画像】
四角1
-----------------------------------------------------------------------
xof 0302txt 0064   //可変長ヘッダーの定義

template Header {
<3D82AB43-62DA-11cf-AB39-0020AF71E433>
WORD major;
WORD minor;
DWORD flags;
}

//中略。 しばらく"template"の記述が続く

Mesh { //頂点の定義。
8; //←頂点の数。 立方体の場合は8個と言う事。
-1.00000;1.00000;-1.00000;, //それぞれの頂点のx、y、z
1.00000;1.00000;-1.00000;,
1.00000;-1.00000;-1.00000;,
-1.00000;-1.00000;-1.00000;,
1.00000;1.00000;1.00000;,
1.00000;-1.00000;1.00000;,
-1.00000;1.00000;1.00000;,
-1.00000;-1.00000;1.00000;;

6; //面の数。立方体(サイコロの形)の面の数は6個。
4;0,1,2,3;, //頂点インデックス。
4;1,4,5,2;, //面を作る頂点の数: 頂点の番号 という形式になっている。
4;4,6,7,5;, //立方体は四角形のポリゴンだけなので、すべて4つの頂点となっている。
4;6,0,3,7;,
4;6,4,1,0;,
4;3,2,5,7;;

MeshMaterialList { //マテリアルのリスト。表面の色や、テクスチャについての情報。
1; //マテリアルの数。
6; //面の数。
0, //それぞれの面に、何番のマテリアルを適用するか?の指定。
0, //今回はマテリアルの数は1個なので、全部マテリアル番号0番となっている。
0,
0,
0,
0;;
Material { //マテリアルの定義。
1.000000;1.000000;1.000000;1.000000;; //赤、緑、青、透明度の指定
0.000000; //"鏡面反射"の強さ(power)
0.000000;0.000000;0.000000;; //"鏡面反射光"の成分(Specular)
0.000000;0.000000;0.000000;; //"発散光"の成分(Emissive)
}
}
MeshNormals { //法線の定義 (面に当たった光がどの方向へ反射するか?)
6; //法線の数。 今回は6個。
0.000000;0.000000;-1.000000;, //法線のx,y,z
1.000000;0.000000;0.000000;,
0.000000;0.000000;1.000000;,
-1.000000;0.000000;0.000000;,
0.000000;1.000000;0.000000;,
0.000000;-1.000000;-0.000000;;
6; //面の数。 立方体の面は6個。
4;0,0,0,0;, //面番号'0'に、法線番号'0'を指定する。
4;1,1,1,1;, (面番号は、上の方で定義してある。↑)
4;2,2,2,2;,
4;3,3,3,3;,
4;4,4,4,4;,
4;5,5,5,5;;
}
}

-----------------------------------------------------------------------
調べてみたところ、大体こんな感じになってました。
↓図に表すとこんな感じ。
立方体の図
(頂点番号や、4つ頂点番号で構成される面がどこなのか、の確認が出来ると思います。
今一度、上記のXファイルのデータを見ると対応関係が分かるかと・・・!



複雑なメッシュや、アニメーション付きのXファイルの見てみた のですが、
中身がかなりエグい事になっていたので、見るのを止めました。
※頂点の数が4884個とか、ファイル全体で数万行は軽く超えていた為です。
(Xファイルの形式をちょっと確認するのに、 そんな膨大なデータは要らないのである。

で、下記の画像をご覧下さい。
【参考画像】
自作読み込み
ただの3Dモデルなのですが、これはD3DXLoadMeshFromX関数などを使わず
txtファイルから、3Dモデルの情報を読み込み、表示するクラス
勝手に作成して表示させました。

--------------------------------------------
Mesh mesh;
mesh.LoadFile("Sample.txt");
mesh.DrawMesh(g_pd3dDevice);
(←コレはBeginScene()とEndScene();の間に書く)
--------------------------------------------
これだけを記述すれば簡単な3Dモデルが描画されるという、便利なシロモノです。

ただ、テクスチャやアニメーションなどには まだ未対応。
あと、読み込みの部分はロクにエラーチェックをしていないので、
少しでもデータの形式が違うと、プログラムが壊れます。
(もはやポンコツクラスである。)

うーん、でも改良を重ねれば安全性の向上、
アニメーションの対応なんかも出来そうな気がする。

自分の理解しやすいクラスを用いたほうが、ゲームの開発も早くなるような気がするんですよ。

ちょっと独自形式のメッシュ読み込みクラスの作成を頑張ってみようかなと思う!(`・ω・´)
(まぁ、DirectXのサンプルを完全に理解できたほうが好ましいのですが)
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

No title

私もOpenGLにXファイルのようなフォーマットがなくてXファイルの解析を始めたところです。
ここに記事のおかげで、だいぶXファイルの解析が楽になりました。
今までも、何度かこちらに顔を出したことがあったのですが、閲覧だけでした。
これからも更新がんばってください^^;

No title

おぉそうでしたか!
少しでも役に立てて良かったですv-290

こういうのって、解説しているサイトとかも少ないですし、
あったとしても良く分からなかったりしますからねe-260

まだ、上手く纏まってない(カバーしきれてない)所とか
ありますので、時間が出来れば何か記事を書いていきたいです。
(個人的に、初心者からでも2D、3D、DirectXなんかの使用法を理解しゲームを作れるようになるページ(サイト)を作りたいなーと思ってますv-411

サイトを拝見しましたが、ライブラリの公開や自作ゲームの公開なども
コンテンツとしてあるみたいなので、更新とかが楽しみです。
頑張ってください!v-290e-267

No title

>サイトを拝見しました
うわぁ・・・、恥かしい・・・。
まだまだ人に見せられるものでなく、未完成なのに・・・。(しかもTOPページ更新してなくて古いバージョンになってるし~~)
URIを記入したことにちょっと後悔^^;;
忙しくて更新できていない状態で・・・。

ところで私は、OpenGLでの開発と同時にスキンメッシュを同時進行で行ってるんですが、まるぺけさんのところを参考にしても、うーんって感じですよorz
その61にわかりやすい例が載っていて勉強した後、前に挫折したその28を除いたら・・・?な状態になってしまいました。
conioさんは、スキンメッシュのアニメーションはどのように実装してますか?
D3DXLoadMeshHierarchyFromXはやはり使用しないで自作ですか?

最近Xファイルの解析を行ってみて気がついたことは、自分はまだまだDirectXをきちんと理解できていないんだなぁということでした。
今まで、DirectXの関数を使っていて出来る気になってた自分がここにいました。

ところで、話は変わってconioさんは、リンクに貼ってあることから、「C言語何でも質問サイト」出身の方ですか?
私も実は3年ほど前にあのサイトに出会ってプログラミングにはまってしまって、昔はDXライブラリを使用していたのですが、DirectXに手を出したりしている状態です^^;

No title

>サイト
いやいや、全然問題ないですよv-411
自分の方が意味不明な状態です。

一応、HPのサービスに参加したんですが、
現在ただのデータ保存庫みたいになってて、
もはやHPと呼べる代物ではありませんe-260

【自分のHPのTOP】http://rudora3.web.fc2.com/index.html
(アクセスした時間を表示する、スクリプトがあるだけになっている。
我ながら、意味がわからないページだと思う。)

スキンメッシュアニメーションは、
D3DXLoadMeshHierarchyFromXは使わず自作で実装しましたv-290

スキンメッシュアニメーションは、
要するに、 階層構造を作って、行列を掛け合わせ、
その行列をもとにMeshを表示できればいい
ので、

自分でXファイルの階層構造を読み込んで、階層構造を作るクラスとかを
自作して対応しました。

【参考URL】 http://rudora7.blog81.fc2.com/blog-entry-310.html
(スキンメッシュアニメーションの原理とかの解説)

【参考URL】 http://rudora7.blog81.fc2.com/blog-entry-401.html
(自作した、階層構造を作るクラス)


あと、自分のプログラミング歴(?)に関してですが、
----------------------------------------------------------
【1】コンソールアプリケーションのプログラムを作る
【2】"conio.h"を使った、コンソールアプリケーションのゲームを作る
【3】WindowsAPIでゲームを作る
【4】DXライブラリでゲームを作る
【5】DirectXでゲームを作る

----------------------------------------------------------
こんな感じになります。

で、【3】の段階で
C言語何でも質問サイトの存在を知り
DXライブラリ、DirectXの存在を知るみたいな流れでした。
(DXライブラリを使ったゲーム製作のときにお世話になりましたv-411

あと、DXライブラリはDirectXの面倒な手順を隠蔽したようなものなので、
いきなりDirectXの方に進んでもOKだと思いますよ!
(自分も途中でDirectXに進みました)

No title

おかげさまで、OpenGL+Win32APIな環境でxファイルから読み込んで表示することが出来ました!!
次はアニメーションですね。。。
なんというか、前よりも3Dに関する知識の整理がついた気がします。
ホームページですが、偶然なことにそのテスト、最近自分のローカルサーバー(Apache使用)でやったばかりです^^
同じ表示になってて、思わずニヤッっとしてしまいました。

私のプログラミング暦ですが、
①C言語の基礎の基礎を習う(この時は、何も面白いと感じなかった。。。)
②大学で数値計算の授業を習う(少し面白いと感じるようになる。)
③C言語何でも質問サイトに出会い、DXライブラリを用いたゲーム作成にはまる。
④DXライブラリがどのような処理を行ってみたいのか知りたく、また当時は3D機能が存在していなかったため、DirectXに手を出すも3度ほど挫折。
⑤C/C++の基礎を固めて、再出発。
⑥Win32APIを勉強。プログラミングにさらにはまる。
⑦DirectXで3Dゲームが作れるようになる。
⑧ライブラリ作成+いろいろと挑戦
という感じです^^;

ところで、話は変わりますが、メッシュの描画はシェーダとかも使用してるんでしょうか?

No title

おぉ! それは良かったですv-290

アニメーションについてですが、自分はまず始めに
キーフレームアニメーションを実装しました。
(モデルを、単純に 拡大縮小、平行移動させるだけ)

で、しばらくプログラムを根本の部分から作り直したりして、
スキンメッシュアニメーションの方も実装させました。
ともかく、色々と手こずった記憶がありますe-260

あと、メッシュの描画は普通にDrawPrimitive系の関数で描画してます。
※例の「ゲームつくろー!」サイトで、 シェーダを利用したサンプルを実行したことはあります。
(「おーシェーダで動いた!」と、ちょっと感動した。)


そして、アニメーションの行列演算の方は、
インデックスつき頂点ブレンディングで実装してます。

役に立つか分かりませんが、こちらで記事としてまとめてます。 ↓
http://rudora7.blog81.fc2.com/blog-entry-452.html


>ホームページ
そうでしたか!
もう本当に、表示されるか確認するだけでホームページの形を成してないですよね(笑

どうでもいいですが、最初は 「アクセスした訪問者のPC情報」を表示するスクリプトも置いてました。
ですが、いきなり アクセス時間と個人のPC情報が表示されると、
ウイルスかその他怪しいページに見えかねないので、削除しました。

>プログラミング暦
やっぱり3Dとかになると、意味不明で挫折もしやすくなりますよね。
あと、C言語の基礎を習ってる時は、自分も面白くなかったです(笑
ですが、後でDirectXなんかと組み合わせるとちゃんとしたゲームも作れると知って、
「へー!やってて良かったなー」とか思ったりしました。
コメントの投稿
管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

DirectX 9 3Dゲームプログラミング教室のレビュー

「DirectXを利用した3Dプログラミングをしたい」「3Dモデリングツールで作ったモデルをプログラムから利用した」と思っている方にお薦めの一冊です。 15歳から始められるか分かり


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。