DXライブラリで3Dゲームを作ろうと思います。
DXライブラリで3Dゲームを作ろうと思います。
2Dのゲームがある程度作れるようになってきたので3Dに挑戦しようかと思っております。
しかし3Dは基礎中の基礎しか理解しておりません。
カメラがあったりライトを設定しなければならないということ程度です。
3Dゲームを作る際に参考になるURLを教えては頂けないでしょうか?
又、作ろうとしているゲームはアクションゲームです。
しかし3Dは基礎中の基礎しか理解しておりません。
カメラがあったりライトを設定しなければならないということ程度です。
3Dゲームを作る際に参考になるURLを教えては頂けないでしょうか?
又、作ろうとしているゲームはアクションゲームです。
Re:DXライブラリで3Dゲームを作ろうと思います。
あまり、お力にはなれないとおもいますが、ぱっと思いついたこと。
公式のサンプルにアクションゲームサンプルがあります。
まずはサンプルの理解からとか。
正直、私にはモーションとか綺麗なモデルを自作できないので、これ以上はあまり参考にならないと思います><
あといえることは、Blender (モデリング/アニメーション作成)とか、 メタセコイア (モデリング)は結構使える無料ツールだったりするらしいので、その講座サイト等をグーぐるで検索すると、役立つかも。
でも、これ始める前に、まずはサンプルから始めたほうがいいかも。
プログラミング面については、、、、行列とかベクトルとか数学です。
サイトの紹介はバトンタッチw
公式のサンプルにアクションゲームサンプルがあります。
まずはサンプルの理解からとか。
正直、私にはモーションとか綺麗なモデルを自作できないので、これ以上はあまり参考にならないと思います><
あといえることは、Blender (モデリング/アニメーション作成)とか、 メタセコイア (モデリング)は結構使える無料ツールだったりするらしいので、その講座サイト等をグーぐるで検索すると、役立つかも。
でも、これ始める前に、まずはサンプルから始めたほうがいいかも。
プログラミング面については、、、、行列とかベクトルとか数学です。
サイトの紹介はバトンタッチw

