DXライブラリをDirectXのみに変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
りむ

DXライブラリをDirectXのみに変換

#1

投稿記事 by りむ » 18年前

こんばんは、りむです。お久しぶりです。
あれから一ヶ月間作り続けて、一応遊べる程度のシステムまで作り上げることができました。
ありがとうございます。

それで、4月に教授にそれを見せたところ、
卒論はライブラリを使わずにDirectXの機能のみで作ったゲームを再現して、
あと他に何か追加したものにしよう、ということになりました。

追加するものは、3Dエフェクトの実装、ということに決定しました。
4月からは、まずそちらの勉強をしまして、
現在はDXライブラリの関数をDirectXやAPI、標準関数で置き換える作業を行っています。

今のところ、
LoadDivGraph・DrawGraph等に対応する機能(テクスチャとして読み込み、四角形の平面モデルに貼り付ける形。それに加えて、画像回転や反転、変形拡大縮小なら入れてないものの実装できそうです)
キーボード入力(DirectInputの直接データによるキーボード状態の取得)
GetRand関数(srandとrand関数による仮実装。最終的にメルセンヌ・ツイスタを入れたいなと…)
あたりまで変更できました。

ですが、文字描画関係関数や時間関係の関数、音など、他の様々な関数がまだ置き換えられていません。
ゲームの内容を充実させて3Dエフェクトを入れるためにも、早く置き換えないといけないのですが中々進まなくて…。
もし分かる方がいらっしゃったら、どんなことでも良いのでアドバイスや意見お願いします。


使ってはならない素材を仮使用しているため、実行ファイルを配ることができないことはご了承ください。

こちらの掲示板はC言語に対して何でも、となっていますがさすがにDirectX自体は対応してないだろうという理由で雑談としていますので、
意見等ありましたら気軽にお願いします。

管理人

Re:DXライブラリをDirectXのみに変換

#2

投稿記事 by 管理人 » 18年前

DirectXの機能のみをということですが、DXライブラリはDirectX7そのもののようですよ。
DirectX7の機能を利用しているので、DirectX7と併用できるようです。
DirectX7自体は詳しく存じないのですが、時間関係の取得は標準ライブラリで出来ます。

http://www9.plala.or.jp/sgwr-t/lib/lib.html

この辺参考にしてください。
clock()やtime()でミリ秒や現在の時刻の取得が出来ます。

Justy

Re:DXライブラリをDirectXのみに変換

#3

投稿記事 by Justy » 18年前

DirectX自体は対応してないだろうという理由で雑談としていますので、
 使っている人はたくさんいると思いますから、大丈夫だと思いますよ。

 あ、ちなみに DirectXのバージョンは幾つでしょう。
 DxLibは内部で 7が使用されていますが、今最もよく使われているバージョンは 9で、
この2つでは作り方が全く違います。

 DirectX 7を使われるのであれば、DxLibはソースが公開されているので
文字描画などなどそれを参考にされるといいと思います。
(でも 7で 3Dってのはちょっと・・・なの 9ですよね?)



文字描画関係関数
 大きく分けて二種類あります。
 1つは DirextXの ID3DXFontインターフェースを使って Winodwsにインストール済みの
フォント使って表示する方法と自前のフォントテクスチャを持って、そこから文字を切り出して
並べ表示する方法とあります。

 後者は面倒ですが、配布する際に相手先にフォントが入っていなくても表示できる点と
自分でデザインしたカスタムフォントが使えるという利点があります。



 DirectShowとかを使うといろいろ汎用性が高くていいかと思います。
 

3Dエフェクトの実装
 あれ? 今まで3Dゲームを作られていたんでしたっけ?
 それとも3Dゲームとして作り直すのでしょうか?

りむ

Re:DXライブラリをDirectXのみに変換

#4

投稿記事 by りむ » 18年前

言葉が足りなかったようで。。。
DirectX9.0cですね。昔のDirectXはゼミでは手に入れれなかったので…それ専門の研究室じゃないので、本もないですし。
なので、オープンソースのDXライブラリの内部を見てもイマイチ理解できず…;;
そして、併用はまったくしない予定です。してしまうと卒論としてみなされないようで。
将来役に立たせるために、実際に社会で使用できることを学習をしてほしいのだそうです。
…DirectXを将来使うかどうかはわかりませんが…(おそらく建前でしょう)

つまりは、そういったライブラリを使わず自分で書けということです。DirectX云々関係無しに…


