Re: 3Dについて ( No.1 ) |
- 名前:管理人 日時:2006/11/01 13:14
れんさん始めまして、DXライブラリの管理人です。
うーん、3Dですか・・・
> D_IDirect3DDevice7 *GetUseD3DDevObj( void )
>
> もしかしてこれがデバイス取得なのでしょうか?
> でもこれはどうやって使うのでしょうか(汗
この関数の戻り値のポインタを使ってDirect3DDevice7 のAPIが使えます。
ですが、Direct3DDevice7 には「xファイルを読み込む」という機能や、
「モデルを描画する」という機能はありませんので、DrawPolygon3D の
機能を使ってxファイルを自力で表示させる位の作業が必要になります。
そして、xファイルを解析するところから自力で描画するまでをご説明しますと
それだけで一つの解説サイトが出来てしまう程の量になりますので、申し訳ありませんが
ご説明することは出来ません。(教えて差し上げられるほど私も理解していないという
のもありますし(汗))
なので、以下の条件で宜しければ3Dモデルを描画する機能をこちらで
作成したいと思います。
1.対応するのはテキスト形式のxファイルのみ
2.一つのモデルで使用できるテクスチャは1枚のみ
3.モーションを再生する機能は無し
4.モデリングツール上で設定できるマテリアルは無視
5.半透明の部分は正しく表示されない
6.3D初心者が作る機能なので他の3Dライブラリより明らかに処理が重い
7.4と同様の理由で3Dの技術的な質問には殆ど答えられない
8.作業期間は最長1ヶ月
3Dの描画機能をまともに実装しようと思ったら何ヶ月も掛かると思いますので、
とりあえず上記の様に限定された条件で。何事も無ければ2週間、何か詰まれば
1ヶ月程で出来ると思います。(モーション機能無しのただ表示するだけのもの
でしたら、毎日8時間くらい作業できれば2・3日で出来るかもしれませんが、
現在平日は作業時間が全く取れないので2週間〜1ヶ月となっています)
|
Re: 3Dについて ( No.2 ) |
- 名前:れん 日時:2006/11/02 00:39
うおおおお!
僕わるいこと質問したと思ってましたが
こんなに考えててくれていたなんて感激です(泣
やさしい管理人様でありがとうございます!
僕のゲームもまだあと最低3ヶ月はかかるので
そんな作業時間最長1ヶ月なんて1年でもまちます!
上記の条件でおつりがくるほど十分です!
わがまま申してすいませんがどうかお願いします(泣
|
Re: 3Dについて ( No.3 ) |
- 名前:管理人 日時:2006/11/02 13:30
れんさんどうも、DXライブラリの管理人です。
まあ、私もWindows環境で少しは3D関連をやって
おきたいと思っていたところですので・・・(汗)
で、早速ですが、宜しければ表示される予定のテキスト形式の
xファイルをテクスチャ用画像ファイルごと BQE00322@nifty.com まで
送って頂けないでしょうか?
全てのxファイルを完璧に再現するプログラムを作るのは大変ですが、
少なくともれんさんがお使いになるxファイルは確実に読み込めるように
したいと思いますので。(^^;
|
Re: 3Dについて ( No.4 ) |
- 名前:れん 日時:2006/11/03 00:57
どうもー!
メール送らせてもらいました。
なにとぞよろしくお願いします(_ _)
|
Re: 3Dについて ( No.5 ) |
- 名前:管理人 日時:2006/11/05 12:59
れんさんどうも、DXライブラリの管理人です。
> メール送らせてもらいました。
了解です、受け取りました。
というわけで、ちょっと早いですが、一応表示できました。
頂いたモデルを表示する為の実行ファイルをアップしましたので、
宜しければお試しになってみて下さい。m(_ _)m
(頂いたモデルデータは入っていませんので、頂いたモデルデータの
「三角形化」した方を、Model.X というファイル名にリネームして、
テクスチャファイルと一緒に実行ファイルと同じフォルダに置いて
ください)
http://homepage2.nifty.com/natupaji/temp/DrawModelTest.zip
今回作成したプログラムは、次のようなものです。
1.頂いたXファイルと少しでもデータ構造が違うと読み込めません
(Xファイルはかなり柔軟なデータ構造を定義できるファイル形式なのですが、
今回は頂いたXファイルのデータ構造の場合のみ正常に読み込めるような
決め打ちプログラムとなっています)
2.「三角形化」したモデルファイルのみ正常に表示されます
3.頂いたモデルの描画に Pentium4 1.7GHz で 3msec 程時間がかかります
(60fps時の1フレームにかけられる時間は17msec なので、1フレーム
に5個以上描画すると処理落ちしてしまいます。orz)
4.座標の指定はドット単位です
(例えば画面の中心に表示したい場合は x=320.0f y=240.0f z=0.0f に
配置して描画します。因みに頂いたモデルは半径 1.0f 以下の大きさ
でした ので、128倍にスケールアップして画面上に256x256の
大きさで表示されるようにしています)
1については、一瞬だけ、大抵のXファイルを読み込めるようなものにしようかな
と思ったのですが、予想よりずっと時間が掛かりそうなので(+技術的にもまだ
まともな3Dライブラリを作れる程の力がないので)それは止めて、最低限れんさんから
頂いたモデルを表示できるだけのものにしました。
2については、申し訳ありませんが三角形化の設定で出力したものを
使うようにして下さい。m(_ _;m
3については、PCでモデルを表示したことが今まで殆ど無いので
はっきりとは分かりませんが、多分遅いです。すいません・・・orz
(因みに、今回ライティングはディレクショナルライトのみとなっています)
4については、2Dの延長線的に捉えられるようにドット単位としました。
初めて3Dを扱うとカメラの設定を正しく行って画面にモデルを表示させる
までに1日消費してしまったりしますが(「カメラの設定は正しいはずなのに
何故かモデルが画面に表示されない!」という感じで・・・)、2Dと同じ
座標系にZ軸が追加されただけの感覚なので扱いやすいと思います。
で、今回のもので満足して頂けるかどうかはわかりませんが、一応一緒に
ソースファイルも入っています。
機能の追加はDXライブラリ自体にはせずに、外部のライブラリプログラム
として作成しました。(Model.cpp と Model.h をプロジェクトに追加して、
Model.h に書かれている関数を使ってモデルを扱う形式です)
モデルを表示するまでの手順ですが
_LoadModel 関数でXファイルをメモリに読み込み、
_SetModelPosition 関数で描画する位置を決め、
_SetModelScale 関数で描画時のサイズを決め、
_SetModelRoration 関数で描画時のモデルの回転値を決めた後、
_DrawModel で描画します。
例:
int handle;
// モデルを読み込み( 戻り値はモデルハンドルです )
handle = _LoadModel( "Model.X" );
// 画面の中心にセット
_SetModelPosition( 320.0f, 240.0f, 0.0f, handle );
// 大きさは縦横高さ100倍
_SetModelScale( 100.0f, 100.0f, 100.0f, handle );
// Y軸回転90度( 単位はラジアン )
_SetModelRotation( 0.0f, 3.14159f / 2.0f, 0.0f, handle );
// 描画
_DrawModel( handle );
こんな感じです。
機能や性能が足りないという場合は手を加えますので、宜しければ、
とりあえずこちらのライブラリを使ってみて下さい。m(_ _)m
(因みに DrawModel.cpp が今回の実行ファイルのソースファイルですので、
具体的なライブラリの使い方はこちらをご参照下さい)
あと、DXライブラリ自体の DrawPolygon3D の処理速度も上げました
ので、上記のライブラリを使ったプログラムをコンパイルされる際は
こちらのバージョンに変更しておいて下さい。m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用
(中身を既存のファイルに上書きして、BCCをお使いの場合は『再構築』、
VCをお使いの場合は『リビルド』をして下さい)
|
Re: 3Dについて ( No.6 ) |
- 名前:れん 日時:2006/11/06 01:08
おおお・・・・・
表示できましたー!すごいです!!
僕のPCでくるくる回りました・・・w
鼻血がでました・・・w
処理能力を測ってみました。
intel(R) Pentium(R) 4 CPU 3.00GHz
(CPU動作速度:大体2.98GHz)
の能力で、送らせて頂いたXファイル読み込みしたところ
60FPSのときモデル10個表示できました。
(11個以上は処理落ち)
(ウインドウは全画面モード
ウインドウモードでも結果は同じでした)
一時的に3Dを使うだけなので処理速度は十分うれしいです!
あと同じソフトで作ったXファイルを2つ読み込みしましたが-1が返ってきました。
同じソフトで作ったのでいけるかな?と思ったのですがデータ構造がちがうようでした。
管理人様お忙しいかと思いますがXファイル読み込みの機能を拡張して頂ければうれしいです。
どうぞよろしくお願いします(_ _)
|
Re: 3Dについて ( No.7 ) |
- 名前:管理人 日時:2006/11/06 12:25
れんさんどうも、DXライブラリの管理人です。
処理速度的には大丈夫ですか。良かったです。(^^;
でも、同じソフトでも他のXファイルは読み込めませんでしたか・・・申し訳ないです。
読み込めるように修正しますので、宜しければ読み込めなかったXファイルを、
テクスチャファイルと合わせて再度 BQE00322@nifty.com までメールで送ってやって下さい。m(_ _;m
|
Re: 3Dについて ( No.8 ) |
- 名前:れん 日時:2006/11/07 11:08
どもー!管理人さん!
DrawPolygon3D使わせて頂きました!
DrawPolygon3Dと3Dの機体を表示させたらZバッファの関係?で機体の真ん中だろうがDrawPolygon3Dの
四角形が表示されることに気づきました!
u,vの設定が難しいですがaの値を変更するとその部分がかっこいいグラデーションになるので
かっこいいメッセージウインドウができそうです!
3Dですがこんなにはやく3D表示プログラム頂いてありがとうございます!
メール送らせて頂きました(_ _)
どうぞよろしくお願いします。
|
Re: 3Dについて ( No.9 ) |
- 名前:管理人 日時:2006/11/07 13:36
れんさんどうも、DXライブラリの管理人です。
メール確認致しました。
正常に読み込めないXファイルは、テクスチャが使われていない
モデルには存在しないUV座標を読み取ろうとしてしまっていた
ことが原因でした。(XファイルにUV座標が無い場合はエラー、
としてしまっていました)
読み込めるようにしたものを同じアドレスにアップしましたので、
宜しければお試し下さい。m(_ _)m
http://homepage2.nifty.com/natupaji/temp/DrawModelTest.zip
> u,vの設定が難しいですがaの値を変更するとその部分がかっこいい
> グラデーションになるのでかっこいいメッセージウインドウができそうです!
考えてもみませんでしたが、確かに2Dのものを描画する目的にも
使うことが出来ますね。(^^;
(2のn乗のサイズの画像しか使えなかったり、2ポリゴン分の頂点の情報を一々
用意しなければいけなかったりと、DXライブラリを使っている意味が
分からないくらい面倒ですが(汗))
|
Re: 3Dについて ( No.10 ) |
- 名前:れん 日時:2006/11/07 19:52
おおおおー!
すべて読み込めるようになりましたー!
こんなにも早く3Dを使えるようになるなんて!
管理人様本当に長々とありがとうございました!
(_ _)
|
Re: 3Dについて ( No.11 ) |
- 名前:管理人 日時:2006/11/08 11:52
正常に動作した様で何よりです。何かまた不具合が
ありましたらご連絡下さい。(^^;
|
Re: 3Dについて ( No.12 ) |
- 名前:れん 日時:2006/11/18 00:09
どもー!
いつもお世話になっていますれんです!
あれから毎日DrawPolygon3Dと3D表示つかわせてもらっています♪
ちょっと気づいたことがありまして、
DrawPolygon3D と 3D表示プログラムについてですが、y軸のみ逆転するようです。
逆転というのは(0 , 0)にすると上に表示されるものが
一番下に表示されてしまうようです。
いままで画面の中心(320.0f , 240.0f)にしか表示してなかったのですが、
_SetModelPosition( 320.0f, 0.0f , 200.0f, handle );
とすると本来は画面の一番上にモデルが表示されるはずが画面の一番下に表示されるようです。
DrawPolygon3Dもy軸が逆転しているっぽいです。
これについては、メッセージウインドウ作ってて
(x1 , y1 ) - (x2 , y2) で指定してその四角形を作り出すプログラムつくって気がつきました。
|
Re: 3Dについて ( No.13 ) |
- 名前:管理人 日時:2006/11/20 11:38
れんさんどうも、DXライブラリの管理人です。
> DrawPolygon3D と 3D表示プログラムについてですが、y軸のみ逆転するようです。
はい、y軸のみ逆転します。
すいません、自分で作っておいて忘れていました。orz
確か、一般的に3Dプログラムの世界ではy軸のプラス方向が
上なので、後々ある程度まともな3D機能を付けた時に
DrawPolygon3D だけy軸のプラス方向が下、ということにならない
様に、プラス方向を上にしたのだと思います。
|
Re: 3Dについて ( No.14 ) |
- 名前:れん 日時:2006/11/20 14:29
おお!
そうだったのですか!
3Dプログラムの世界ってy軸のプラス方向が上なんですね。
勉強になりました!
お答えありがとうございます♪
|
Re: 3Dについて ( No.15 ) |
- 名前:れん 日時:2006/11/20 14:36
あ、DrawPolygon3Dの説明にy軸逆転ってかいてました・・・・
失礼しました(汗
|