Re:DXライブラリで3Dゲームを作ろうと思います。
Ma様
ご回答ありがとうございます。
サイトのサンプルプログラムを見せて頂きました。
ただやはり少々理解できない点が御座いまして・・・
どこか宜しいサイトはないでしょうか?
ご回答ありがとうございます。
サイトのサンプルプログラムを見せて頂きました。
ただやはり少々理解できない点が御座いまして・・・
どこか宜しいサイトはないでしょうか?
Re:DXライブラリで3Dゲームを作ろうと思います。
> ただやはり少々理解できない点が御座いまして・・・
> どこか宜しいサイトはないでしょうか?
どこが理解できないかを具体的に書かないと。
理解する気があるならば、ここで聞くこともできるんだし。
サンプルプログラムを上から順に全部作っていくだけでも
ずいぶん勉強になると思いますが。
> どこか宜しいサイトはないでしょうか?
どこが理解できないかを具体的に書かないと。
理解する気があるならば、ここで聞くこともできるんだし。
サンプルプログラムを上から順に全部作っていくだけでも
ずいぶん勉強になると思いますが。
Re:DXライブラリで3Dゲームを作ろうと思います。
回答ありがとうございます。
例えばなのですが点Aから点Bに移動する時はどうすればよいのでしょうか?
(0,0,0)から(10,10,10)に向かって速度Cで移動する場合など
2Dの場合はそれぞれの点の角度を求めて
X軸はcos、Y軸はsinをかければ出たのですが3Dになるとこれだけでは出来ない気がします。
こういった場合はどうすればよいのでしょうか?
Playが点Aで初期化されているものとします。
それぞれの値はどの様に変化するのでしょうか?
Play.x =
Play.y =
Play.z =
例えばなのですが点Aから点Bに移動する時はどうすればよいのでしょうか?
(0,0,0)から(10,10,10)に向かって速度Cで移動する場合など
2Dの場合はそれぞれの点の角度を求めて
X軸はcos、Y軸はsinをかければ出たのですが3Dになるとこれだけでは出来ない気がします。
こういった場合はどうすればよいのでしょうか?
Playが点Aで初期化されているものとします。
それぞれの値はどの様に変化するのでしょうか?
Play.x =
Play.y =
Play.z =
Re:DXライブラリで3Dゲームを作ろうと思います。
A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。
ABの単位ベクトルは、AB(u, 2*u, 3*u)。
但し、u = 1 / sqrt(1*1 + 2*2 + 3*3)。
単位時間当たりの移動量をd(dx, dy, dz)とすると、
dx = u * C
dy = 2 * u * C
dz = 3 * u * C
単位時間ごとの移動の処理は
Play.x += u * C
Play.y += 2 * u * C
Play.z += 3 * u * C
t時間後の座標を直接求めるならば、
Play.x = u * C * t
Play.y = 2 * u * C * t
Play.z = 3 * u * C * t
こんな感じで理解できます?
ABの単位ベクトルは、AB(u, 2*u, 3*u)。
但し、u = 1 / sqrt(1*1 + 2*2 + 3*3)。
単位時間当たりの移動量をd(dx, dy, dz)とすると、
dx = u * C
dy = 2 * u * C
dz = 3 * u * C
単位時間ごとの移動の処理は
Play.x += u * C
Play.y += 2 * u * C
Play.z += 3 * u * C
t時間後の座標を直接求めるならば、
Play.x = u * C * t
Play.y = 2 * u * C * t
Play.z = 3 * u * C * t
こんな感じで理解できます?
Re:DXライブラリで3Dゲームを作ろうと思います。
たいちう様
回答ありがとうございます。
すみません。理解できませんでした。
その単位ベクトルはどの様に求めるのでしょうか?
出来ればDXライブラリを使った場合の
A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。
を書いては頂けないでしょうか?
お手数おかけして大変申し訳ないのですがどうかお願いします。
回答ありがとうございます。
すみません。理解できませんでした。
その単位ベクトルはどの様に求めるのでしょうか?
出来ればDXライブラリを使った場合の
A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。
を書いては頂けないでしょうか?
お手数おかけして大変申し訳ないのですがどうかお願いします。
Re:DXライブラリで3Dゲームを作ろうと思います。
> すみません。理解できませんでした。
> その単位ベクトルはどの様に求めるのでしょうか?
ベクトルについての基本的な知識はお持ちですか?
それを1から教えるのはここでは無理なので、
高校の数学の教科書でも参考にしてください。
A(0, 0, 0)、B(10, 20, 30)としたときの、
ベクトルABは判りますか?
また、その長さは?
> 出来ればDXライブラリを使った場合の
> A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。
> を書いては頂けないでしょうか?
当面DXライブラリを使うつもりはありませんので書けません。
> その単位ベクトルはどの様に求めるのでしょうか?
ベクトルについての基本的な知識はお持ちですか?
それを1から教えるのはここでは無理なので、
高校の数学の教科書でも参考にしてください。
A(0, 0, 0)、B(10, 20, 30)としたときの、
ベクトルABは判りますか?
また、その長さは?
> 出来ればDXライブラリを使った場合の
> A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。
> を書いては頂けないでしょうか?
当面DXライブラリを使うつもりはありませんので書けません。
Re:DXライブラリで3Dゲームを作ろうと思います。
模擬コードです。
VECTOR velocity = VGet(1,2,3);
VECTOR position = VGet(0,0,0);
while(/*メインループ条件*/){
position = VAdd(position,velocity);
//10フレーム後には、10,20,30にいる。
}
2Dでも3Dでの世界でも、物理が重要になってきます。
加速度ベクトルが積み重なっていくことで、移動ベクトルができ、
移動ベクトルが積み重なることで、位置ベクトルができる。
これが、理解できていないようならば、難しいです。
とはいっても、難しいことはいっていません。速度と位置の関係を理解すればいいだけのことです。
(もし分からないならば、質問してください。)
ちなみに、ベクトルを理解できていないならば、ちょっと3Dゲームプログラミングは難しいと思います。
できなくはないですがね。。。
手元の数学IIの教科書か参考書で、ベクトルの基礎を理解しておくといいかも。
VECTOR velocity = VGet(1,2,3);
VECTOR position = VGet(0,0,0);
while(/*メインループ条件*/){
position = VAdd(position,velocity);
//10フレーム後には、10,20,30にいる。
}
2Dでも3Dでの世界でも、物理が重要になってきます。
加速度ベクトルが積み重なっていくことで、移動ベクトルができ、
移動ベクトルが積み重なることで、位置ベクトルができる。
これが、理解できていないようならば、難しいです。
とはいっても、難しいことはいっていません。速度と位置の関係を理解すればいいだけのことです。
(もし分からないならば、質問してください。)
ちなみに、ベクトルを理解できていないならば、ちょっと3Dゲームプログラミングは難しいと思います。
できなくはないですがね。。。
手元の数学IIの教科書か参考書で、ベクトルの基礎を理解しておくといいかも。
Re:DXライブラリで3Dゲームを作ろうと思います。
> 加速度ベクトルが積み重なっていくことで、移動ベクトルができ、
> 移動ベクトルが積み重なることで、位置ベクトルができる。
一応物理専攻の私としては、加速度→速度→位置であり、
「移動ベクトル」という言葉には馴染みがないですね。
速度ベクトルに単位時間をかけることで、
単位時間当たりの移動ベクトルというものが計算できます。
物理的な意味を忘れないように必ず単位も意識します。
速度(m/s)×単位時間(s)→単位時間当たりの移動量(m)というように。
単位時間は秒ではなくフレームでも良いでしょうし、
長さの単位はピクセルかもしれませんが。
プログラムを作る上では移動ベクトルが重要かもしれませんが、
物理的に重要なのは加速度・速度・位置の方なので、
こっちを理解していた方が色々応用が利くでしょう。
# 他の人はこのようなアプローチをしてないのだろうか?
> 移動ベクトルが積み重なることで、位置ベクトルができる。
一応物理専攻の私としては、加速度→速度→位置であり、
「移動ベクトル」という言葉には馴染みがないですね。
速度ベクトルに単位時間をかけることで、
単位時間当たりの移動ベクトルというものが計算できます。
物理的な意味を忘れないように必ず単位も意識します。
速度(m/s)×単位時間(s)→単位時間当たりの移動量(m)というように。
単位時間は秒ではなくフレームでも良いでしょうし、
長さの単位はピクセルかもしれませんが。
プログラムを作る上では移動ベクトルが重要かもしれませんが、
物理的に重要なのは加速度・速度・位置の方なので、
こっちを理解していた方が色々応用が利くでしょう。
# 他の人はこのようなアプローチをしてないのだろうか?
Re:DXライブラリで3Dゲームを作ろうと思います。
>移動ベクトル
すいません、正しい言葉を使っていませんでした。
ベロシティ(Velocity)ベクトル といいたかったんですが、日本では使わないですよね、、、。
速度 といってしまうと、スカラー量になってしまうため、避けた結果 移動(moving)ベクトルのような表現になってしまいました。
考えてみると速度ベクトルといえば、OKでしたね。
すいません、正しい言葉を使っていませんでした。
ベロシティ(Velocity)ベクトル といいたかったんですが、日本では使わないですよね、、、。
速度 といってしまうと、スカラー量になってしまうため、避けた結果 移動(moving)ベクトルのような表現になってしまいました。
考えてみると速度ベクトルといえば、OKでしたね。
Re:DXライブラリで3Dゲームを作ろうと思います。
> 速度 といってしまうと、スカラー量になってしまうため
これも違います。スカラー量は速さです。
速さ = |速度| です。あくまでも物理用語としてはですけど。
英語だと、speed = 速さ、velocity = 速度、ですね。
これも違います。スカラー量は速さです。
速さ = |速度| です。あくまでも物理用語としてはですけど。
英語だと、speed = 速さ、velocity = 速度、ですね。
Re:DXライブラリで3Dゲームを作ろうと思います。
おぉ、そうでしたね。
変に覚えていたみたいです。お恥ずかしい><
speed = 速度、velocity = 速度
↑いままでの自分の頭の中。表記してみるとすごいおかしい事に気づきましたw
たいちうさん、ご指摘ありがとうございました。 ^^
これにて解決にさせて ∵(´ε(○=(・∀・*)
私じゃなかった。
変に覚えていたみたいです。お恥ずかしい><
speed = 速度、velocity = 速度
↑いままでの自分の頭の中。表記してみるとすごいおかしい事に気づきましたw
たいちうさん、ご指摘ありがとうございました。 ^^
これにて解決にさせて ∵(´ε(○=(・∀・*)
私じゃなかった。
ShellExecuteについて
こんにちは。
ここのページを利用させてもらっている者です。
ゲームプログラミングの館の33.選択画面の作り方を参考に(ほとんどコピーですが・・・)NewGameを選択すればメモ帳を起動するプログラムを作りました。
ここで、メモ帳ではなく龍神録プログラミングの館のプロジェクトにある「RyuJin.exe」を起動したいのですが、その方法が分かりません。
試しにnotepad.exeをRyuJin.exeに変えてみたところ、何も表示されずに終了しました。
以下は現在のプログラムです。

ここのページを利用させてもらっている者です。
ゲームプログラミングの館の33.選択画面の作り方を参考に(ほとんどコピーですが・・・)NewGameを選択すればメモ帳を起動するプログラムを作りました。
ここで、メモ帳ではなく龍神録プログラミングの館のプロジェクトにある「RyuJin.exe」を起動したいのですが、その方法が分かりません。
試しにnotepad.exeをRyuJin.exeに変えてみたところ、何も表示されずに終了しました。
以下は現在のプログラムです。
#include "DxLib.h" int GetHitKeyStateAll_2(int KeyStateBuf[/url]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key==1) KeyStateBuf++; else KeyStateBuf=0; } return 0; } void char_disp(int White,int y){ DrawString( 490 , y , "■" , White ); DrawString( 510 , 400 , "NEW GAME" , White ); DrawString( 510 , 420 , "EXIT" , White ); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int Key[256]; int White , y=400; //色とy座標の宣言 ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 White = GetColor( 255 , 255 , 255 ) ; //色の取得 while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない char_disp(White,y); // 文字を描画 if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 y+=20; if(y==440) // y座標が260なら(選択が一番下なら) y=400; // 選択座標を一番上に } if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_UP]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 y-=20; if(y==380) // y座標が380なら(選択が一番上なら) y=420; // 選択座標を一番下に } if(Key[KEY_INPUT_Z]==1){ //zキーで選択 if(y==400){//NewGameの場合 DrawString( 0, 0, "NewGame起動" , White); //文字列表示 ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL); break; } if(y==420){//Exitの場合 DrawString( 0, 0, "GAME END" , White); //文字列表示 break; } } ScreenFlip();//裏画面反映 } DxLib_End(); return 0; }

Re:ShellExecuteについて
筑前煮さんのスキルレベルが判らないので、まずは単純な見落としを疑っています。
・指定したパスは正しいですか?
・エクスプローラからRyuJin.exeを起動することはできますか?
・フルパス指定のエスケープはしていますか?
・ShellExecuteの直前にMessageBoxを追加すると、メッセージボックスが表示されますか?
(ShellExecuteが呼ばれていることと、
編集中のソースコードと試しているexeファイルが対応していることの確認です)
・コマンドプロンプトからRyuJin.exeを起動させることはできますか?
・指定したパスは正しいですか?
・エクスプローラからRyuJin.exeを起動することはできますか?
・フルパス指定のエスケープはしていますか?
・ShellExecuteの直前にMessageBoxを追加すると、メッセージボックスが表示されますか?
(ShellExecuteが呼ばれていることと、
編集中のソースコードと試しているexeファイルが対応していることの確認です)
・コマンドプロンプトからRyuJin.exeを起動させることはできますか?
Re:ShellExecuteについて
フルパス、ってファイルパスのことですよね?
指定したフルパスをファイル名を指定して実行に入れて実行したら起動したので正しいと思います。
エクスプローラからの起動は出来ました。
メッセージボックスは表示されました。
エスケープは出来てないとおもいます。
というか、恥ずかしながらエスケープの意味がわかってません。
言い訳になりますが、あまりスキルレベルは高くないのでShellexecuteの使い方もあまりよく分かっていません・・・
使い方について調べてきます。
コマンドプロンプトからの起動はできませんでした。
指定したフルパスをファイル名を指定して実行に入れて実行したら起動したので正しいと思います。
エクスプローラからの起動は出来ました。
メッセージボックスは表示されました。
エスケープは出来てないとおもいます。
というか、恥ずかしながらエスケープの意味がわかってません。
言い訳になりますが、あまりスキルレベルは高くないのでShellexecuteの使い方もあまりよく分かっていません・・・
使い方について調べてきます。
コマンドプロンプトからの起動はできませんでした。
Re:ShellExecuteについて
> というか、恥ずかしながらエスケープの意味がわかってません。
↓このように書きましたか?ということです。
ShellExecute(NULL,"open","c:¥¥test¥¥RyuJin.exe",NULL,NULL,SW_SHOWNORMAL);
(掲示板上での文字化けを避けるために¥を全角で書いています。)
cf. http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-1-2
> コマンドプロンプトからの起動はできませんでした。
起動の仕方がわからないのか何か問題があるのか。
コマンドプロンプトからnotepad.exeを起動させることはできますか?
↓このように書きましたか?ということです。
ShellExecute(NULL,"open","c:¥¥test¥¥RyuJin.exe",NULL,NULL,SW_SHOWNORMAL);
(掲示板上での文字化けを避けるために¥を全角で書いています。)
cf. http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-1-2
> コマンドプロンプトからの起動はできませんでした。
起動の仕方がわからないのか何か問題があるのか。
コマンドプロンプトからnotepad.exeを起動させることはできますか?
Re:ShellExecuteについて
返信ありがとうございます!
そのように書けています。
コマンドプロンプトですが、notepadの起動は出来ました。
RyuJin.exeについてはいろいろな方法を試しましたが、いずれも起動できませんでした。
メモ帳以外に試しに電卓やワードパッドを以下のように書いたら両方起動しました。
ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
ShellExecute(NULL,"open","wordpad.exe",NULL,NULL,SW_SHOWNORMAL);
とりあえずnotepadと同じフォルダにRyuJin.exeを入れて試そうかな、と思いましたが、重要そうなフォルダに入っていたので編集するのを止めました。
ShellExecute以外にファイルへアクセスする方法はありますか?
そのように書けています。
コマンドプロンプトですが、notepadの起動は出来ました。
RyuJin.exeについてはいろいろな方法を試しましたが、いずれも起動できませんでした。
メモ帳以外に試しに電卓やワードパッドを以下のように書いたら両方起動しました。
ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
ShellExecute(NULL,"open","wordpad.exe",NULL,NULL,SW_SHOWNORMAL);
とりあえずnotepadと同じフォルダにRyuJin.exeを入れて試そうかな、と思いましたが、重要そうなフォルダに入っていたので編集するのを止めました。
ShellExecute以外にファイルへアクセスする方法はありますか?
Re:ShellExecuteについて
ShellExecuteよりも望ましいのはCreateProcessかな。
しかしコマンドプロンプトで成功させる方が先だと思います。
コマンドプロンプトでもフルパスで指定しましたか?
(この場合はエスケープなし)
コマンドcdでRyuJin.exeのあるフォルダに移動して、
ファイル名のみで試しましたか?
しかしコマンドプロンプトで成功させる方が先だと思います。
コマンドプロンプトでもフルパスで指定しましたか?
(この場合はエスケープなし)
コマンドcdでRyuJin.exeのあるフォルダに移動して、
ファイル名のみで試しましたか?
Re:ShellExecuteについて
コマンドプロンプトで起動できました!
たいちうさん、ありがとうございます。
では、CreateProcessをつかう場合どのようにすればいいですか?
たいちうさん、ありがとうございます。
では、CreateProcessをつかう場合どのようにすればいいですか?

Re:ShellExecuteについて
コマンドプロンプトで成功してShellExecuteではできない、というのは考えにくいです。
さっき起動できずに今は起動できたという、その差は何だったのでしょうか?
どうしたら成功したのですか?
> では、CreateProcessをつかう場合どのようにすればいいですか?
CreateProcessの使い方を調べます。
さっき起動できずに今は起動できたという、その差は何だったのでしょうか?
どうしたら成功したのですか?
> では、CreateProcessをつかう場合どのようにすればいいですか?
CreateProcessの使い方を調べます。
Re:ShellExecuteについて
さっきはパスをを直接キーボードで入力して、とりあえずコマンドプロンプトのウィンドウにRyuJin.exeをドラッグして、エンターを押しました。
タイプミスですかね・・・。一応パスはチェックしたんですが・・・すいません。
ShellExecuteでとりあえずもう一度パスを入力してみます。
タイプミスですかね・・・。一応パスはチェックしたんですが・・・すいません。
ShellExecuteでとりあえずもう一度パスを入力してみます。
Re:ShellExecuteについて
手当たりしだいやってみるのも当然ありだと思いますが
まずはShellExecuteからの戻り値を確認する方が先だと思います。
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx
に戻り値が書いてあるので確認してみてはいかがでしょうか?
まずはShellExecuteからの戻り値を確認する方が先だと思います。
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx
に戻り値が書いてあるので確認してみてはいかがでしょうか?
Re:ShellExecuteについて
tomさん>
よく見てみたらビルドのときに
warning C4129: ''っていうのがでてました。
ちょっと調べてきます・・・
エスケープシーケンスのエラーみたいですね。
たいちうさん、すいません。
よく見てみたらビルドのときに
warning C4129: ''っていうのがでてました。
ちょっと調べてきます・・・
エスケープシーケンスのエラーみたいですね。
たいちうさん、すいません。