>それとも3Dゲームとして作り直すのでしょうか?
はい、半分はそのとおりで。2Dゲームをベースに3D対応と申しますか、ぶっちゃけるとテイルズっぽくしたいわけです(作ったのもそっくりですが)
なのでゲーム自体は2Dのようで、魔法のエフェクトだったり他のエフェクトだったりを3Dで表現といいますか。

>clockやtime
それの存在は調べて見つけたのですが、ミリ秒の取得としての使い方がわからなかったのです。
とりあえず無理やり入れてみたのですが、なんとなく今までと違う形になっていて…
void FpsTimeFanction(){
	if(FpsTime_i== 0){
		FpsTime[0]=clock();               //1周目の時間取得
	}
	if(FpsTime_i==59){
		FpsTime[1]=clock();               //50周目の時間取得
		Fps = ((FpsTime[1] - FpsTime[0]) / 15.0f);//測定した値からfpsを計算
		FpsTime_i=0;//カウントを初期化
	}else{
		FpsTime_i++;//現在何周目かカウント
	}
	return;
}
こんな感じのソースですね、今は。

DXライブラリ使用のほうのゲームのイメージ画面だけ添付しておきます。

管理人

Re:DXライブラリをDirectXのみに変換

#5

投稿記事 by 管理人 » 18年前

詳しいDirectXのお話はJustyさんにお任せするとして・・。
時間関係の関数についてですが、

int GetNowCount( void ) ;
Windowsが起動してから経過時間をミリ秒単位であらわした値を返す。


clock_t clock(void);
プログラム実行開始からの経過時間(プロセッサ時間)をミリ秒で返却します。

ということですから機能は同じではないでしょうか?
FpsTimeがclock_t型であれば問題ないと思います。

画像テイルズっぽいですね^^
背景はRPGツクールの奴ですねw

あと、卒論って、卒業制作の他に論文も書かないといけないのですか?

Justy

Re:DXライブラリをDirectXのみに変換

#6

投稿記事 by Justy » 18年前

>DirectX9.0cですね
 なるほど、そうですか。
 だとすると、参照用に1、2冊 DirectXを扱った書籍を買っておいた方がいいですね。
 私もそれで一通りのことを覚えました。


 あとは

TWINTAIL LOVERS.
http://luna.sumomo.ne.jp/

 こちらで公開されている描画エンジンは DirectX 9を使っており、
ドキュメント・コメントも日本語で書かれていて、かなり読みやすいので
実装方法など参考になるかと思います。



>実際に社会で使用できることを
 判らなくはないですね。
 でもゲーム会社とかにでも就職しない限りDirectXは・・・(w
 まぁ、応用は利きそうですが。


>ぶっちゃけるとテイルズっぽくしたいわけです
>ゲーム自体は2Dのようで、魔法のエフェクトだったり他のエフェクトだったりを3Dで表現
 なるほど。
 テイルズとかのように内部的な座標系は全部3Dで管理して、2Dっぽいところは
それらしく見せる、ということですね。


>DXライブラリ使用のほうのゲームのイメージ画面だけ添付しておきます
 なんとなく雰囲気はわかりました。
 これが DirectX化されればいろいろ可能性が増えるので、
作る方も遊ぶ方も楽しそうな予感。

 環境と時間が許すならプログラマブル・シェーダにまで手を出すといいかもしれません。
 表現の世界が2倍以上に広がりますよ。
(もちろん手間もそれ相応ですが)

りむ

Re:DXライブラリをDirectXのみに変換

#7

投稿記事 by りむ » 18年前

>あと、卒論って、卒業制作の他に論文も書かないといけないのですか?
メインは論文です。それに必ずデモ実演をするということで、プロジェクトを作らないとだめなのです。
そもそも論文を書く為には作り方を知っていないとかけないので…。
なので、大変なんですよ。

ただし、卒論だけに限って言えば、形になってさえ居れば良いのでそこまで作りこむ必要はありません。
個人的にそれが終わったら、つくりこむ予定ですが^^;
とりあえずの目標として、完全動作する形にしておいて、それから3Dの魔法エフェクトを入れれる準備をしておかないと…そろそろ時間がやばめで。

>clock_t clock(void);
プログラム実行開始からの経過時間(プロセッサ時間)をミリ秒で返却します。
…えーっと…そう書いてありました…?
確かミリ秒で返すって部分が見当たらなかったので、clock_t型でいいのか悩んでいたのですが…
それならなんとかなりそうです。

>プログラマブル・シェーダ
そこまでは現時点では厳しいですね^^;
将来、会社に勤めながら、個人で製作販売をする夢があるので、
その完成までにまた勉強してみようと思います。

>参照用に1、2冊 DirectXを扱った書籍を
最初に、DirectXゲームグラフィックスプログラミングVer.2.0というグラフィックのみに関する書籍を
すべて読んで、DirectGraphicsのみですが大体の部分の理解は済ませてあります。
教授も一押しなほど理解しやすい書籍だったようです。

それからHP等を参考に、キーボードのみのDirectInputは導入させています。

ですがそれ以外の書籍がない状態で…何か良い書籍があればいいのですが、
DirectXの書籍は、どれがいいのか判断がつかないものですね。

>背景
RPGツクールXPの素材です。ただ、RTPのものなのでコレも実はまずいようで;;
線画程度ならかけるのですが、CGやドット絵はあまりやったことなくて…。
まだまだ大変です。

バグ

Re:DXライブラリをDirectXのみに変換

#8

投稿記事 by バグ » 18年前

横レスすみません…
clock_t型って、実装依存なんでしょうか?とりあえず、VC++では実体はlong型のようですが…

Justy

Re:DXライブラリをDirectXのみに変換

#9

投稿記事 by Justy » 18年前

 clock_tは時刻を表すことができる算術型としか規定されていませんね。
 さらに言えば負を返すこともできないといけないので、符号付きになります。

 で、clock()が必ずしもミリ秒を返すとは限らないので、time.hに定義された
CLOCKS_PER_SECの値(1秒当たりの数)でミリ秒かどうかは確認する必要があります。
 この値が 1000ならその環境ではミリ秒になります。

管理人

Re:DXライブラリをDirectXのみに変換

#10

投稿記事 by 管理人 » 18年前

あぁ、だからCLOCKS_PER_SECという定義がわざわざあったんですか・・。
いつもただ単に1000で割ればいいじゃんと思ってました^^;

Justy

Re:DXライブラリをDirectXのみに変換

#11

投稿記事 by Justy » 18年前

>それから3Dの魔法エフェクトを入れれる準備をしておかないと…そろそろ時間がやばめで。
 ベースが DxLibからだと、座標系の問題も含めて結構手直しが多そうで大変ですね。
 スクロールの方法すら変わりそうですし。


>最初に、DirectXゲームグラフィックスプログラミングVer.2.0というグラフィックのみに関する書籍を
>すべて読んで、DirectGraphicsのみですが大体の部分の理解は済ませてあります。
 あー、あれはいい本ですね。わかりやすくて。
 私も読みました。


>ですがそれ以外の書籍がない状態で…何か良い書籍があればいいのですが、
>DirectXの書籍は、どれがいいのか判断がつかないものですね。
http://www.amazon.co.jp/dp/4798013161」とかはピンポイントで役立ちますよ。
 サウンド録音再生も触れているので、結構重宝しました。

アクションのジャンプのソースについて・・・

#12

投稿記事 by » 18年前

C++でアクションゲームを作りたいのですが、
ジャンプの制御がうまくいかなくて困っています。
こちらのホームページの講座を見たのですが
ちょっと小難しくて完全に理解ということが出来ません・・・・
簡易的なジャンプの式は無いのでしょうか?
頭悪い質問ですみません==;

tai

Re:アクションのジャンプのソースについて・・・

#13

投稿記事 by tai » 18年前

http://www.play21.jp/board/formz.cgi?ac ... q&rln=9573
たった今質問投稿したやつですが、自由な軌道でジャンプするアクションゲームですよ。
ソースコードを追うと参考になるかもしれません。すぐ入手できますし。
シェアウェア手前の、あまりお手軽ではない代物ですけど。

コーダーではないのでこんな厨なレスでごめんなさい。

Re:アクションのジャンプのソースについて・・・

#14

投稿記事 by » 18年前

えー返信ありがとうございます。
いろいろと試行錯誤した結果くだらないミスで出来なかったようです。
まことに申し訳ない・・・・・
今後は一日ぐらい悩んでから質問することにします・・・・orz
5時間悩んだぐらいじゃ少なかったようですm(_ _)m

閉鎖

“C言語何でも質問掲示板” へ戻る