【C++】 DirectX初心者質問スレ Part27 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
3 :
デフォルトの名無しさん:2010/01/09(土) 17:16:26
>998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/09(土) 16:03:05
>引数で渡すのが一番安全の意味が分からない。。。
例えば
pD3Dev = Create・・・
unko();
if(pD3Dev)
はもしかしたらunko()の中でpD3Devは開放されるか値が変わってしまってるかもしれないよね?
それどころか?pD3Devが触られてるかどうかすらわからないよね?
これがグローバル変数関数の恐怖
プログラムすべてでグローバル変数を使用しないとしたとき(引数を通した場合)は
pD3Dev = Create・・・
unko(pD3Dev);
if(pD3Dev)
こうやってunko関数の中でpD3DevにしかアクセスしてないことがわかるしpD3Devにアクセスしてることがわかるよね?
また、引数で渡すようにしたときに今度はunko関数がpD3Devにアクセスしてないことがわかるよね?
pD3Dev = Create・・・
unko();
if(pD3Dev)
でもグローバル変数関数つかいまくりだとunko関数で何がおきているかはunko関数の中身を
すべて調べないとわからないよね?
これがダメなプログラムの例
デバイスの場合そんな初歩の話をしてるんじゃ無いと思うぞ
>>5 そう?
少なくとも俺はこのレベルでの話をしたつもりだけどね
D3DXで描画したオブジェクトの周りの背景を透過して、ウィンドウの向こう側が
見えるようにできたらと考えているのですが可能でしょうか?
環境はXP,DirectX9です。
レイヤードウィンドウを作成して、SetLayeredWindowAttributesで
D3DX側の背景色を指定してみたのですが、さすがにそう甘くはなかった…orz
画面閉じてもD3DXの描画部が残る始末。。
描画先?描画デバイス?が違うみたいだから無理なのかな?
ウィンドウの向こう側をコピーして、D3DXで描画するオブジェクトと合成
という手段も考え中ですが、ビルボードに貼り付けじゃなんか違うよなぁ…
良い方法ありましたら教えてください。
>>4 真ん中の場合も解放されてるかどうかはunko関数の中身を調べてみないとわからないんじゃ
結局引数で渡そうが
その渡すための元の変数をどこに置くかって話でそ
クラス設計の話なんだから
>>4みたいな構造化プログラミングの思考で考えてもしょうがない
てか、デバイスのロストとか関係無しの話なら
スレ違いになるんじゃね
デバイスの管理は昔のサンプルにあったCD3DApplicationみたいな
クラスでやってるな自分は
勝手に解放されてしまうかもしれない、なんてのはスマポ使おうが何使おうが
ラップして隠蔽でもしない限り、防ぎようが無いから気にしてもしょうがない
ロスト自体は防げないが
いつロストしてもなるべくリストアできるようにする設計は考えなくてはいけない
まぁ、10からはロストなくなったんだっけ?
引数通した場合はどこで死んでるかはデバッガで追えば一発だけど
グローバルの場合はなかなか見つからない上にたとえわかっても対策できないだろ
途中までロスト考慮しないでグローバルで組んでしまったD3DDeviceのポインタは
1つ1つラップしていくぐらいしかどうにもならねーだろ
この組み方は致命的なんだよってわからないなら設計なんて考えないでもう根性だけで組んだらいいんじゃない?
別にそれが悪いわけではないってのもついでにいっておく
このへんは設計云々っていうより
プログラムの美意識に関する問題だからぶっちゃけ結論は出ない気がするな
プログラマは何故か「美しい」プログラムに拘る人種だから
たとえそれが有効だとしても
グローバル変数なんて「美しくない」ものを使いたくないという気持ちが働く
シンプルさを求めるか堅牢性を求めるかも人によって違うし
すなおに謝ればいいんだよ
>>19 でも綺麗に組むなら引数とキチンと通してグローバル変数は一切使わずに・・・っていうのは
知っておいてもいいだろ?
これを正当化するようなことは技術者ならあってはならない
あくまでも時間がなかったり現場の作法やらで
しょうがないからグローバル変数・関数を使ってることは理解しておいてもらわないと困る
グローバル変数を使ったほうが綺麗とか言い出したら間違いなくそいつはなにも理解してないわけだし
てか論点がずれてない?
引数で渡すにしたって渡すための変数は
その関数がよばれる全てのスコープ内ではグローバルじゃなきゃいけないわけでしょ?
引数で渡すのはあくまで可読性を高める規則であって
それが守られてる保障が無い限りデバックがどうとかは関係ない希ガス
馬鹿の一つ覚えってやつだろ
元の質問がデバイスにアクセスするクラスにどう渡すかって話なんだから
順をおって考えると
あるクラス内でデバイスにアクセスしたい
オブジェクト指向で考えるとクラス内ににデバイスへのポインタがあるのが望ましいよね
じゃあ、インスタンス生成時に初期化子としてデバイスへのポインタを渡そう
あ、でも、もしかしてどっかでデバイスのアドレスが変わったらそれって無効だよね…
じゃあ、あまりC++っぽくないけどダブルポインタで渡しとく?
どっちにしても毎回渡すのはメンドクサイし
クラスを生成する可能性のある場所からはデバイスが見えてないといけないし
それって結局グローバルじゃないの?
ってことじゃ?
>>24 全然違うね
違うデバイスかもしれないぜ
できるかどうか知らないけどD3DDeviceが2つもてたら?
それも可能だし、あってもいいよね?
そもそもいろんなクラスからデバイスにアクセスしようとする発想がおかしい
デバイスが必要なのって描画クラスと後はせいぜいリソース管理クラスくらいだろ
たとえデバイスをグローバル変数(あるいはstaticメンバ変数)として配置したとしても
そこにアクセスできるのは描画クラスのみという設計にしておけば良い
デバックするときは描画クラス内だけをみればいい訳だし
ゲームの実装部分はデバイスには触れずに必ずそのクラス経由で描画するようにすれば
たとえばDirectX9から11にしたいなんて時には
その描画クラス内のみを変更すればゲーム部分はそのまま使えるよね
変に引数であっちこっちにデバイスをばら撒いちゃって
どっからでもデバイスにアクセスできるようにしちゃうと
もしDirectXの仕様がかわってある関数の引数の数が変わりましたなんてことになったら
修正箇所を全部直すことになるし
うっかりデバイスの変数名を変えたい、なんてことになったときに一括置換じゃちょっと怖いよね
>>27 あれあれ?
君の実装の仕方だったら確実に俺のほうが影響範囲少ないよ
わからないかな?
お前は誰と戦ってるんだw
>>18 特定メモリに対する書き込みアクセスはVC++のデバッガでも簡単に補足できるから、
グローバルだろうが破壊されるタイミングは簡単にチェックできる。
むしろアドレスが不定のグローバル変数の方がブレークポイント一発で楽なくらいだ。
それより、
>>16とかはデバイスロストを誤解してると思う。
ロストしたデバイスをリセットできるタイミングは前フレームの描画終了〜次フレームの
描画開始の間の1ヶ所だけで、描画の途中でやたらに戻していいものではないよ。
いつまでやるつもりなのこれ…
某スレのテンプレ
●下記の話題は何度繰り返されても結論が出ず、無駄に荒れるだけなので避けましょう
・全角英数でのレス
・コーディングルール全般
・古典タスクシステム
・オブジェクト指向
・バージョン管理システム
・エクストリームプログラミング
・テスト駆動開発
・言語論争
・進路問題(大学にいくべきか、ゲーム専門学校にいくべきか等)
・エディタの強制
・読解力の指摘
・プラットフォームの優劣について
>>32 は?そのレス、俺への反論になってると思ってるの?
そりゃお前がいってるのは死んだときのみの話で
死ぬ可能性がある、もしくは変更される可能性があるってところまでは全くわからないよね?
したら前に例をあげたような関数の中身を全部すみずみまでチェックしないといけないわけだよね?
そこわかって反論してるの?
もう結論でてるでしょ?
育ちの悪いガキの必死な反論聞いてるの馬鹿らしくっていらいらすんだよw
話があっちこっち飛びすぎて理解が追いつかない初心者だけど
>>36がKYなのは分かった
平和だね
っていうかデバイスがロストしても
D3DDeviceのポインタがロストする訳じゃねーし
勘違いの上で議論重ねても仕方なくね?
だからさ、
>>987 よくわからんくせに、講釈たれんなよ
次の質問どうぞ
>>7なんだけどなんか良い方法無いかな?…(´・ω・)
オフスクリーンでレンダリングしてDIBにコピーして、レイヤーウィンドウに描画すればいいんだよ。
>>39 >D3DDeviceのポインタがロストする訳じゃねーし
否
デバイスロストの種類は2種類
1つはポインタごとふっとぶ
そんな状況に陥ったらもう不正終了で落としていいよ
>>45 3Dのスクリーンセーバーが起動するたびに運が悪いと落ちるんじゃねか?
Resetで戻せないなら分かるが、ポインタごとふっとぶなんて状況あるの?
>>47 だから苦労するんだし
D3DDeviceのポインタ保持ってるような組み方してると復帰できない
>>49 D3DDeviceは生きててPOOLMANAGEだかなんだかに設定してると復旧してくれる
本題からかなりずれるけど用はグローバル変数にしててどっかでdeleteされたり変更されたりすると
その変更がわからないってのが問題なわけよ
別にD3DDeviceは例として挙げただけで他のもんでもおこるだろ?
グローバル変数にしてしまうと
unko();
の中身で使用されてるかどうかがまったくわからない
unko(pD3Device);
これだとわかるでしょ?
って話よ
単純な話してんだけどなんで食いつき方おかしいかな?
>>48 D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、
D3DERR_OUTOFVIDEOMEMORYな状況のことを言いたいんだろうけど
インターフェースは生きているんだし「ポインタごとふっとぶ」なんて
普通は言わないと思うが。
>>42 自分なりに解釈して調べてみたんだけど、
1.CreateOffscreenPlainSurfaceでオフスクリーンサーフェイスを作成
2.SetRenderTargetで用意したサーフェイスに描画先を変更
3.描画処理
4.DIBを作成
5.サーフェイスのDCを取得し、StretchDIBitsで作成したDIBにコピー
6.DIBをなんらかの手段でレイヤーウィンドウに描画
って流れでいいのかな?
2すらうまくできてないみたいでまだ最後まで試せてないから、
とんちんかんなこと言ってるなら指摘してもらえるとありがたいですm()m
>>51 >D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、
>D3DERR_OUTOFVIDEOMEMORYな状況
こんな重大なエラーに直面したらメッセージ出して落とすくらいしか
やることないのではと思うんですが
上手くまとめて処理を継続できるのかなあ?
そもそも質問の意図が良くわからないなぁ
デスクトップアクセサリみたいなウィンドウ枠のない描画をしたいってこと?
想像力の欠如だな
まぁありすぎても困ったことになるんだが
やりたいことの説明下手が多いのはいつもの事
>ポインタごとふっとぶ
これは勘違いでOK?
大体COMなんだから、俺が参照保持してる時点で
インスタンスを開放されちゃ困るよ。唯のバグじゃんそれ。
>デバイスロストの種類は2種類
>1つはポインタごとふっとぶ
詳細が書かれたlink貼ってくれないか?
参照カウンタを増やすのを忘れたってオチだろ
>>54 説明下手でごめんなさいm()m
イメージ的にはそのデスクトップアクセサリとやらに近いみたいです。
でもウィンドウ枠は表示できたらいいな(´・ω・)
愛が足りない
64 :
63:2010/01/11(月) 19:01:38
65 :
デフォルトの名無しさん:2010/01/13(水) 18:29:34
ポリゴンで複数の図形を描きたいのですが、図形の数だけ頂点バッファを作らなければならないのですか?
1個の頂点バッファにすべての図形を入れることもできる
お好きなようにどうぞ
67 :
デフォルトの名無しさん:2010/01/13(水) 21:44:16
>>66 1個の頂点バッファに入れるってこういうことですか?
//描画処理
//三角形をデータに設定
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1);
//第3引数は四角形のデータまでのバイト数
g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX)*4, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
66じゃないけど
D3DPT_TRIANGLESTRIPじゃなくて
D3DPT_TRIANGLELISTで一回のDrawPrimitiveで描いた方が
パフォーマンスには優しいんじゃないの?
頂点数が増えるのが嫌ならインデックスバッファ使って
DirectXってほんと不思議な仕様だよな
そうか?
まとめて書いたほうが早いのは昨今のビデオカードでは
API関係なく共通の設計上の都合だが。
ラスタライズ系3Dグラの手法に
寄ってるから、歪なのは致し方ない。
>>70 トレードオフにならね?
確実に画面に入るってわかってるならいいけど
まとめてっていうのもどんな視点で言ってるのか明確にしないとわけがわからなくなる
一番速いのはなにもしないこと(クリッピングではじく)であるのは絶対覆らないわけだし
そんなの質問者の言葉が足りないんだからしょうがない
複数の図形が
いくつ出るのか、動的に数が変わるのか、
それぞれが毎フレーム移動したり回転したりするのか
最低でもそれくらい分からないと
そういう時はしばらくスレの様子を見て、
解決策がアップされたら自分で検証して、
自分の考えがまとまったら御礼のレスを
書き込めばよい
XAudio2はCoInitializeEx COINIT_MULTHTHREADEDで呼べとSDKにはありますが
メインスレッドがCOINIT_APARTMENTTHREADでないと困る状況の場合、
それでもかまわないのでしょうか? それともXAudio2用にスレッドをつくるものなのでしょうか?
DirectX初心者なのですが、
参考書籍でおすすめの本とかありませんか?
何度も言われてることですが
コレさえ読めばOKみたいなパーフェクト本はありません
実際に書店に行って自分のレベルにあったものを選びましょう
積まずに3−4冊消化してようやく「なんとなく解ってきた」と思えるでしょう
そこまでいけば今自分が知りたい情報というのも自ずと分かってくるので本選びで悩むこともなくなるでしょう
そんなお金無い貧乏さんor近くに専門書店がない田舎人さんは
MSDNのオンラインヘルプをじっくり読みましょう
十分な情報量です
XNAって何?
XNAでゲーム作っても誰にも遊んでもらえないよw
.netですら俺には理解できねー
なんでランタイムあんな仕様なの?w
あー、ダメだvc.netのランタイムの仕組み作った奴殴りたくてしょうがねぇ
83 :
デフォルトの名無しさん:2010/01/18(月) 21:56:36
.NETをやり始めると止まらない
楽すぎて溜息が出るね
質問です〜。
Direct2Dで歪な3角形または多角形を書く方法無いですか?
ブラシで塗ったヤツほしいんですけど。
もしかして、ジオメトリー系でいけますか?
WIZとかメガテンみたいなゲームのダンジョンぽいものをつくりたいんです。
迷路の自動生成は出来てて、後は表示がががが。
85 :
84:2010/01/18(月) 23:21:34
すいません。自己解決しました。ID2D1Meshで出来そうです。
余計なことかいてすません。
明日がんばるです。おやすみです。
D3DXANIMATIONCONTROLLERのAdvanceTime()で再生Frameを進めるけど
逆再生したい時はどうすれば良いのだろう?
負数入れても、アニメーションがStopするだけで逆再生されないです・・・
>>86 ID3DXAnimationController::AdvanceTime
Parameters
TimeDelta
[in] Amount, in seconds, by which to advance the global animation time. TimeDelta value must be "non-negative" or zero.
って書いてあるがな
俺がかなり前にAdvanceTimeをラップした時は
正負を見て負の時はSetTrackPositionで強制巻き戻ししてたけど
他にいい方法があるかどうかは知らない
88 :
デフォルトの名無しさん:2010/01/19(火) 15:51:09
レンダリングする時ってカメラの有効範囲?でボックステストを
行って合格した者だけを送ったほうがいいんですか?
そのほうが速くなるならそうすればいい
あからじめ入ることがわかっているならしなくてもいいし
91 :
デフォルトの名無しさん:2010/01/19(火) 22:08:22
D3DXANIMATIONCONTROLLERでアニメーションを進める為のローカルタイムを初期状態にリセットするにはどうしたらよいのでしょうか
アニメーションをループさせずに最大値のポーズで固定したままにしたいのですが、どうもうまくいきません
>>91 初期値
アニメーションコントローラー->SetTrackPosition(トラック,0.0f) ;
最大値
double endTime = 現在のアニメーションセット->GetPeriod() ;
アニメーションコントローラー->SetTrackPosition(トラック,endTime) ;
最大値はちょっと減らさないとダメとかあったような気がするけどよく覚えてない
>>92 今試してみた所できました!
御丁寧にどうもありがとうございました
>正負を見て負の時はSetTrackPositionで強制巻き戻ししてたけど
情報どうも。でも残念ながら、SetTrackPositionで巻き戻しても
Animationは逆再生しなかった・・・仕方ない、D3DX使うの諦めて
自力でAnimationシステム作るしかないか・・・。
会社が倒産して再就職活動中なんだけど、探しているあいだにゲームプログラムを勉強しようと思って
自宅のXPに開発環境をインストールしてみた。ここまでやるのに今日一日かかった。
Microsoft Visual C++ 2008 Express Edition SP1
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
Microsoft DirectX SDK (Mar 2008)
無料のExpressってMFCが使えないみたいだけど、Visual Studio買う余裕もないし
DirectX のアプリ作るのなら必要ないかもしれないから、とりあえずこの環境でざっとSDKを見ています。
そこで質問なんですけど、DirectX SDKのサンプルにあるDXUTってみなさん使ってますか?
これを使えば楽になりそうなんですけど、短所はありますか?
例えば、初心者が使うと中身が理解できなくなるとか、これを使ったアプリを公開するとマイクロソフトに
叱られるだとか…この辺が怖いです。公開することなんてないだろうけどさ。
http://homepage2.nifty.com/natupaji/DxLib/index.html 少し調べただけでも似たようなものがありますし。最初はどれを使ったほうがいいのか、もしくは
使わないほうがいいのか。
みなさんはどうしてますか? 独自のライブラリを開発してあるのかな。
普通に使って良いと思うよ
特に初期化周りのシステムは
ゲームとは関係ないところのくせに面倒で初心者が躓きがちだし
使うことによってもっと他の大事なことを勉強する時間ができるならどんどん使うべき
あとDXUTは普通のミドルウェアライブラリと違ってソースが全公開なので
心に余裕ができたら中身ののぞいてみるもよし
参考にしてDXUTを使わない独自システムを開発するもよし
よく見るといろいろ使える小ネタがいっぱい仕込んであるので
頼るというよりどちらかというと勉強の素材でもある
>>95 DirectXの知識は身に付かないけどゲームプログラミングをやりたいだけならDxLibみたいなライブラリを使った方が楽ですよ。
Visual Studioぐらい買えよ
DXUTは商用、個人使用問わずライセンスフリーだぜ
DXUT使いこなせるならそもそも0からライブラリかけるだろ。
そのくらいDXUTはカオス。
DXUTはプロでも使うと楽。
画像Loaderがjpgやpngやdxtやbmpなど、いろいろサポートしてるし。
あとデバイスのResetやLostなどの管理も楽。
103 :
95:2010/01/21(木) 23:46:23
>>96 Graphics 部分のSDKとDXUTのソース見てみたけど情報が膨大で気力が萎えそうになった
仰るとおりデバイスの持ってる機能チェックと初期化部分はめんどくさそうですね。
デバイスのロストとか(マルチタスクで競合が起るから?)よくわからん事もあるみたいですし。
とりあえずDXUTを使ってゲームプログラムの作りに慣れようかと思います。
>>98 そうですね。初心者には覚えることが膨大そうなので、DXUTで少しずつDirectXの勉強もしていこうと思います。
>>99 それにVisual Studio 2010 というのが出るらしいですし、今の俺は2万円使うの怖いんです。
>>100 ライセンスとかよくわからないので、それを聞いて安心しました。
>>101 いつか独自のライブラリを作れるくらいになりたいです。
みなさんご意見ご回答ありがとうございました。
さっき青い画面だけのサンプルのコンパイルが通りました。
デバッグでDXUTの中まで追っていけるのはいいですね。何をやってるのかわからなかったけど…先は長そうです。
>>102 画像読み込みは結局D3DXなんだが・・・
DXUTのサンプルはDirectXが使えるが
どうプログラムを組んでいいのかわからない人の為の物だと思ってる
まったく分からないところからDXUTの中を追うのは結構大変でないか?
分からない人は中を追わなくてもいいのがDXUT
DXUTには著作権があるんだよ・・・
著作権があって問題あるの?
俺の書いた糞ソースにも著作権はあるんだぜ?
たしかにコピーライトはマイクロソフトにある
しかしこれは「これは俺が書いたんだぜ」と言うのがNGなだけで
開発者はマイクロソフトが許諾する範囲内でこれを自由に利用することが出来る
DXUTの中を追うのが嫌になって結局自分で書き直す事になる
DXUTを独自ライブラリと偽って売る(公開する)のはダメ
DXUTでゲームを作って売るのはOK
出ました自作至上主義
自作至上云々の前にアレつかってゲームってかなりマゾじゃないと無理だろ・・・
質問です。
DirectXを始めてすらいないので、ここでいいかわからないのですが、関連だと思うのでここで質問させてください。
OSはVista、開発環境はVisualStudio2008Professionalで、これからDirectX SDKを使おうと思っているのですが
この環境で開発したゲームをXPでも動作できるようにするにはDirectXは9.0でいいのでしょうか?
それがわかるリンクを張っていただけるだけでも結構です。よろしくお願いします。
XPのDirectXが9までだから、どうしょうもないだろう
今から勉強するのにXPターゲットでDirectX9っていうのも
なんていうか別にいいんだけどいかにも日本的な考えだなっと。
11がXPに入れられるんなら9はいらねーけどな
本人はVISTAもってんじゃん
だからなに?
DirectX11どころか10すら日本じゃろくに使える奴いないんだから
初心者ならなおさら枯れてるDirectX9でいいだろ。
最新技術は海外にまかせときゃいい。
125 :
デフォルトの名無しさん:2010/01/25(月) 07:19:31
最新技術について行けなくなったじじいの世迷い言の典型
ネットブックでゲームはしないだろjk
と考えて11へゴー。10はいらない子と認識している俺
11に対応してるライブラリが・・・あると便利そうだけれども・・・
seleneくらいしか知らんがあれ使われえるのか?
そもそも自分の開発環境に11対応のビデオカードがない悲しさ
間を取って10大勝利
SlimDX を合言葉に各地で兵が集い始めて・・・つまり xna !
これならかつる!
ひそかに12つかってる俺ってすごいな
134 :
117:2010/01/25(月) 11:42:06
昨日質問させていただいた者ですが、みなさんのレスを見て思うところがあったので
もうひとつ質問させてください。
昨日は作ったものを「配る」ことと本や資料の充実を考え、DirectX9を勉強しようと思ったのですが、
「勉強する」ことを考えると9より10の方が良いのでしょうか?
私は現在学生ですが、いずれゲーム作りを仕事にしたいと思っています。
アドバイスをください。お願いします。
誰をターゲットにするかで選択しろ。
グダグダ言わずにまず始めろ。時間の無駄。
どうせどんどん新しいのが出てきてずっと勉強し続けることになるんだから。
137 :
デフォルトの名無しさん:2010/01/25(月) 14:13:38
そうやって何も計画を立てずに目の前の仕事を頑張るのは能率の悪い人間のやること。間違ってもまねしないように。
9にするか10にするかで悩んでる暇があったら9と10の資料集めてさっさと始めたほうがいいやね
Direct2Dも、このスレでよい?
rt->Clear(D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.5f));
rt->CreateSolidColorBrush(D2D1::ColorF(1.0f, 0.0f, 0.0f, 1.0f), &brush1);
rt->FillRectangle(&rect1, brush1);
rt->CreateSolidColorBrush(D2D1::ColorF(0.0f, 1.0f, 0.0f, 1.0f), &brush2);
rt->FillRectangle(&rect2, brush2);
これで白半透明な背景の上に不透明な赤矩形と緑矩形が出来るけど、
この後、赤いところだけ Clear 直後の白半透明な色に戻したいのです。
Clear すると緑のとこも消えちゃうし、赤のところに何色を多重 FillRectangle しても無意味なんですが、
どうすれば良いのでしょう? 範囲限定の Clear とか、領域を半透明色で重ね塗りじゃなくて置き換えとか無いっぽいし。
Direct3D は全く知らないので、なんか凄い初歩的なことなのかなーと。
俺は素人だから適当に答えるが、赤と緑を同じrectで描画するのでは問題あるのかい?
DirectX SDKに入ってるわけじゃないから、このスレは違うんじゃないか?
あと、その説明を呼んだ限りだと、赤矩形を描かなきゃいいだけだと思うが。
>>141 説明が下手ですいません。半透明のキャンパスの上に赤四角と緑四角を描いた絵を見せてから、
次に赤四角「だけ」を消した絵を見せたいのです。
キャンパスが不透明なら、赤四角をキャンパス色で上書きすれば良いのですが、
キャンパス自体が半透明なので。
いっぺん Clear して緑四角だけ書き直せというのはありかもしれませんが、
実際には緑四角以外にも大量にいろいろ描かれているので、ちょっと難しく。
144 :
141:2010/01/25(月) 19:57:18
不透明度関係の実験はやったこと無いからわからないなぁ。
あんまり綺麗じゃない方法だと、一回ビットマップに書き出して、おぱしてぃ1.0で上書きとかだと無理なのかなぁ??
すまん。解らない。
すみません。
FVF設定の D3DFVF_XYZRHW でできるような『極めて平面的なテクスチャ表示』を
3D空間に置いてあるポリゴン(ビルボード)で行いたいのですが、
当然3D空間だと距離による拡大縮小を受けてしまいます。
これを距離による拡大縮小を受けず、1pxがプロジェクションされても1pxのままになるようにするには、
どうすれば良いのでしょうか?
>>赤の矩形だけ消す
キャンバスに描かれた絵には、赤の矩形の情報は乗っていないので
それだけ消すのは無理だろう。
普段実行したコマンドを記録していって、赤の矩形を消すとなったら
赤の矩形描画まで巻き戻すのはどうだ?
まあ、俺だったら採用しないが。
9と10で悩むのはおかしいだろw
悩むなら9か11かだ。
10カワイソス
正直10は8と同じ運命だと思うわ。
11で9,10,11に対応してんだから10の意味がない。
150 :
117:2010/01/26(火) 00:18:15
9で勉強を始めることにしました。
レスしてくださった皆様ありがとうございました。
でもまだnvidiaが11にきちんと対応したカード出してないよね?
確かに11の新要素は魅力的で使いたいんだが、
ATIのカードを導入するとCUDAとかLinux上でのGL開発で困るから入れられん。
初心者ならとりあえず9で始めればいいと思うけど。
CUDAか・・・
けっきょくDirectComputeに取って代わられるんだろうな・・・
cgにたいするHLSLみたいな感じで。
>>145 3Dなのに距離に影響を受けずって何がやりたいのかわからんけど
パースペクティブ射影じゃなくて
D3DXMatrixOrthoOffCenterLHあたりで画面サイズの正射影行列つくって
射影トランスフォーム行列に設定すればそうなるんじゃない?
>>144, 146
スレ違いという指摘もあるので試行錯誤してから移動しようと思いますが、
・clipしてbitmapにcopyしたものを、clearしたところにdrawする
・数千文字・箱程度なら毎回全部書き直す
あたりの速度を試してみることにします。ありがとうございました。
要は「(頻繁に)キャンパスの一部を透明にする」方法っぽいのだけど、
opacity 1 で alpha 0 の色を塗るとかしても駄目なのがとほほ。
>>153-154 ありがとうございます。
>D3DXMatrixOrthoOffCenterLH
こんな関数が有ったんですね。可能性の1つとして覚えておきます。
ありがとうございました。
>>157 3D空間の点をD3DXVec3Project関数でスクリーン空間に射影
射影した点から適当に四角形でも作って(z座標はずらさない)
座標変換済み頂点として描画
これでおkなはず
偶然なのか
ゲ製作技術板のDirectXスレにも似た質問ある
>>158 あちらで数名様にご回答を頂けて、もう締め切られてしまったかな?と思い、
一応ビルボードというお答えを頂いて別の技術っぽいし、1スレッドで1人で連続質問しまくるのもレス流しで迷惑になるかも?とも思い、
こちらで質問させて頂いていたら、あちらで思いもよらぬ追加助言を頂けてしまって; 申し訳ないです;
D3DVERTEXELEMENT9の
D3DDECLUSAGEの
POSITIONのHELPの説明が
(-1,-1) 〜 (1,1) の範囲の位置データです。
ってなてんですけど、どういう事ですか?
まさか float x = 2.0 float y = 3.4 ・・という具合に
(-1,-1) 〜 (1,1) の範囲を超えてはならないという
分けじゃないでしょうに・・・。
>>160 どこにもそんなこと書いてないけどどこ見てる?
やって見れば分かるが別にそんな範囲無い
>>163 そうですか。
そういえばZバッファか何かがその範囲だったような・・・
画面座標系を出力するデータと言う意味なのかも知れない
・・・とかよく分からんけど自問自答してみます。
鏡みたいなものに映ったオブジェクトってどうやって表現すんの?
シェーダーって左右の座標反転とかできんのかなあ?
ステンシルバッファ使って鏡等をマスキング
D3DXMatrixReflect関数で鏡を境に反転する行列を作る
その行列を混ぜて
面の表裏を逆にして描画
こういうことじゃなくて?
鏡面は>168の言うとおりでできる。
水面の反射だともうちょい面倒くさいな。
高さの違う水面があったら、
水面ごとにオブジェクトを反転させて描画するの?
大抵のゲームはひとつの高さの水面しかないけど・・・。
>>170 水面の場合は別のテクスチャに反転モデルを描画する。
面倒くさいから普通は水面は1個しかない。
高さが違う水面が画面内にいくつもあるって状況も普通に考えてレアだろう。
172 :
167:2010/01/28(木) 09:47:17
D3DXIntersectでレイによる当たり判定をしてるんだけど
これってレイが命中する目標が回転してる時ってどうすればいいの?
メッシュに回転行列かければいいのだろうけど
そんな関数ある?
レイの方を逆向きに回転させれば?
その手があったか!
>>170 反転したモデルをそのまま描画するのもありだと思う最近
水面は透けてるだけ
鏡ってのは反転するだけじゃなくて
視点と鏡面との反射角によって見えるものが違うからな
ちゃんとやるには計算するしかない
斜面を流れてる川に正確に反射させる方法あるの?
実用的な方法が思いつかん・・・
平面で表現可能なら傾いていても出来る。
基本的には平面に対する反射行列で描画するだけ。
水面なら水平じゃねーのか?
川が水平だったら流れないでしょ
源流部と河口に高低差があれば、中間に水平区間があっても水は流れるさ
鏡と違って水面の場合は波で反射をゆらしたり屈折の表現が必要になる。
別に難しい処理ではないんだけど単純にめんどいね。
高低差がないように見えても、微妙に発生するぞ。
例えばプールの排水溝を開けば、その上部の水面は引っ張られて沈む。
さらにその周囲は少しずつ角度が緩くなるだけで、トランポリンが変形するのと同じような状態になる。
今話題になってんのはそういう問題じゃないだろ
物理現象の再現や検証はCUDAでも使ってやってろ
アンダーライン付きのフォントを作成したいんですけど D3DXCreateFont では指定できません。
ググルと論理フォントから作成できるものもあるみたいなんですけど、定義されていません。今はもうないのでしょうか?
これ→HRESULT D3DXCreateFont( LPDIRECT3DDEVICE9 pDevice, HFONT hFont, LPD3DXFONT *ppFont );
アンダーライン付きのフォントは作成できなくて、やるとしたら線を引くしかないんでしょうか?
テクスチャに直接書いちゃえばいいらしいですよ
同人ソフトやエロゲでもやってることだが、
将来、文字にルビを振る機能が欲しくなったら、まあ自前で処理するしかない。
それを思えば線を自前で描くとか楽勝だろ。
>>187 事前にわかってる文字列であれば、あらかじめ描画済みのテクスチャを用意しておけということですよね。
なるほど、ちょっと考えてみます。
>>188 線を描く場合は、線の位置がフォントによって変わってしまうので、どうしたものかと困っています。
アンダーラインの位置を決定できる方法があればいいんですけど、それはもうスレ違いの話題になってしまいそうですし。
何にしても現状では出来ないということですね。ありがとうございました。
Nスクや吉里吉里はルビ機能標準装備だから自前で組む必要はない
>>189 CreateDIBSectionでメモリ上に文字を書いて、
そのビットマップ情報をテクスチャに書き出して
動的に文字列書いてるな。
Windowsに入ってるフォントなら何でも使えるし。
>>191 そっか、勘違いしてました。
あらかじめ文字列描画済みの画像をリソースなりで用意しておくんじゃなくて
動的にテクスチャへ書き込むんですね。
>>187さんもたぶんそういう意味だったんですね。
そもそもフレーム毎にDrawTextするより速度的にもいいような気がしてきました。
サンプルとかで用意してあるテクスチャしか使ったこと無かったので、その発想はなかった
ありがとうございました。
+-+-+
| | |
+-+-+
| | |
+-+-+
こんな風に格子上になってる真ん中の頂点法線を求めたいんですけど、
高速に求める方法というのはありますか?
周りの頂点から三角形作って面法線を求めて、各頂点の角度を重みを掛けて
法線を求めているんでですけどもっと高速にする方法はないかなと悩んでます。
まわりの頂点法線の平均とか
外積で一発じゃね?
格子の意味がよくわからない
動的に波うってたりするわけ?
>>193 求めたい頂点の左右と上下の4点から外積で求めるのが普通じゃないかな。
外積って何点必要だっけ?
4点ってそれはつまり・・・何?
>>198 外積は2ベクトル。
4点あれば2ベクトル作れる。
法線の平均って足して2で割るだけでいいの?
>>199 それって参照する三角形の枚数を減らせってだけでしょ?
>>200 確かD3DもOpenGLもそれを採用しているはず。
なので、それで正しいと言えるかもしれない。
しかし俺としては、単純に面法線を平均する方法では
各面の大きさが考慮されず、品質的に問題があると思う。
各面3頂点の外積から作った正規化してない法線を
平均化する方が良いものが出来ると思う。
いろいろ意見ありがとうございます。
説明が全然足りてませんでした。
下図のようにトライアングルストリップで面を作ってます。
幅は均一で高さだけが違います。
+-+-+
|\|\|
+-+-+
|\|\|
+-+-+
本を見ながら作ったので外積とかがよく分かっていません。
中心の頂点に接する面が6面あるので、面法線と角度を重みとして
平均を求めてました。
外積を調べてみます。
点を
123
456
789
としたら3角形(452)、(256)、(658)、(854)の面法線の平均にすれば4面でもよさそうな
どの程度の精度がほしいか?って話だけだよな?
かなりポリゴン多くて1つ1つの法線がテキトーでいいなら
こんなのもテキトーでいいだろ
>>203 1つ言えることは、、規則的な一様な格子であるなら、
三角形ストリップの向き(|\|\| か |/|/| か)によって計算結果が変わるべきではないから、
ストリップ化後の非対称な6つの三角形をベースにして重み付けを考えるのはあまりよろしくない。
なんつーかここだと良くあることだけど
部分的なやりたいことじゃなくて最終的なやりたいことも書こうぜ
根本的に本当にそのアプローチで良いのかどうかわからんだろ
これは地形を動的に生成したいとかそういう話?
>>204 >>206 あ〜なるほど。インデックスを利用してできる三角形を
利用することしか考えていませんでした。参考になります。
>>207 まだ買ってないんですが数値地図(標高メッシュ)を読み込んで
描画させようとしています。なので動的といえば動的です。
描画させるためのテストプログラムを書いています。
俺だったら、
x
-1 0 1
-1 +--+--+
| | |
y 0 +--+--+
| | |
. 1 +--+--+
とおいて、この9点のz座標が
| a b c | | 1 |
z = |1 x x^2| | d e f .| | y |
| g h i | |y^2|
を満たすようなa〜iを求めて、この曲面のx=0,y=0における法線を計算するかな。
それは良い曲面なのん?
描画させるのだけが目的ならD3DXで最適化するとかじゃダメなのか?
そもそも何がしたいんだったっけ・・・?
水面演出?
簡単なカードゲームを作ってみようと思っています
トランプゲームをC++を作ってみようと思うのですが、DirectXを使うのとWin32APIを使うのはどちらがいいのでしょうか?
トランプゲームはGUIで実装してオンライン対戦できたらと考えています
共存できない存在ではないからなんとも・・・
>>213 基本どっちでも良い
Win32APIのBitBltは低速
だが、更新部分のみ書き換えれば良いカードゲームくらいなら大丈夫、かもしれない
毎フレームフル画面更新したり派手なエフェクトを使いたい場合は
BitBltでは処理落ち確定、DirectX推奨
>Win32APIのBitBltは低速
DDBのBitBltはほぼGPU性能そのものなんだが、いったい何が低速なのか、
>>215が無能の間違いなんじゃないか?
オレもそう思うw
vistaではDDBでもアクセラレーション効かないし、
win7ではドライバによって違ってくるあたりがややこしいけどなー
>vistaではDDBでもアクセラレーション効かないし、
すでにVistaでもWDDM1.1対応になっているんだが、いったいいつの話をしているんだ?
>>219 公的な資料で「vistaでもGDIのアクセラレーションが有効になる」と書かれているソースってある?
60フレームで書きかえる用途でもないのに低速とか気にしないでいい
>>222 そこよく文面変わっているけど、「vistaにWDDM1.1が導入される」と
書かれていたことは一度もないんだよね
実機でサポートバージョンが確認できるのに、
グダグダ文句をつける意味が分からん。
まあまあそのくらいで勘弁してやってくださいな
>DDBのBitBltはほぼGPU性能そのもの
ってほんとに自分で試してから言ってるのか問い詰めたい
試すまでも無く自明な話
ププッ
技術者の発言とは思えんw
知らないなら、教えてくださいって聞けばいいものを
そんな態度だからリアルでも使えないやつなんだよ
何・・・この状況?
どちらにせよスレ違い
>>225 >DXGI1.1の機能をサポートするのにWDDM1.1のドライバが必要になるんだから、
WDDM1.0のvistaでもDXGI1.1が動くのはナゼデスカ?
ドライバが対応してないとGDI関連のアクセラレーションが効かなくなるだけ。
だから機能をサポートするのにとわざわざ書いているだろ。
本当に理解力が足りないな。
DirectX8世代のビデオカードでDirectX9の一部の機能が動作しても、
>ナゼデスカ?
とか言い出すんだろうな。もはやどうしようもない。
>>233は、何を持ってDXGI1.1が動いていると判断したか書くべき
>>234 DXGI1.1 required WDDM1.1みたいに書いたのは
>>225なんだけどさ
結局
>>225はPlatform Update==WDDM1.1の答えになっていないってことで良いよね
つか、俺が知りたいのはvistaでもGDIのアクセラレーションが機能するかの一点だけだよ
いくらプロファイル取ってもvista上でのそれを確認できんのよ
俺の中じゃwin7のWDDM1.1とvistaのWDDM1.1は別物って疑惑があがってるんだが
不在の証明ができないもんで公的な資料公的な資料ってわけだ
>>227 DDBの話はとっくの昔に話題になっているし、そのときにきっちり試しているに決まっているだろ。
メインメモリの消費量を監視してDDBがVRAM上に確保されていることも確認した。
VRAMが使われるかはドライバ依存だが、化石のビデオカードでもない限りまずあり得ない。
話が古いだけで今更当たり前のことなんだが、何でそんなに頭が悪いの?
ムキになるのは分かるけど、最後の行は要らなかったよね。
240 :
デフォルトの名無しさん:2010/02/03(水) 00:51:52
質問です。
DirectXで作った画面って普通に印刷できないんでしょうか?
BMP画像にしてから印刷するという情報しかないんですが、、、
見当違いなこと言ってたらすみません。
>>239 いやいや、自爆しているという点でその行は重要だよ。
今更当たり前の話なら、VistaのGDIが問題視されることもなかったのにね・・・
>>240 プログラム上での話なら、プリンタDCに描画する必要があるから
一旦バックバッファを読み込んでGDIオブジェクトに変換する必要はあるよ。
ただ遊んでるゲームのスクショを取りたいだけなら、質問するのはここじゃない。
242 :
240:2010/02/03(水) 01:15:42
ありがとうございます。
今作っているアプリケーションでDirectXを使っているんですが、
印刷すると真っ白で出てきてしまって困っていたところです。
よくわかっていないのですが、GDIオブジェクトというのは、
例えばどういうものでしょうか?
>>242 「印刷すると」と言っているが、今は実際どんな方法で印刷を試みているの?
>>241 >今更当たり前の話なら、VistaのGDIが問題視されることもなかったのにね・・・
当たり前のことが当たり前に出来ないから問題になって改善されたんだろう。
まったく流れが読めてないね。
245 :
240:2010/02/03(水) 07:09:01
>>243 今は、MFCアプリケーションを作ったときにデフォルトでできる印刷機能で
試みてます。
申し遅れましたが、印刷したいと思っているのは、Direct2Dを使って
描画した画面です。DirextX(3D)では、DCに描き込んでいないので、印刷できない
ことは予測がついたのですが、今回は、Dirext2Dで提供されているDCに
書き込む用の(?)レンダーターゲットを使ってやってみたので、印刷
できるかと期待したのですが、やはり無理でした。
印刷以前に画像を別のサーフェイスにコピーしたりは出来ているのか?
もし出来ていないなら印刷云々以前の問題。
247 :
240:2010/02/03(水) 07:21:12
>>246 別のサーフェイスにコピーというのがどういうことかよくわかっていない
のですが、MSDNを見る限り、描画した画面を内部で画像として持つことは
できるようです。画像として保存することもできるようです。
>>244 で、vistaでGDIアクセラレーションは効くようになったんですか?
ドライバ次第
WDDM1.1が認識されている状態なら効く。
すでに各所でベンチマークもとられているのに、何でそのぐらい調べないんだろう?
そもそもvistaのWDMアーキテクチャがGDIをシステムメモリサーフェイスにリダイレクトしている以上
(win7でもWDDM1.0ならこの挙動になる)そこから変更加えなきゃいけないはずなんだけど、
グラフィクスドライバの更新だけでGDIアクセラレーションが有効なるってのがひっかかるんですよ
>すでに各所でベンチマークもとられているのに、
あーそれ気になるなぁ。探しても見つからないので教えてくらはい
ドライバだけじゃなくてシステム側のアップデートが入っただろ。
このスレに出ている話すらまともに読んでいないのかよ。
で、そのアップデートのどこにvistaでもWDDM1.1が有効活用されますとか
WDMが変更されましたって書いてあるの?
>グラフィクスドライバの更新だけでGDIアクセラレーションが有効なるってのがひっかかるんですよ
言っていることがさっきと変わっているぞ。
リリースノートにDXGI1.1を追加と明言されている上、
実際にシステム上で対応ドライバがWDDM1.1として認識される。
しかもWDDM1.1が必須のDirect2Dもサポートに含まれている。
つまり1+1が2なのが辞典に載っていないから信用できないということか?
一人で一生やっていればいいんじゃないか。
Windows7の時点でGDIのアクセラレーションにWDDM1.1が必要という話は、
microsoftが公式でさんざん出している。
vistaのアップデートのリリースノートには、
今更理解できない馬鹿などいるはずがないから、わざわざ書かなかったんだろう。
しかし残念ながら馬鹿がいたようだけど。
>リリースノートにDXGI1.1を追加と明言されている上
DXGI1.1と何をイコールで結び付けているのかわかりません
>実際にシステム上で対応ドライバがWDDM1.1として認識される。
でもWDMが相変わらずシステムメモリにGDIをリダイレクトしてたら意味無くない?
>しかもWDDM1.1が必須のDirect2Dもサポートに含まれている。
や、別に必須ってわけじゃないよ
>わざわざ書かなかったんだろう。
仮にvistaのWDMがwin7相当に変更されたとすると、
ウィンドウ毎のシステムメモリ抑制までvistaに導入されたことになるよね?
開発者どころか一般向けにも喧伝しそうなものだけど・・・
何このスレ
DirectX初心者質問スレ
うちの2D3Dのエクスペリエンスが突然あがったのはこれのせいもあるの?
Direct2DはWDDM1.1対応でない場合はWARPで代用することは可能だが、
とても実用速度にはならない。
WARPなんて使わんよ? GDI+に丸投げしたとしても誤魔化せそうな部分で
3DレンダリングするわけでもないのにWARPを使う理由なんてどこにあるの?
GDI互換の部分で割食うだけだよ。
へえ。そうなのかw
265 :
240:2010/02/04(木) 00:02:28
>>261 そのD2D1DCRenderTargetを使ってやってみたんですけど、できませんでした。。。
>>247 結論的には、いちおう客観面の問題です。
一般的な、構成要件に故意を含み、かつ、
不法領得の意思を窃盗罪の構成要件に要求する立場を前提とすると、
窃盗罪の”基本犯”の構成要件として
客観的要素・・・(窃取)行為、(占有移転)結果、因果関係
主観的要素・・・故意、不法領得の意思
があるわけですが、その”教唆犯”の構成要件としては、
客観的要素・・・教唆行為、(基本犯の構成要件充足)結果、因果関係
主観的要素・・・(以上の客観的要素に対する)故意
が要求されることになって、教唆犯にとっては、
基本犯の不法領得の意思とは、
教唆犯の結果の一部として、基本犯が不法領得の意思を持つこと、および、
教唆犯の教唆時の故意として、基本犯が不法領得の意思を持つように教唆する故意のあること、
として反映されなければなりません。
誤爆です。
すいません。
DirectXを基礎から勉強しようと思っているのですが、オススメな書籍はありますか?
現在はProfessionalゲームプログラミング 2ndEditionを買ってみようかと思っているのですが
このスレでも検索すれば?
そもそも、なんでMicrosoftのSDKサンプルっていつもグチャグチャで読みにくいんだろうな。
あれこそが初心者入門で有るべきなのに
ならそのサンプルを綺麗に書き直してくれよ。
初心者向けに書いてないだろMSのサンプルは。
アレを見て分らないなら素直にそういう本を買えばいい。
DirectX10以降は日本人のライターじゃ技術についていけなくなったのか
知らんけど和書で解説してる本は工学社の1冊しか見たこと無いけどな。
ただ単に11の普及をまってるんだろう
どうだろうな。
工学社がDirectX10のを置換して11対応にしたやつを出して終わりそうな気がする。
初歩的な質問すみません、
「透過テクスチャを貼ったポリゴン」を、forループで50近く描画しています。
1.普通に描画すると透過ポリゴン同士が後ろのを潰しておかしくなる
2.SetRenderState(D3DRS_ZENABLE, FALSE);をすると透過ポリゴン同士は潰しあわないが
結局全てのz値が壊れるせいか、他との描画順序を入れ替えてもアベコベな事になる
となって困っています。
これはforループではなく、全部の描画順序をちゃんと並べて描画していくしか
対処方法は無いのでしょうか?
半透明でなければアルファテストというのもあるよ
推察通り。半透明な物体は、自分でソートして下から順に書いていくのが基本。
俺もソートなんて重そうな処理使っていいのかな、とか思ってたけど
フレームごとに毎回ソートするわけでもないし全然問題なしだった。
1000個とかでもなければソートなんて全然重くないから大丈夫だよ。
>>278-281 ありがとうございます。
アルファテストは魅力的ですが、対応してるかの問題が有るのですね。
今回はソートを組んでみようと思います。
ご助言、ありがとうございました
D3DXFontをカスタマイズして使ってたらだんだん重く感じるようになったので、
一週間ほどかけて独自のフォントレンダラーを作って差し替えた。
10倍以上早くなった。
さようなら、先週までのオレ。
アルファテストに対応してない環境って10年以上前の環境だろw
2年くらい前にαテストとソートで速度比較したことあるけど
びっくりするくらい差がなくてしょんぼりした記憶あるわ
ソートはなんの最適かもしてないクイックソートだったからさすがに枚数増えると辛かったけど。
いまのCPU、GPUだとどうなのかなー
つーかソートしようがしまいがアルファテストはONにしろよ。
特定の用途でOFFにするんじゃない限りはフィルレートの無駄遣い。
つーか、半透明を扱い始めると、アルファテスト無しでは話にならんのだが。
といいますか、半透明は使わないのがベストな選択だよね
すべての状況においてαテストかけると
抜き色が1色とかならいいけど
最初からα値が入ってるテクスチャを描画しようとするときにおかしくならないか?
亀だけど
>>266の誤爆具合と、何イっちゃってるのかわからんすぎてワロタ
>>289 おまえさんは半透明描画するときにα=0まで描画するのかよって話。
α=0でもz値は書き込みたいときってあるじゃん
それは
> 特定の用途でOFFにする
ってことになるんじゃね
295 :
デフォルトの名無しさん:2010/02/07(日) 01:21:22
HLSLについて学ぼうかと思っているのですが、SDKの中にあるサンプルなどを見て初っ端から躓きました。
頂点シェーダやピクセルシェーダの関数のようなものの引数や戻り値はどういった仕様なのでしょうか?
描画しようとしている情報が引数に入ってきて、戻り値に変換した値を返すのは分かるのですが、
そもそも取得したり返すことが出来る値がどれだけあるのかや
それらの値を正しく入出力するためにはどのようにすればいいのかが分かりません。
HLSLを解説しているサイトや本は中身の処理の説明はあるのですが上記についてほとんど触れられていませんでした。
299 :
295:2010/02/07(日) 02:49:19
レスありがとうございます。
>>296にレスしようと色々書いてたら
>>298がずばりな答えでした。
マルチテクスチャのときにはDevice.SetTextureの第一引数に数値をTEXCOORD[n]のnの部分に入れて操作
・・・みたいな形になるんですよね。
じゃあPOSITION1ってどの頂点なんだろ などと調べることが増えたので楽しくなってきました。
300 :
295:2010/02/07(日) 03:06:05
3dcgもやったら理解深まったよ
すみません
現在、120x40のテクスチャを50枚Create〜Set〜描画してしまっています。
マテリアルの切り替えは非常に重いと聞きますから、これは論外なんだろうと思い
この際、種別に全てのテクスチャを1枚に押し込んでしまおうと思いました。
しかし大きすぎると非対応の場合、動作すらしないと聞き不安なのですが、
テクスチャのサイズの上限はみなさんお幾つ位にしてらっしゃるでしょうか?
1024x1024くらいは全然平気だったりするでしょうか。
2,3年前のGPUが8192対応してんのに1024がダメってVoodoo2とかの時代の話だぞ。
>>302 dxinfoで調べろ。
でも最終的に、制限は体で覚えるんだ!
>>295 試行錯誤をやっていいのは、十分に資料がある時と、逆に資料を入手しようがない場合。
確かにHLSLには文法や型や仕様についてちゃんと説明されたサイトがMSDN含めて存在しない。
これ買っとけ。
DirectX9 DirectX Graphics (I・O BOOKS)
試行錯誤も何も
頂点定義がちゃんと分かってるなら悩むとこでもなんでもない気がするが
基本を疎かにしていきなりシェーダーから入ろうとするからそうなんじゃね?
基本とか基礎とか言っても初めてやることはどこが基本なのか分からないと言うのもあるかも。
プログラミングの基礎としてDirectXが、DirectXの入門としてHLSLが使われている時代ですしね。
>>306 それは固定シェーダー時代の経験があるから言えること。
いきなりゼロからやったらHLSL上の変数と親プログラム上で
その変数の値を設定してあげるところひとつとっても分かりにくいし、
techniqueの設定変更に関しては固定シェーダー時代の変更用のAPIと区別がつかないし、
まあ迷いどころは沢山あると思うよ。
ネット上で検索してすぐにひかかる日本語のサイトは
あまりに基本的なレベルの説明で終わってて
実用のレベルには届かないことが多いしね。
>>303-304 ありがとうございます。
dxinfo こんなありがたいサイト様が有ったんですね。紹介感謝っ orz
2048x2048で開発を進めて行こうと思います。
>>309 マジで?検索かけてt-potが見つからなかったとはいわせねー
309じゃないけどt-potも当時としては実用的かもしれないけど今となってはなんとも言いがたいね。
基礎ともいえることなので覚えて損はないが、
説明するにも今の時代に合った方法があるんじゃないかと思ってしまう。
C++の時代にアセンブラから説明しているような感覚なのかな。
AutoGenerateMipmapが使えないGPU(Intel GMA 950)に対して、
手動で高速にミップマップを生成するのはどうやるのがいいんだろう?
あらかじめ生成済みのデータを読み込む
D3DXFilterTexture
HLSLの詳細な仕様なんてMSDNに全部のってるだろ・・・
アレ見て分らなかったら何見てもわかんねぇだろ。
>>316 そうか?
techniqueに指定できる属性や与えられる値の種類とか、
TextureSampleの属性とか、MSDN調べても載ってないと思うが。
>>315 それは既に試したが、遅すぎて使い物にならんかった。
そう、MSDNはエフェクトとHLSLを分けて記述しているから分かり難い。
そこに気づかないと、情報が足りていないように感じるのかもしれない。
あとHLSLは、コンパイル先のasmシェーダの知識があることを前提としているんで
(例えば、oDepthの仕様など)
やはりこれも気づかないと、躓く原因になるかもしれない。
>>319 D3DXで遅すぎるんなら、どの道CPUじゃ駄目だろう。
HDRのトーンマッピングの工程が、
GPUでガウスフィルタを使ってミッブマップを作る内容なんで
参考にしてみては?
>>312 マジで?
HLSLの仕様が変わりすぎて書いてある内容実行できないとかそんなのだったらわかるけど
実際今から始めるとなると覚えることが多いから、時間的に何か切る事になる。
もちろん1から全て学ぶのに越したことはないけど、それは努力とか根性など精神論が通じる状態じゃないよね。
いかに多くの技術に出会い、それを身に付けることが出来るかを考えたらt-potは悩むところ。
前衛的なサイトではないので、あくまで物事に詰まったら見る程度のサポート的存在に感じる。
directx11の解説サイトがあればなぁ
初歩的な質問すみません。
現在板ポリ1枚1枚をCreateVertexBuffer 〜 DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
としているのですが、DrawPrimitiveは重い処理と聞き削減しようと
D3DPT_TRIANGLELISTを使って板ポリを纏めてしまおうと思いました。
しかしこれを纏めてしまうと、透過テクスチャを描画する場合などに描画順序を操れず、
後ろに有るポリゴンが潰れる気がするのですが・・。潰れるのを避ける手立ては有るでしょうか?
特にエフェクト等、瞬間的に結構な数を描画する場合の負担が気になり、
纏められるなら纏めた方が良いと思うのですが、これは間違っているのでしょうか?
>>325 DrawIndexedPrimiteveを使って実行直前に並べ替えたら?
>>326 こんな関数が有ったのですね。早速テストしてみようと思います。
ありがとうございましたっ orz
質問です。
C++でゲーム開発をしようと思っているのですがDirectX SDKのバージョンで悩んでいます。
XP上のみならDirectX9.0c SDKを使えばよさそうですが、どうせならVistaやWindows7にも対応させたいと思っています。
調べると、VistaはDirectX9Exや10に、Windoes7は11?に対応していて、それらにはXPは対応してない模様・・。
こういう場合SDKは何を使用すればいいんでしょう?
たとえば9.0cと10の両方で開発して、プログラム内部でXPとVistaで分岐させるのが正攻法なのでしょうか?
あまり大変そうであればXP一択で行こうと思っています。
もうひとつ質問です。
2Dのゲームを作るつもりなのですがDirectDrawのある7.0までの方が製作しやすいなどあるんでしょうか。
またバージョンを落とすことで何か問題の出る可能性があるなら教えてほしいです。
よろしくおねがいします。
329 :
328:2010/02/08(月) 16:08:20
書き忘れました。自分の開発環境はXPです。
おまえは11のどの機能を使いたいのだ?
331 :
328:2010/02/08(月) 16:38:17
>>330 うーん知識不足で申し訳ない。
どの機能を使いたいというのはないのですが(というよりまだよく知らない)
出来れば、開発したゲームがXP(や2000)・Vista・Windows7上で問題なく動作するようにしたいのです。
そのためにはSDKのバージョンをどう選べばいいか悩んでいるところです。
アホかおまえは
DirectX SDK (February 2010) インストールして Direct3D 9.0c 使えよ
>>328 後方互換を取りたいなら下位バージョンに拘束される。
Dx11は下位互換があるのでXPだったら9.0cを使えばそれ以上のバージョンでも動かないことも無い。
335 :
328:2010/02/08(月) 17:24:14
レスどもです。
最新版のSDKで9.0c使えばVistaとWindows7上でも動くということですね。
というかXP上で開発するならそれしか選択肢がないということですかね?
ともかく助かりました。
そういうこと。
9.0のソフトがVistaなどで動かなかったら、今まで出たソフトは全滅になるわな
ちょっと考えればわかりそうなものなのに
338 :
328:2010/02/08(月) 17:49:27
>>337 確かにそうなのですが動作保障しないものや
Vista対応とわざわざ書いてあるゲームも結構見たので・・。
よく見るとwikiにも書いてありますね。。
SDKはXP上だと10や11は使えない→9.0cを使うしかない。ということですね。
下位互換があるなら7.0はどうなんでしょう。やはり最新版が無難かな。
スレ汚しすみませんでした。ありがとうございました。
Vista対応はDXだけの問題じゃねえよ
7.0?なぜ使いたいんだ?理由を言えって
あと下位互換?わかってて言ってんの?ふざけてんの?
340 :
328:2010/02/08(月) 18:06:17
>>339 なるほど。
理由は最初に書きましたが、2Dゲームを作りたいのでDirectDrawのある7.0までの方が製作しやすいとかあるのかなと(おそらく最新版の方がいいとは思いますが)。
ある程度調べたりはしましたが・・まだ分かってないこともあると思うので勘違いしてそうなら指摘してほしいです。
うーん自分はなにか色々勘違いしているようですが、断じてふざけてはないw 迷惑かけます。すみません。
>断じてふざけてはないw 断じてふざけてはないw 断じてふざけてはないw 断じてふざけてはないw
おまえは俺を不快にする事しかできないのか
342 :
328:2010/02/08(月) 18:13:00
>>341 ごめんなさい。まさかふざけてると言われるとは思わなかったので
ただの照れ隠しです・・。
色々教えてくれてるのに申し訳ない。
二点リーダーや三点リーダーの後に句点をつけるな
日本語の校正もしてくれる、良いスレだ。
345 :
328:2010/02/08(月) 18:22:47
なんだこの流れ
クラス設計のスレは無いですか??
ゲーム製作技術板にある・・。・・
DirectX使うならまずゲームだろうから覗いて見ては・・どうだろうか・。?
ゲーム用とじゃないとしても、いかにもゲームに使うっぽく聞けばよろし。・・・
・・。・・。・・。・・
フフフ?醂フ?辟辟辟醂フ
さっそく つかっているな
そうやって ひとびとのこえに みみをかたむけるのだ
ネット世紀末覇者がいるスレはここですか?
>>352 分かち書きをしてる奴はキチガイ
これは譲れない
>>348 ありがとう。でも書き込み余り無いからここで質問してみます。
やあ俺はパチンコをやめて最新PCを買う金を貯めることにするゾ!!
DX9ともおさらばさ!!みんな応援してね!!
パチンコをやるプログラマなんているわけないだろ
だってあれ操○され○る○で○るようにしてあ○もんねw(ここだけの話)
絶対勝てない勝負をする奴は馬鹿
ある3Dソフト用のファイルをD3DXLoadMeshFromXみたいに読み込みたいんですけど、どうやって実装すればよいですかね、、、
パーサーは提供されているんでシーンルートからどんどん読んでいくだけなんですけど。
最終的にほしいのは頂点バッファとインデックスバッファとマテリアルがメンバの構造体。
LoadMeshFromFile(ファイル名, メッシュ*) {
メッシュ* pMesh = new Mesh();
マテリアル *pMaterial = new Material();
LoadMesh(pMesh){}
LoadMaterial(*pMaterial){}
}
こんなんでいいんですかね??俺は馬鹿ですね
DXUTの使い方が詳しく乗ってるサイトありませんか?
MSDNのヘルプが一番詳しいんじゃない?
今まで見た中で
DXUTとか↑の方ででてたシェーダー初歩とか一番初心者向けの本は
DirectX9実践プログラミング(WindowsVista対応版)だと思うなぁ
ただしこの本読んでもゲームやらアプリやらが作れるようになるわけではないのであしからず
DirectXを知るには結構良い本だとは思うけど
情報量が多すぎてある取捨選程度択できる人じゃないと
いっぱいいっぱいになっちゃうか「ふーん」で終わりになってしまうことが多そう
あと、今俺の持ってるのだと
DXUTの仕様が古くてコールバック関数のパラメーターとかが現行バージョンと違ってた気がする
たいした違いじゃないから修正は容易だけど
シェーダー(描画を担当するもの)とメッシュ情報って分けてる?
同じもの、特にアニメーションするものを複数同時に描画したい時に
どっちが便利か考えれば分かるだろ?
>>364 じゃあ例えば
シェーダークラスのrender関数の引数にメッシュデータを渡して描画するという感じのほうが便利ですよね
>>358 普通に審査通ってる機械はまともだよ。まぁ儲かるかどうかは知らんが。
演出が始まった時点で当たり外れは確定してるからボタン操作は無意味だけどね
何年か前に7号作ってたけどそんなに酷くはなかったけどなぁ
最近の事情はしらんけど
チームの他のメンバーは結構好きな人多かった
DXSDK Feb2010来てるよ
またSlimDXが後方非互換になるな……。
軽く欝だ。
そこらへんはSlimDXの使いにくいとこだわなw
DirectX11はじめてみようとしてるけど、エフェクトでBeginPathとかやらない方向性なの?
頂点シェーダ矢ピクセルシェーダを直接使うの?
右手座標系で作られたデータを表示したらテクスチャ座標が正しく表示されません
どうやって変換すればいいでしょうか?
>>374 ありがとう
解決しました 1から引けばいいんですね
DirectXを使ってお絵かきソフトでやるように点や線を描くにはどうすれば良いんでしょうか?
まともな詳しい回答をお願いしますm(__)m
378は無視します。
テクスチャをロックする
色情報を書き込む
以上
アンドゥーとかしたいなら使えないけど
そんなこと書かれてない1行質問じゃこれ以上答えようがないなぁ
なんかものすごいお手軽簡単関数があるとか期待しちゃってるんじゃない?
すみません
>>379は
>>377じゃありません。
回答ありがとうございます。テクスチャに書き込むっていう方法はなんとなくわかっていたのですが
>>381の人がいうようにもっとお手軽な方法があるのではと気になって質問しました。
ただ点を描画するのがやたら面倒な気がしたので。
もしかして、幅×高さ分の四角いポリゴンを貼り付けるなんていうことをやるんじゃないかとか。
DirectXに曲線を引く方法はない
どうしてもやりたいなら
マウスの位置から逆算してテクスチャに直接色を書き込むか
これだとマウスの移動速度がフレーム更新より速い場合、間が途切れてしまうので
一定間隔ごとにマウス座標を記録して
間をCatmull-Romスプライン曲線とかで自前で計算して間を補完してドットを打つしかない
お絵かきソフトはどっちかって言うとDirectXよりOpenGL向きだな
そう・・・か?
DirectX11ならComputeShaderもあるしかなり色々いけると思うが。
どっちも向いてない
それ以前にDirectX11ならDirect2Dを使うべきところだと思うが。
フォトショはCS4から一部機能にOpenGLを組み込んだね
で?
頭の悪いやつに限って、短絡的な返事しかできないよなw
なんだと
ha?
394 :
386:2010/02/13(土) 11:57:24
言葉が足りなかったのは認める
>386で自分が言いたかったのは、
曲線を描く場合はDirectX、OpenGL、どちらも向いてない
ということ
OpenGL+曲線 でググると何か引っかかるみたいだが…
>>388,392
CS4でOpenGLを取り込んだ事と
ペイントソフトでやるような点や線の描き方の話
この二つに何か関係あるの?
一応言っとくけど389、391、393は自分じゃない
煽り返されるのが嫌なら煽らなければいいのに
なんでお前らそんなにピリピリしてるの?
ん?
だからDirect2D使えって。
新しいOS買えないお
400 :
386:2010/02/13(土) 15:32:04
>386では、向いてないから向いてないと言い、
>394では、>388,392氏の話に疑問があったから聞いただけで
別に煽ってるつもりは全く無いんだけど
401 :
デフォルトの名無しさん:2010/02/13(土) 19:14:54
D3DXMatrixRotationX(&matWorld, cta);
pDevice->SetTransform(D3DTS_WORLD, &matWorld);
におけるマトリックスmatWorldの解釈は次のどれが正しいでしょうか?
(1)World座標系XYZにおいて、3Dモデル(の頂点ベクトル)をX軸まわりに
θradだけ回転させるためのベクトル回転変換行列。
(2)3Dモデルの各頂点座標(ξ,η,ζ)を記述しているξηζ座標系が
ワールド座標系XYZに対してX軸回りにθradだけ回転している(3Dモ
デルもX軸回りにθradだけ回転している)。matworldは3Dモデルの
各頂点座標(ξ,η,ζ)を(X,Y,Z)座標に変換する座標変換行列。
(3)どちらの解釈でもいい。
(4)どちらの解釈も正しくない。
ベクトルの回転変換行列であろうと座標変換行列であろうと両者の要素の中身
は一致するから(3)でいい気がしますが、回転、移動操作に対応した行列
乗算の順序が右側にかけていくか、左側にかけていくかの違いが生じるのでは
ないか? という気もします。
解釈などない。固定機能の描画時の行列 D3DTS_PROJECTION x D3DTS_VIEW x D3DTS_WORLD の三番目というだけ。
前二つに単位行列を入れておき、D3DTS_WORLDに全部自前で計算した結果だけ入れる使い方もあった。
403 :
デフォルトの名無しさん:2010/02/13(土) 20:32:15
はあ
>>401 結局なにが聞きたいのかよくわからないな
そもそも3Dモデルを回転させるための行列と考えてるのが良くないんじゃ?
全ての頂点座標がワールド原点を中心に回転してるから
結果としてモデルが回転してるように見えてるだけ
当然回転行列をかける前の行列に移動オフセット値が入ってれば結果が変わる
質問が理解できないのですか?
回答者として失格ですね。
ああ質問して損したなあ
貴方が損しようと得しようと、俺らには何の関係もないですからな
赤の他人なわけですし
ダメモトで質問し、もし良回答が得られれば儲けもの、くらいの気持ちでいなされ
いままでの流れからして本人じゃないでしょ
スルー推奨
なんでム板ってIDでないの?
>>401 仕様に関してはドキュメントを見れば?
解釈がどうのこうの書いてあるのか
俺は知らないけどね
411 :
デフォルトの名無しさん:2010/02/13(土) 23:24:07
この程度か… まぁ、平日になれば質問の意味がわかる人がいるかもしれない。
>>405 ありがとう。でも、その程度のことはわかった上で質問してます。
>ベクトルの回転変換行列であろうと座標変換行列であろうと
>行列乗算の順序が右側にかけていくか、左側にかけていくかの違い
どうも、単純に行列積の理解が足りていないだけのような。
>>411 ここはクズの集まりだから質問内容さえ理解できないということだろう
あきらめて他へ行った方が手っ取り早く的確な回答を得られる
釣り針がでかいというか
かなり痛い子がいるというか
>>411とか文章読んでてかなり恥ずかしいわw
これはまさしく厨二病
クズ呼ばわりも癪なので
とりあえず、アイちゃんの脳に
テレパシーで回答すると、
>>401 (3)でいい。
>回転、移動操作に対応した行列
>乗算の順序が右側にかけていくか、左側にかけていくかの違いが生じるのでは
>ないか? という気もします。
これは、いまいち意味不明だが
右から掛けるか、左から掛けるかは、
転置行列か否かによる。
OpenGLは右から左、
Direct3Dは転置なんで左から右
あれ、これって適当に「(3)でいいよ」って答えれば
勝手に納得してお引き取り願えるパターンじゃね?
だなw
今、ゲームのBGMを鳴らすのは何が主流なの?
色々規格があってよくわからん・・・・
oggがベター
midi
beep
モールス信号が主流
頂点宣言ってメッシュの種類によって動的に作れますけど、
それに対応するシェーダー(エフェクト)ってあらかじめ用意していく必要がありますよね?
そこらへんのクラス設計ってどうすべきか知りたいです。
lambertシェーダー(スキンなし)、lambertシェーダー(スキンあり)、lambertシェーダー(法線マップ有り)
こんな感じで何個も用意しておくんですかね?
>>423 ・エフェクトファイルを複数用意する
・一つのエフェクトファイルに複数のテクニックを詰め込んで切りかえる
・一つのテクニックでパスで効果を分けて切り替える
状況に応じて使いやすいほうで
今、DirectX9のサンプルを触ってるんですが
TutorialやText3Dでは50fpsくらいしか出ないのにPIXGameDebuggingだと120fpsくらい出ます。
(何もしないプログラムの方が早いと思ってましたがそうではないんですね^^
同じbeginnerなんですが、次に学ぶサンプルとしてはハードルが高い気がします。
早いDirectXプログラムを作るためのキーワード、参考書など教えていただけないでしょうか
>>418 ファイルフォーマットとAPIどっちを聞いてるの?
427 :
デフォルトの名無しさん:2010/02/14(日) 02:45:26
DirectX10の最新版をダウンロードしようとして
三日探し回ったんですが、Runtimeとか9以外はまったく見つかりませんでした。
だれか直接ダウンロードできるページのURLを貼ってください。
どうかよろしくお願いしますm(__)m
>>401 文章からみるに座標系が全く理解できてない
ローカル座標とワールド座標ってのを知らないとダメ
後はキーワードで勝手にググレ
430 :
デフォルトの名無しさん:2010/02/14(日) 03:53:23
>>429 ありがとうございます・・・?
次はもっとはやくお願いしますm(__)m
24時間スレを監視してくださいのコピペ思い出した
荒らしが居ついたのかこのスレ
433 :
デフォルトの名無しさん:2010/02/14(日) 10:09:54
>>415 回答ありがとう。
directXは(行列*列ベクトル)の演算と違って(行ベクトル*行列)の演算
だから行列を転置にしなければならない。したがって、行列の積ではかける
順序が逆になる、というのはあなたの指摘どおりだ。
ところがベクトルを回転させる回転変換行列か、座標軸(もの指し)を
回転させた座標系間の座標変換行列かによっても乗算の順序は違う。
>>412 >> 414 >> 428
わかりもしないくせに偉そうなこと言うな雑魚! ひっこんでろ
>>416 お前も黙ってろ。
(1)の解釈で納得していたんだが、(2)の解釈でないと説明できない
問題が発生したんで(と、その時は思ってた)。
DirectXでは回転、移動の操作順ごとに行列を右側にかけていくよう
だから(そして転置行列の積だから)、(1)の解釈でいいようだ。
ただ、DirectXの関数が(1)(2)のどちらの考えにたって実装されているのか
確認したかったから聞いたのに
>>410 の馬鹿が仕様を調べれば、とアホな
回答をしているのには閉口した。そんな事しか言えないなら黙ってろや。
わかっている人からのアドバイスには感謝するが、アホ相手するのも
面倒だからもう書かない。
アホはまた何か書くだろが、相手しない。
>>433 もう少し言い方を考えなよ。
そんなんじゃ敵を増やすだけじゃん。
行列に関しては「DirectXだから」というわけではない。
別にOpenGLだってそういう風に行列ライブラリ作ればそうなるし。
Vector4本で表現できて扱いやすいから行列があの形になってるんだよ。
右から左って直感的にも逆になって分りづらいし。
シェーダーに渡すときは高速化の都合上転置が必要になるけど。
dotじゃなくmul/madで同じ命令数できるからまぁ気分の問題だろうな。
ね? 本当に勝手に納得して帰っていったでしょw
>>433 わかってないのお前だけだと思うよw
入門書の一冊でも買えばいいのにごたごたごたごたこんなところで
恥かいてえらそうにしてる人間みるのはさすがに見苦しいな
ナニがアホの相手だ
SDKについてくる単純なモデルも表示できねぇくせに(爆笑w)えらそうなこというなw
ていうかお前、人のいうこと素直に聞けないならPGなんてさっさとやめろよ
まったく見込みねぇからw
座標系も理解できない奴にナニをどう教えろってんだ
このすっとこどっこい
>>425 TutorialやText3Dがfps低いのは垂直同期がオンになっているから
ドキュメント等で使用を確認しろよw
まじでドキュメント見ろw
ドキュメントはみない
これは譲れない
まずドキュメントを見てすべて確認するのが先だろ・・・。
その上でアレが分らないコレが分らないつーのが順番として正しいんだが・・・。
441 :
427 ◆BnFNx9vEUQRt :2010/02/14(日) 12:02:32
>>429 ありがとうございました。IDみてもらえばわかりますが、
嫌味なレスをしたのは私ではありません。荒らしのようです。
当方はOSはvista homepremiumを使っているので起動させることができそうです。
サンプルということは、DirectX10の最新版はないのでしょうか?
それならばどうりで私のような素人が探してもわからないはずです(笑)
442 :
427 ◆BnFNx9vEUQRt :2010/02/14(日) 12:04:08
この板IDなかったんだw
>>441 何を探しているの?
プログラム板で聞いてるんだし、SDKだよね?
>>441 最新版に9、10、11のサンプルがあるってことは
最新版に9、10、11のライブラリがあるってこと
DirectX 9、10が最後に更新されたバージョンとかはしらね
>>426 APIです。
以前はDirectShowにmp3突っ込んで鳴らしてました。
一応、鳴ってるのでこれで良いのかもしれませんが・・・。
DirectX11からDirect2Dは使えないよ。
DirectX10からでないと利用できない。
ボーン付きメッシュファイルでtiny.xより小さいデータってあります?公式の。
あ、やっぱいらないです
450 :
427 ◆BnFNx9vEUQRt :2010/02/15(月) 23:36:57
>>423 >>424 あ、いや、開発用のSDKではなく普通にゲームをプレイするようの
Directx10です。よろしくお願いします。
>>450 ごめん意味わかんない。
何がしたいの?
自己解決しました
なんかほんとに自己解決したのか
荒らしが即レスつけてるのか分からんな
454ですが、まだ解決してません。
自己解決したようにとられてるっぽいので念のため。
デバッグを人に頼るな
>>457 コンパイル通らん
entry.h(37) : fatal error C1083: include ファイルを開けません。'M3D.h': No such file or directory
FF13ぽいゲームを作ろうとしていますが、自己解決しました
>>457 バグとは関係ないところだとは思うけど
CheckMsg関数は↓のように書き直すべき
メッセージが空になって無い状態でゲームの処理をするのは
行儀が悪い
BOOL CheckMsg()
{
static MSG msg;
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
return TRUE;
}
}
return FALSE;
}
>>458 確かに、自分でデバッグはするものだと思います。
アップしたデータの"VertexRaster.h"と同じ方法で描画する形式なのに
正しく動かなくて、
自分なりにソースを読み返して怪しいところは書き換えてみたり、
調べてみたつもりなんですが何がいけないのかわからずじまいで、
頼ってしまいました。すいません。
>>459 entry.h 37行目 削除でお願いします。
協力してくださったのに、不手際があってすいません。
よろしければお願いします。
>>461 気に触れてすいませんでした。
>>462 レスありがとうございます。
以後気をつけます。ご指摘ありがとうございます。
ほんと宿題を2chに投げる奴多すぎ。
最近のゆとりは自分で解決する努力をほんとしないよな。
古いグラボだと2のn乗のテクスチャ以外読み込めないということがありましたが
バックバッファは320x240や640x480などといったサイズで問題があったとは聞いたことがありません。
メモリ上は2のn乗に収まる四角形になっているのかは分かりませんが
そうだとすればCreateTextureが融通が利かなかっただけなのでしょうか?
ブラーをかけようとしてレンダリングターゲット(テクスチャ)を用意したのはいいものの、
バックバッファは16:9でテクスチャは1:1で自分で設定してたからえらいことに(´・ω・`)
今から晩御飯食べます。
その間に回答よろしくです(´・ω・`)
食べ終わりました。
回答まだでしょうか(´・ω・`)
日本語でおk
四角と思い込んでるところが勘違いの元
471 :
466:2010/02/16(火) 20:39:49
>>470 ん?テクスチャは四角形だけどもヘッダー情報があるから見た目以上にメモリを食っているという話でしょうか。
ということはバックバッファを確保する際のヘッダーとテクスチャのヘッダーが違うため
バックバッファは自由にサイズを決めれてもテクスチャが2のn乗のサイズ出ないとだめ・・・ということに?
いいから質問の要点を言えよ
なにが聞きたいのかわからねぇよ
エスパーすると
テクスチャのレンダリングターゲットに描画するときに
バックバッファと同じ射影行列を使ったから本体とブラーが一致しなかったってことじゃね?
テクスチャに描画するときはアス比を1にして射影行列を作らないと
475 :
466:2010/02/16(火) 21:08:04
>>472 ・テクスチャが2のn乗の四角形でないとダメだった理由。
・バックバッファはそういった制限がなかった(問題になるほど取り上げられていない)理由。
・上記2点より、違いは何か。また、後者で起きなかった問題が前者で起こらないように対応が出来なかった理由。
>>473 サイズが1辺の話かバイトの話かってこと?・・余計に分からないです。
>>474 同じ比率にしなかったのはテクスチャは2のn乗という癖が出ていたためで、
私のPCでは2のn乗でなくても問題ないので大丈夫でした。
そこがどうこうではなく、そもそもバックバッファが2のn乗のサイズにする必要がなければ
元々テクスチャも2のn乗のサイズでなくても大丈夫なのでは?と思ってしまい、質問させていただきました。
>>419 の話で、oggがベターというのを聞いて
ライブラリでデコード→メモリ上に展開→セカンダリバッファに入れて再生
というのは出来たのですが、
ゲームつくろー!
ttp://marupeke296.com/GameMain.html というサイトで紹介しているような、
スレッドをもう一つ生成→ストリーム再生
という方法が難しく、理解できていません
こういうストリーム再生のコードは自分で書くのが普通ですか?
それともなにか便利なライブラリをつかってるのが主流なのですか?
>>475 >320x240や640x480など
このサイズが2のn乗に反してると思う理由はなんなのよ。
そもそも2のn乗が使えない環境が現存する環境ではまずないから気にするだけ無駄。
なぜ2のn乗が効率的に優れていたのかは自分でラスタライザーからエンジンを書けば分る。
>>475 そういうことが聞きたいならここで聞くよりググったほうが速いだろ
・テクスチャが2のn乗の四角形
ハードの仕様
メモリの帯域幅の都合上2のn乗でしかブロック転送できなかった
現在は制限が無いとはいえ一番高速に動作するのは2のn乗
いまだって見かけ上は2のn乗でなくても内部的には余分に2のn乗で確保されてるビデオカードもある
・バックバッファはそういった制限がなかった
制限がなかったわけではなくむしろ逆
ハードのドライバ能力で許可されたサイズのバッファしか作れなかった
つまり320x240*8itや640x480*8bit等のサイズでしか作れなかったというのが正しい
いまみたいに任意に作れるようになったのも最近だ
すみません
LPDIRECT3DTEXTURE9 型で作ったテクスチャを今まではそのまま名前指定で作っていました。
そこでテクスチャの生成は1つの関数を作って纏めようと思いました。
外部に関数を作り、そこにLPDIRECT3DTEXTURE9 型のポインタを送り
CreateTextureの第7引数に送る所までは良かったのですが、
いざLockRectして書き込もうとすると、ピリオドでもアロー演算子でも
「左側はクラス、構造体、共用体でなければなりません or ジェネリック型へのポインタではありません。」
等エラーが出てしまいます。
これはテクスチャを扱うイロハを理解してないからなのでしょうか?
それとも私のC++の理解が曖昧なのが原因なのでしょうか。
何かご指摘を頂けると幸いです。
481 :
466:2010/02/16(火) 22:16:59
レスありがとうございます。
バックバッファとテクスチャってそこまで大きな違いがあったんですね。
テクスチャのほうばかり気にしていましたが、いつの間にかそこまで気にする必要のない時代になっていたり
バックバッファのほうが制限がきつかったなど知らなかった情報を得られて良かったです。
>>480 C++どころかC言語の知識すら怪しい
その外部とやらはLPDIRECT3DTEXTURE9型が何であるのがちゃんと定義されてるのか?
>>481 いずれにしろ気にしなくていいし知ったところで今となっては使い道のない知識だけどな。
ここ数年のハードウェアならINTEL製でもない限り
サイズが変だからってそれが原因で速度が落ちるような事はない。
処理速度をきにする状況ならもっと他にやるべき事がある。
>>482 ありがとうございます。
むむ・・・。LPDIRECT3DTEXTURE9型で作ったテクスチャを、名前で普通に指定すれば正しく動作するのですが、
アンバサンドを付けて参照送りし、LPDIRECT3DTEXTURE9*で受け取って扱うとLockRectでエラーが出るので・・
扱う部分をポインタに変える以外は一切手を加えてないのですが・・うーん orz
とりあえずポインタを使うのを恐がり過ぎて何か勘違いも有りそうですし、再勉強が必要そうですね;
>>484 そゆことか
LPDIRECT3DTEXTURE9はそれ自体がポインタ型なので
これを参照渡しした場合はダブルポインタ扱いになる
つまり参照先であつかうには
LPDIRECT3DTEXTURE9* texなら
(*tex)->LockRect
>>484 MyCreateTexture(LPDIRECT3DTEXTURE9* texture) {
CreateTexture(256,256,0,0,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,texture,NULL);
*texture->LockRect(); //これ?
}
こういうこと?
コンパイルエラーも消せない馬鹿はここに来るな
>>476俺は自作。
再生までできてるならあともうチョイ!
ようはDirectSoundにイベントを設定してイベントがシグナルになったらデータの続きを読めばいいだけ
うまく設計しとけばogg以外のフォーマットも読み込み処理だけ多態で変えればストリーミングの仕組みが使えるから便利よ
>>489 そっかぁ・・・
自作してる人もいるってことで励みにもなった、ありがとう
もし作るときに参考にしたサイトがあれば教えてほしいです
難しいけど自作するとやっぱ勉強になりそうなんでがんばってみまする
>>490 イイヨ〜
「Ogg Vorbisを楽しむ」でググりなされ
DirectSoundはもう古いと思うが。
XAudio使えばストリームの機構も簡単に作れるよ。
>>491 サンクス!
参考にしますぜ!
ストリーミングについてはゲームつくろー!
を参考にしたんですか?
>>492 なるほど!
こういう方法は楽そうでいいですね!
これも検討してみまする
ありがとう
ウンコした後答えるねえ
お待ちしております。
ゲームで解像度を選べるのってあるじゃないですか。
あれってどういう仕組でやってるんでしょう?
1 描画するものを一つ一つ解像度に合わせて位置や大きさを調整する
2 テクスチャにレンダリングして、解像度に合わせてテクスチャを拡大表示する
3 その他
>>498 どんなゲームを想定してるのか知らないが
1はどんだけ手間だよだし
2は解像度上げる意味がない
2Dにしろ3Dにしろ普通は解像度あげるとより外側まで描画されるように作るんじゃねーの?
>>498 基本的に1だね。
サイズより位置、特に配置の仕方さえ注意していれば特に問題ないはず。
面倒なら最悪表示座標を倍掛けするだけで、当たり判定とかそのままで使える。
3Dなら何の問題もないけどね。
高解像度設定で文字が読みづらいというゲームもあるけど、これも対応が面倒なら放置。
普通は1だよ
>>498 なにか根本的な勘違いしてる
3Dだったら
同じ射影行列で描画してる限り、いくらビューポートが広がっても
描画するピクセル数が増えるだけで描画される範囲は一緒だ
2Dでも正射影で基本のサイズに固定しておけばビューポートのサイズを気にする必要はない
画面サイズにあわせて自動で拡大縮小される
2Dで座標変換済み頂点で書いてたらちょっと面倒かもね
画面サイズによって再配置や大きさ調整のしくみを仕込んどく必要がある
503 :
498:2010/02/17(水) 20:03:27
2Dと3Dの両方で考えてましたが、勉強になりました。
ありがとうございます。
>>485-486 ありがとうございます。
なるほど、ダブルポインタになってたんですね。勉強すべきはそこ と。
感謝っ orz
四角いポリゴンにテクスチャを貼りつける方法で画像を表示させようとしています。
ポリゴン作成には各々の頂点の座標・色・テクスチャの座標が必要ですよね。
普通、最初に作成しておいたポリゴンを行列で変換する事で画像の移動等を行う、と
どこかで読んだのですがいわゆるテクスチャアニメーションをさせたい場合は
やはり毎回頂点作成を行わなければならないのでしょうか。
UVをトランスフォームしてもいいし、頂点を書き換えてもいい。
やりたいようにやれ。
レスありがとうございます。
2Dでそんな事に悩むのはあほかもしれませんが、
取り合えずUVトランスフォームを調べてきます。
>>454 ローカル変数はちゃんと初期化しないとダメだよ
ZeroMemory(&mViewPort, sizeof(D3DXMATRIX));
マトリックスを0クリアっておかしくねぇか・・・
単位化するのが普通じゃね。
ZeroMemoryで初期化していいのは構造体だけじゃなかった?
typedef struct D3DXMATRIX : public D3DMATRIX
仮想関数持ってたら死ねるね
素直にD3DXMatrixIdentity使えよ
すみません、テクスチャの生成モードの
D3DFMT_A8R8G8B8 と D3DFMT_X8R8G8B8 にはどういう差が有るのでしょうか。
透過色を作りたいのですが、予期しない透過が起きたりで混乱しています。
>>514 If the source texture contains fewer than four components, defaults are placed in the missing components.
とある
D3DFMT_X8R8G8B8ではα値は無視される
何もしないワールド変換行列って要素が全部0ではなくて
1000
0100
0010
0001
だから
D3DXMatrixIdentity()
で初期化がいんでねぇの?
>>515 ありがとうございます。 X8R8G8B8はそもそも透過が無理だったんですね。
ついでにピクセル毎に転送するビット数の記述も3と4でミスってた所為で可笑しな事になってた様です。
解決できました。ありがとうございましたー orz
ZeroMemory(&俺の脳みそ, 0.1);
サイズちっさww
SecureZeroMemoryだと最適化でも落とされないし
WinMainCRTStartupでもサイズ全然増えないぞ
で?
知っておいて損はないだろ
勝手にD3DXMATRIXをゼロフィルする無神経さが問題なの
ゼロで埋めていいのか保障ないでしょ
こんなの常識だよ、いまどき保育園児だって知ってるよ
天才幼稚園児現る。
はあ?
まとめ
D3DXMATRIXは構造体で仮想関数も持っていない。
ゼロで埋めることは問題ないが、意味がない。
幼稚園児とか言っている奴は、自分の意見の補強に実情のない例を出す馬鹿。
以上。
幼稚園児は冗談だろww
スルーしろって
D3DXMATRIXって関数持ってるからクラスなんじゃないの?あれ
構造体もメンバ関数は持てるぞ。
C++の基礎中の基礎。
というよりC++の構造体はクラスそのもの
問題ないからという理由で、取りうる最悪の選択するのはどうか
メモリをクリアする為のゼロと、浮動小数点数のゼロは違うもの
言ってもわからなさそうだが
532 :
デフォルトの名無しさん:2010/02/19(金) 18:51:31
※この構造体は例に転載したものです。
struct Bone {
int id;
Bone *firstChild;
Bone *sibling;
D3DXMATRIX initMat;
Bone() : id(), firstChild(), sibling() {
D3DXMatrixIdentity(&initMat);
}
};
質問なんですけど、このBone() : id()〜 { } はどういう意味ですか?
名称も分からないのでググりようも無いです。
ただのコンストラクタでの初期化だな。
C++の入門書を読むのが良いと思う。
私はそういう知ったかぶりのようなコーディングが嫌いなのでC言語で書きます
>>491 いろいろ試行錯誤して悩みましたが、
おかげでoggストリーム再生ができました!
いろいろまだ整えないといけない部分がありますが、がんばった甲斐がありました
改めて、
ありがとう
マルチスレッドはいろいろ考えなければならないことが多いようなので
しっかり調べて整えていきまする
>>532 デフォルトコンストラクタなら書かなくても同じなのに、
何か中途半端な言語ヲタっぽい気持ち悪いコードだな。
>>532の例では初期化子を書かないと初期化されないわけだが
スーパー言語ヲタの
>>538が手本を見せてやってくれ。
>>538 >>537は、id(), firstChild(), sibling() のように
引数なしでデフォルトコンストラクタを明示的に呼んでも無意味だろっていう意味ね。
初期化子を書かなくてもデフォルトコンストラクタは勝手に呼ばれるんだから。
(つうか、この3つは整数とポインタだからデフォルトコンストラクタも存在しないか。)
コンニャクラピュタ
POD型は明示しないと初期化されないんじゃなかったっけ
id(), firstChild(), sibling() を省くと変数が初期化されない旨の警告が出る
規格上初期化されないことになってるし
普通のコンパイラならそうなってる
544 :
542:2010/02/20(土) 09:27:47
いいよ、お礼は
>>542 逆に id() と書くと id はどう初期化されるの?
組み込み型の初期化だがあんまり知られてないのかもな
id()、firstChild()、sibling()は0で初期化される
もしbool型がならfalseになる
テンプレートで役に立つ場面がある
そうなんだ知らなかった
C++の入門書に普通に載ってるよ
入門書に普通に載ってるのか、すごいな
>>454のソースを今更ながら見たんだがエラーチェック全然してないじゃないか
そんなんじゃバグ取りなんて出来ないよ
#pragma comment( lib, "dxerr9.lib" )
#include <dxerr9.h>
HRESULT hr = device->CreateVertexBuffer( /* 省略 */ );
if( FAILED( hr ) )
{
DXTRACE_ERR( TEXT("IDirect3DDevice9::CreateVertexBuffer"), hr );
/* 省略 */
}
こう書いておけばデバッグ時に何処で何がどういう理由で失敗したのかが
デバッグウィンドウに出力されるぞ
クラスと違って基本型は int i; と int i(); では挙動が違うのね。
勉強になったわ。
でも int i(); だと関数の宣言になるから注意
リソースからxファイル読み込んでD3DXLoadMeshFromXに渡したいんだけど、
リソースの部分は「XFILE DISCARDABLE "test.x"」っていう書き方で特に問題ないですよね?
どうしてもD3DXLoadMeshFromXでエラーが出てしまう…
ファイルから読み出す関数なんだからエラーが出て当たり前だろ。
何故問題がないと思えるのか、全く理解できない。
FindResource関数 +
SizeofResource関数 +
LoadResource関数 +
LockResource関数 +
D3DXLoadMeshFromXInMemory関数
もしくは
D3DXLoadMeshFromXResource関数
を使えばいいよ
557 :
デフォルトの名無しさん:2010/02/20(土) 22:53:18
まだやっていないのですが、JPEGやDDSなどのテクスチャにヘッダ情報を付加したいと思っています。
ファイルの先頭からnバイト進んだところからは元のJPEGやDDSのデータです。
D3DXCreateTextureFromFileExではファイル名の指定ですが
画像の先頭部分(=ヘッダの終端)のアドレスを渡して読み込ませることは出来ますか?
もしかして圧縮データを解析して1ピクセルずつ設定していくことになるのですか?
開発環境はWindowsXPでDirectX9です。
ddsの構造なんて簡単なんだぜ
ありがとうございます。
>>558 よくよく考えたら結局展開して使うので全てDDSにして解析すればできそうですね。
>>559 このアプローチは初めて知りました。
テクスチャ以外にも使えそうなので身につけようかと思います。
リソースから読み込む関数が別にあったんですか…
リソースも読めると思ってました。
ありがとうございます。
562 :
デフォルトの名無しさん:2010/02/21(日) 02:44:32
Direct3D9から、10すっとばして11に移行しようとしてるのですが
IDirect3D9::GetAdapterDisplayMode()と同じような機能が見つかりませんでした。
DXGIになってだいぶ変わった部分だとは思うのですが、
何故消えてるのかよくわかりません・・・
理由をご存知の方いましたら教えてください。
>>562 デバイスの管理部と実際の描画部がきっちり仕分けられたので
アダプタが持ってる情報はアダプタインターフェースに問い合わせる形になったっぽい
IDXGIAdapter:EnumOutputs -> IDXGIOutput::GetDisplayModeListあたり? 自分もいまいち勉強中
最新のDirectX SDKでDirectX Audioを使いたいと思い,過去のSDKバージョンから
必要なヘッダファイルを取ってきたのですが、
GUID_DirectMusicAllTypes
CLSID_DirectMusicLoader
IID_IDirectMusicLoader8
・
・
・
等が未解決エラーがでてしまいます
これらはどこのlibファイルに記述されているのでしょうか?
探しても見当たらなくて困っています。
>>565 Direct SDKはそのまま全体を参照するように設定しないとダメ。
>>563 >>564 ありがとうございます、GetDisplayModeListは既に見てたんですが列挙するということで
現在の画面モードとは関係ないと思って無視してました。
そもそも現在の画面モードはどうでもよくなってるのでしょうか(256色モードとかもう無くなってるし
フルスクリーンの場合、既定で現在のデスクトップ解像度を使うとかあったので
Windowモードでも同様なのかもしれませんね。
まだ実際に動作を見るところまで行ってないのでなんともですが;;
TwinTailのを参考にしてWindowモードで動かそうと思うので、何かわかったら報告します。
どうもありがとうございました。
>>566 libファイルすべて参照したらいけました。
ありがとうございました。
見えないポリゴンを表示しないって処理はどうやってるんでしょうか(Occlusion Cullingっていう技術?)
見えないポリゴンの定義が曖昧です
透明なポリゴン?
ポリゴンの裏側?
手前にすでになんらかのオブジェクトがあるポリゴン?
カメラの範囲外のポリゴン?
>>570 すみません。曖昧でしたね。。。
>手前にすでになんらかのオブジェクトがあるポリゴン?
これのことです。
Occlusion Cullingって言ったらわかる気もするが?
DrawPredicatedってサンプルがまさにそれ
サンプルだけ見ても使い方は分かりにくいからリファレンスマニュアル読め
DirectX9以前でできるかは知らない
オクルージョンで処理するのが一番手っ取り早いけど。
なんの為にそうしたいのかによる。
たんに高速になるって勘違いしてるならソートして手前から書くほうが速い。
>>572 >>573 ありがとうございます
LPDIRECT3DQUERY9とかでできそうですね・・・
ちょっとやってみます
単にZバッファ使えって話じゃないのか
素朴な質問なんだが、同じプロセスがテクスチャやバーテックスバッファを
確保・開放を繰り返すとしまいに失敗したりするようなことって出てくる?
すみません
SetTextureで手前と完全に同じポインタのテクスチャを設定した場合でも
やはりテクスチャ切替の負担はかかるのでしょうか?
DrawPrimitiveした瞬間にすべてが動いてる希ガス
>576
フレーム毎にテクスチャ生成、開放するだけのプログラム書いて放置してみればいい
解放〜確保の間に別のメモリ確保が入ると穴だらけになりそうで怖いけどな。
PCは大丈夫だろうけど360ではメモリをブロック単位で管理するとか常時保持出きるよう組み直すことも必要になるかも。
>>577 オーバーヘッドはAPIの呼び出し回数だからなぁ
>>577 ドキュメントに記載がない以上、環境やドライバに依存する可能性があるとしか言いようがない。
583 :
デフォルトの名無しさん:2010/02/23(火) 15:32:23
質問です。
D3DXMATRIXにある、
friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& );
というオペレータは、どういう効果を持っているのでしょうか?
値を渡して少し試してはみたのですが、どうにも何をやっているのかわからなくて…。
ドキュメントなどもオペレータ周りの解説は省かれているようです
使う、使わないはわかりませんが、知っておきたいのでよろしくお願いします。
まんま行列の乗算になるだけ。
ありがとうがぜいました。
>>583 D3DXINLINE D3DXMATRIX
operator * ( FLOAT f, CONST D3DXMATRIX& mat )
{
return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
f * mat._21, f * mat._22, f * mat._23, f * mat._24,
f * mat._31, f * mat._32, f * mat._33, f * mat._34,
f * mat._41, f * mat._42, f * mat._43, f * mat._44);
}
d3dx9math.inl見れば書いてあるよ。
>>585は偽物です。
あ、なるほど。
MATRIX * floatを逆に書いた場合用ですね。
どうもありがとうございます
あと、d3dx9math.inlの存在を初めて知りました。
これ、とても勉強になりそうなので読んでみます。
ありがとうございました
知りたいところは殆ど見えないd3dx9math.inl
最適化があるから仕方ないけどさ
ええ・・・。
実際に詳しく見てみたら、関数関連は全て闇の中ですね。
MSDNに式自体は載っているのでいいといえばいいのですが…
以前ここでも話題をふりました
「D3DXによる最適化のせいで、PC環境の違いが実際に計算結果の違いに現れる問題」
について、みなさんどう対処していますか?
当時「D3DXなんて使うなボケ」という煽りにも似た指摘をいただきましたが、
確かに今となってはD3DXは(ゲームロジックに対しては)使わないべきだと強く思っています。
次回作のために、D3DXの算術関数を全て自前で書くかなぁ…。と思っているのですが
みなさんはどうしてるんでしょうか?
そんなのゲーム会社に入ってから考えたほうがいいんじゃないの?
他に考えるべきことがいくらでもある
リプレイの配布以外に、そんなに実害出ないしなぁ
595 :
577:2010/02/24(水) 01:11:54
>>594 3D格闘ゲームで、通信対戦をキー情報のみやりとりする方式で作って公開したんですけど
計算誤差でガンガンずれて大変でしたw
結局D3DXをソフトウェア処理デバッグモードに強制的に変更してすませたんですけど、正規のやり方ではないですしなんとかしたいところ
昔ここで相談した時は「D3DXなんて使うなボケ」という意見が大勢でしたので、
何か有名なライブラリでもあるのかな?と思ったのですが・・・
どうでもいいが、
>>590の「ゲームロジックに対しては」という書き方は範囲が広すぎだボケ
D3DX使うなは暴論だけどな。
算術関連に限り自前で用意した方がいい場合があるってだけだ。
>>596 メッシュの描画位置とキャラクターの位置情報を別に計算すりゃあいいじゃん。
前者はDirect3Dの管轄で、後者はゲームエンジン側。固定小数点ででも持ってればいい。
これで何か問題あるのかね。
お前ら本当に口だけだなw
そもそもVCの標準ライブラリですらデフォルトで浮動小数点は環境依存だぞ。
浮動小数を信用する方が悪い。
>>599 キャラの拳の位置に攻撃判定をもたせるなど、アニメーションと密接に絡んでいたもので。
・AnimationControllerを使っている段階で誤差発生
・攻撃判定とくらい判定との衝突計算にD3DXを使い誤差発生
でした。
とりあえずAnimationControllerは二度と使わないですね。
そもそもバグ多すぎですあれ。
見つけたバグについて、海外フォーラムからも指摘入ってるのに最後まで直さず終わったみたいですし。
単に再生するだけなら良いものの、キーなどを動的に書き換えるとひどいことになります
幸いスキンアニメーションプログラム自体は難易度低いし、OpenGLの時には自前でやってましたからそれ使ってしまいますが…。
>>601 お、ほんとですかそれ。
情報ありがとうございます。
float a = 何か;
float b = 何か;
a *= b;
これも、環境によって若干誤差がでてしまったりします?
コンシューマにどっぷりつかってた甘ちゃんなものですいません。
単純な計算はコンパイルオプション次第。
数学関数等は設定を変更する関数を利用する。
行列の計算って重いの?
コンパイラの使い方はスレ違い
D3DXの話から派生してるし、役立ってるから問題ないと思われ
俺も興味ある
_controlfp_sとかじゃね
まあスレ違いだとは思うけど
DirectXスレ住民が、D3Dの初期化内部で_controlfp_sが呼ばれていることを知らないとは思えない
ここは初心者スレですよ
_controlfp_sなんて始めて知った
教える側まで初心者になってどーする
浮動小数点の互換性問題はDirect3Dでゲームを使っていればぶちあたる問題のわりに、スタンダードな対処法が確立されていない
丁度いいのでここで存分に語り合ったらどうだろう?
やりたければ話を続けたい奴が適切なスレに移動すればいいだけ。
なんで内容が脱線しているのに自分勝手に強行しようとするのか意味不明。
内容が脱線してるとか言ってる人は放っておいて、とりあえずD3DXを使うと浮動小数点の計算が環境依存になってしまうのは確か。
一応防ぐ方法として
http://d.hatena.ne.jp/NyaRuRu/20040819#p1 PSGPの無効化 については読んでおいて損は無い
でもこれをやると、DLLの遅延読み込みなどができなくなるなど副作用もある
(しかしこの話のどこが脱線しているのやら…。自分に関係ない話題でも、知識は得ておいて損無いと思うぞ)
そこまではD3DXの話でも、代替LIB制作時の浮動小数点計算をどうすればいいかはスレ違いだろ
バーカバーカバーカバーカバーカバーカ
そこまで厳密にならなくても・・・
・D3DXの欠陥(互換性という意味ではね)の話
・その代替品を作るべき場合とは
・代替品を作る場合の注意
って感じでいいじゃないか
浮動小数点の計算ってそんな差が出るもんなの?
if (f < 1.00000f)
の時、環境によって0.99999f になったり 1.00000fになったりしたら、ゲームにならないだろ
差の大きさは問題じゃないさ
将来、独自形式ファイルのメッシュを読みこませるための練習としてD3DXCreate使わず、頂点バッファ・インデックスバッファを使って
箱を描画しようとしたんだがCreateVertexBufferはエラーでないのに、CreateIndexBufferがうまくいかないっぽい。だれかおせーて。
↓宣言一部
#define TEST_FVF (D3DFVF_XYZ | D3DFVF_TEX1)
LPDIRECT3DVERTEXBUFFER9 m_pMyVB= NULL;
LPDIRECT3DINDEXBUFFER9 m_pMyIB=NULL;
struct TEST{
D3DXVECTOR3 p;
FLOAT u,v;
};
↓練習として箱を作ろうとした
MyCreateBox(){
if(FAILED(pDevice->CreateVertexBuffer(sizeof(TEST)*8,D3DUSAGE_WRITEONLY,TEST_FVF,D3DPOOL_MANAGED,&m_pMyVB,NULL))){
return E_FAIL;
}
TEST* v;
m_pMyVB->Lock(0,0,(void**)&v,0);
v[0].p=D3DXVECTOR3(-0.5f,0.5f,0.5f);
(中略、UV値も設定)
m_pMyVB->Unlock();
// 36のインデックスからなるIndexBufferを作る
pDevice->CreateIndexBuffer( 36* sizeof(WORD), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pMyIB, NULL );
(以下略)
}
エラーコードは?
>>622 C++で書いてるなら、全てのDirectXのAPIの呼び出して戻り値をチェックして、失敗してたら例外を吐くように書いておこう。
625 :
622:2010/02/24(水) 22:33:22
>>622 m_pMyIBに値が帰ってくるらしいがどうすればいいかわからん
うまくいかないってのは
動くけど実行動作がおかしいのか
そもそもコンパイルエラーが出るのかどっちなんだよ
627 :
622:2010/02/24(水) 23:34:23
>うまくいかないってのは
>動くけど実行動作がおかしいのか
>そもそもコンパイルエラーが出るのかどっちなんだよ
ゴメンちゃんと書かなかった・・・
「動くけど実行動作がおかしい」状態。インデックスバッファのとこ
コメントアウトとしても結果はかわらず。
if(FAILED(pDevice->CreateIndexBuffer(略){
(略)
} else MessageBox(NULL,"エラー","エラー",MB_OK);
でメッセージボックスが出てくる。こんな感じ。
他にも説明で足りないとこあったら言って。
>>627 当然、分かってるとは思うけど、APIのエラーコードとそれによる文字列化されたエラーメッセージを
デバッグ出力なりに書き出させる例外を吐かせるんだぞ?
いや、それくらい分かってたよな。スマン。
>>593 他にいくらでもあるから何なの?
お前さあ、回答する資格ないよ
>>627 CreateIndexBufferの戻り値を調べろ
話はそれからだ
631 :
622:2010/02/25(木) 00:35:17
>CreateIndexBufferの戻り値を調べろ
>話はそれからだ
やり方が。。。
わ か り ま せ ん(泣
どなたか教えていただけませんか?
一応、載せますと VisualC++2008 ExpressEditionで開発しております。
↓自分にいろいろ見ながらエラー原因を表示しようとしたもの()
if(FAILED(pDevice->CreateIndexBuffer(略){
(略)
} else {
HRESULT k=pDevice->CreateIndexBuffer(
MessageBox(NULL,"エラーあり以下原因","Tool",MB_OK);
if(k==D3DERR_INVALIDCALL ) MessageBox(NULL,"メソッドの呼び出しが無効である","Tool",MB_OK);
if(k== D3DERR_OUTOFVIDEOMEMORY ) MessageBox(NULL,"十分なディスプレイメモリが存在しない ","Tool",MB_OK);
if(k== D3DXERR_INVALIDDATA ) MessageBox(NULL,"データが無効である ","Tool",MB_OK);
if(k== E_OUTOFMEMORY ) MessageBox(NULL,"十分なメモリを割り当てることができない ","Tool",MB_OK);
}
ひどいソースだ・・・
DXTRACE_ERR_MSGBOX これつかえばいいんじゃ
メッセージボックスでエラー表示するのも大事なことではあるが
VSで開発してるならデバッカの使い方を多少は知っといた方が後々の役に立つんじゃないか?
開発中なら直後にブレイクポイント置いて値の中身みるだけで済むじゃないか
>>619 IntelのFPUは内部で80bitで計算してるのよ。
だから32bitで計算するSSEとかと比べると、微妙に結果が変わってくる。
最下位ビットが1ビット変わる程度の差だから一回の計算では全く問題ないが、
リプレイなんかだと誤差が蓄積されるので影響が出てくる。
>>622 >>if(FAILED(pDevice->CreateIndexBuffer(略){
>>(略)
>>} else MessageBox(NULL,"エラー","エラー",MB_OK);
>>メッセージボックスが出てくる。こんな感じ。
とりあえず素数でも数えておちつけ
これじゃ「CreateIndexBufferが失敗しなかったらメッセージボックス」だ
>>635 Intelのっつーかx87系はすべて、だな。
INTELで作ったリプレイデータもAMDのCPUでもちゃんと全く同じ結果になる。
SSEみたいに演算機自体が違う場合は当然別だけど。
638 :
622:2010/02/25(木) 11:30:58
ごめ
pDevice->SetIndices( m_pMyIB);を書き忘れてただけだった!
夜だし睡眠薬飲んだ後だったから少しぼーっとしてて、見落としたみたい。
でも、ここのおかげで自分が基本的なこともわかってないことが分かった。
本当に夜遅くに騒がせてすいませんでした。
CreateIndexBufferとかんけいねーじゃん
それってコンパイルオプションで指定出来なかったっけか?
規格に準じた浮動小数は計算速度が遅かったような・・・
精度に由来する規格外の問題と、特殊ケース(DENとかINFとか)に関係する規格外の問題もあるからごっちゃにすると面倒臭い。
精度落とすだけならx86アーキテクチャでも速度は変わらなかったような記憶があるが……
すみません
幾つかの3D作品で、離れたキャラクターが軽量の別モデルになるのではなく
何やら穴ボコの、描画されない面の多いモデルになるのを見かけるのですが、
あれは何という名前の機能・技術なのでしょうか?
LOD
離れたキャラクターが軽量の別モデルになるのがLODじゃねーの?
俺には「バグ」としか思えないんだがw
一体どんな現象なのかさっぱりわからん
ファークリッピングとかZファイティングじゃないのか
>>642は肯定的な「機能・技術」として聞いているんだよな
D3DXは、作成者の意思に関わらず
CPUによって、x87やSSEを切り替えるのが問題なのか?
つーか、これ狂ってると言われても仕方ないレベルww
プログレメッシュは別に穴ボコには
ならんしなぁ 何だろ?
ゲッダン?
節子!それ技術やない!ネタや!
見てみたいからゲーム名を教えてくれ>遠くで穴ボコになるゲーム
LODってどうやんの?
カメラからの距離を毎フレームもとめてメッシュを切り替えるの?
>>653 そんなのゲーム次第だろ
モデルの切り替え(ポッピング)をいかに目立たなくするかは
ゲームごとにチューニングしていくしかない
LODはカメラ距離にしたがってモデルの精度を変更する技術の総称で
別モデルに切り替えるのはLODの一つであって全てじゃない
プログレッシブメッシュもそうだし
ディスプレースメントマッピングとか
DirectX11で注目されるシェーダーによる無段階のテッセレーションも全部LOD
なんかもうLODってシェーダの切り替え程度でよくね
そもそも距離で描画面積が減るからピクセルシェーダーの
切り替えは大して効果がないという。
減らすべきは頂点数・ボーン数
キャラが大量にわらわらでてくる無双系だと役立つけど、格闘ゲームとかには意味の無い技術だよね
いや、前者で役立てば十分すぎるんだけど
HLSLのデバッグってできるんですか?シェーダーに渡された引数の値を知れれば良いです。
PIXって最新のSDKインストールしなきゃいけないんですか?
660 :
659:2010/02/26(金) 18:17:20
すみません。最新のSDK入れます。無視してください
だが断る
directx9 2003 →directx9 2008
結構変更されてるんだね。。。知らなかった
PIX使えました
なんで2008なんだよ・・・2010を入れろよ・・・
DirectXは2004octで完結した
異論は認めない
XInputとXAudio2が2004octで使えるなら異論はねぇよ
XInputに関しては全く使い道がないんだが、本当に使っているのか?
XInput対応のパッドがDirectInputだとL2R2を同時に取れないのは致命的。
対応自体は簡単に出来るんだから両対応しないのはありえないだろ。
>>667 X軸右傾きと、X軸左傾きが別にとれるようになったとかなの?
(DirectInputだと、両方押されてると差引0として認識)
>>667 それについてはSDKだったかMSのサイトに説明があるけど
過去のゲームとの互換性のためにそうしたとのこと。
ドライバ側でボタンや軸の入れ替えができるのは俺は反対。
それはアプリケーション側で解決すべき問題。
>>669 >それはアプリケーション側で解決すべき問題。
2つ以上の軸をDirectInputで読み取れないところが問題だったわけだが?
ドライバが変なことしてるせいでDirectInputで期待通りに取れないだけで別にDirectInputは悪くないんじゃ
最初にXInputで取りにいって駄目ならDirectInputに切り替えれば良い話に見えるが
>>672 パッドがXInput対応の物が問題であって
例えばPS2のコントローラをUSBに変換して繋いでいるようなものは問題なかったり。
XInputが出て何年経ってるんだよ。
新規プロジェクトでいまだに対応しようとしない方が悪いだろう。
対応しなきゃいけないという法があるわけでなし
XInput対応のパッドの時にXInputを使って、
そうじゃなけりゃDirectInputで取るようにすればいいだけ。
排他的にどちらか片方だけ使わないといけないわけではないから悩むこと自体おかしい。
RawInputってどうなんだろう
DirectInputからこれに置き換えていくべきなのかな?
RawInputを使えば、DirectInputのキーボードとマウスに関してはすべて自前で実装できるよ。
つまり効果だけでいえば、車輪の再発明に等しい。
>>678 入力関係に関してはOSの想定を超えた解像度の入力が欲しい場合もあるから、
敢えて車の再発明もやらないといけない場合がある。
特にマウス関係がそうらしい。
680 :
デフォルトの名無しさん:2010/02/28(日) 19:13:37
Direct3Dでマウスを使用した極座標でのカメラの回転までは出来たんですが、
カメラの平行移動はどうすればいいんでしょうか?
例えばマウスを左に動かしたら、カメラとターゲットをビューに対して右に平行移動させたいです。
ん?
「自分が前に前に歩いているのではなく、世界が後ろに動いている」みたいなことを実装したいの?
現実世界だとカメラの位置と注視点が50センチ前に移動する・・・みたいな考えだから、問題なければそれでいいんだけどね。
682 :
680:2010/02/28(日) 19:31:39
右でも左でもいいんですが、「マウス中ドラッグで掴んで動かす」的な動作をイメージしていたので
カメラのビュー行列からXYZの直行ベクトルが取れるから、それを移動量にかける
>>682 >右でも左でもいいんですが
カメラが動くか、カメラ以外が動くかの違いだよ。
地動説と天動説に置き換えたほうが分かりやすいかな。
>>680 >Direct3Dでマウスを使用した極座標でのカメラの回転までは出来たんですが
俺にはここからナニをいってるのか理解できないけどな
極座標だからなんだっていうのかさっぱりわからない
中高数学の勉強をやり直したほうがいい
いやいや、それ以前にカメラとターゲットが同時に移動したら
背景が動くだけでターゲットはスクリーン座標的には動かないだろw
そもそも質問者はワールド空間にカメラがあって
描画するときはオブジェクトをカメラ空間に移すっていう概念を知っているの?
回転って表現があやしいなぁ・・・って感じるんだけど?
俺はそこから問い詰めたい
>>683,688
なんで行列をかけるという回答が出ないんだろ
別に間違いじゃないからどうでもいいことではあるけど、
カメラに関しては回転もするんだからまとめて行列でしちゃえばいいのに
691 :
642:2010/03/01(月) 00:12:39
692 :
688:2010/03/01(月) 00:35:01
>>690 そういえばその手があったねorz
昔、速度とか気にしてたときの名残でそう書いてしまった
>>692 意味不明すぎてレスできません
入門書でも買ったらどうですか?
2Dスプライトベースのアニメーション作成ツールって無いんでしょうか?
リソース登録して、画像やキーフレーム、姿勢を指定できるようなやつ。
3Dツールみたいにスタンダードフォーマットがあれば対応したいんだけど・・・
>>674 XInputはおろか、Win32APIのパッド関数で十分なもんで^^;
行列を使うと無駄に処理が遅くなっちゃう時代・プラットフォームがあったとか
例えば8bitPC時代は、手作業で命令のクロック数えて最適化してたらしいし…
式に展開?したほうが速い場面もあったのかもしれない
その頃の癖でうっかり考えちゃうというのはありそう
>>695 スタンダードフォーマットなんて無いよ
とりあえず受け皿となる独自フォーマットを作っといて
それから適当なアニメーショ作成ツールを探してきて
(できれば単なるテクスチャーシフトじゃなくてフォームが組めるやつ)
そのソフトが吐き出すフョームデータやシーケンスデータを
最初の独自フォーマットのコンバートするツールを作る練習をしとくといい
会社どころかチーム単位で使ってるソフトが違ってることがあるので
そのたんびにプログラムをいじるのは非常に面倒
ソフトに合わせてコンバートツールを作るのが普通
>>695 君のレスから「2Dスプライトベースのアニメーション作成ツール」だけ抽出してググると最初に引っかかるんだが
そのまんま"2Dスプライトアニメーションデータ作成ツール「SpriteStudio」"ってのがある
どうにも宣伝乙だな
使ってるところもあるんだろうけどスタンダードとは言いがたい
VRMLみたいな、3D向けに作られたモデリング言語を2D空間で記述した方が、
なまじ2D専用の言語を作って記述するよりも汎用性や拡張性が出るんじゃなかろうか。
14万8000円か。趣味の個人向け用じゃないよね。
うちの社内ツールとできること変わらん感じ。ちなみにPS2時代から生き残ってる奴で、
プログラムはカオスで触りたくもないクソツール。
ツールのシェアだけ言えばFlashが圧倒的に普及しているけどゲーム内で使うとなると工夫が必要になるね。
ScaleformGFxみたいなミドルウェアもあるけど、SpriteStudioにしても商用限定だからなあ。
3Dにしてもスタンダードと言えるようなフォーマットは無いような気がするし・・・
スプライトエディタをフリーソフトとして公開すれば結構需要あるんじゃないだろうか。
>>683 >>688 レスありがとうございました。
結局普通に計算して出しました。
行列演算はワールド座標変換で少し使った程度なので、これから詳しく調べてみます。
XAudio2のSourceVoice->GetStateで取得できる、サンプル数の合計をリセットする方法はありますか?
おっ。XAudio2か。じゃあ俺も便乗質問。
XAudio2でフェードインをやりたいんですが、
SourceVoiceにSetVolumeを細かく刻んで与えると音がぶつ切りに聞こえます。
フェードアウトだとなぜか問題ないんですが。
どうやったら回避できますか?
ららーらーんらーんららーん
XAudio2ならフェードアウトするための便利な機能があるぞ
あれ、XActの方だったか?
質問の答えは知らん
D3DPOOL_SYSTEMMEMのサーフェイスをUpdateSurfaceでバックバッファに毎フレーム描くと、
メモリの破損を疑うようなガタついた画面になるんだけど
原因分かる人います?
ちなみにD3DPOOL_DEFAULT + StretctRectは問題なしでした
memtest86でシステムメモリは問題なし
グラボはGeForce6600GTでデュアルビュー環境です
D3DデバイスはHALでD3DCREATE_HARDWARE_VERTEXPROCESSINGです
転送待機が発生しているだけかと。
UpdateSurface後に1 Presentしたあとバックバッファにコピーするとか。テクスチャでレンダリングするとか。色々工夫してみよう。
フルスクリーンとウィンドウで待機動作が違うこともあるし、こういった挙動は環境依存。
システムメモリとVRAM間との転送でこういった現象はよくある。
質問です。
メタセコイアLEを使って、自分で作ったXファイルをプログラムで読み込んで描画させると、
モデルはしっかり反映されるのですが、面に指定した材質が反映されません(色がメタセコイアのデフォルトカラーになってしまいます)。
テクスチャは使用していません。
素材サイトなどでとってきたモデルは色がちゃんとつくのですが、何がいけないのでしょうか。
プログラムではライティングモード、メタセコイアLEでXファイル保存する時はUVマッピングに法線を指定しています。
何がいけないか見当がつく方、教えてください。よろしくお願いします。
D3DPOOL_SYSTEMMEMのサーフェイスからバックバッファに毎フレーム描くだって?
ご冗談を。
テキストファイルで保存して中身を開いてマテリアルの項目がどうなってるか確認するんだ
フリー版のメタセコで吐き出した奴でも普通に読めるし
ファイル作成かプログラムになんか不備があるんじゃねぇの?
>>712 SetRenderStateでD3DRS_AMBIENTを設定してる?
あとDXViewerでそのXファイルを見たら、きちんと見えている?
みなさん、レスありがとうございます。遅くなってすみません。
>>714 うpしたことないのでやり方等教えていただけますでしょうか。面倒で申し訳ないです。
>>715 Material 3 {
"body-color" col(0.000 0.000 0.549 1.000) dif(0.600) amb(0.550) emi(0.000) spc(0.700) power(45.00)
これは設定されてるってことなんでしょうか?
>>717 設定しても変化がないです。
見れないですね。Failed to load default material at mesh: material:2 って出ます。
これはやっぱりXファイルがだめなんですかね?
720 :
710:2010/03/03(水) 23:11:13
>711, 713
ありがとー
DEFAULTにします
>>719 Xファイルに問題はないよ
描画部分の設定の問題だと思われ
>>718 あれだろ
テクスチャないのにテクスチャカラーを参照してるから白に飛んでるだけじゃね?
メタセコで吐き出す時にUVマッピングのチェックをはずすか
プログラム側でテクスチャの有無を確認しろ
>>719 頂点カラー(MeshVertexColors)情報が吐き出されているね
頂点カラーを描画している(バッファにD3DFVF_DIFFUSE)なら、
この場合白系で表示されているはず
まぁ、これを意図的にやっているなら気づくわけで、何かビューワで確認しているだけなら、
MeshVertexColorsのデータを削ってみるといい。或いはモデラ側で出力しないとかね。
一部宣言載せてないですけど、このコードがだめなんでしょうか?
D3DMATERIAL9 mMaterial;
D3DXMATERIAL* mD3DXMaterials = (D3DXMATERIAL*)m_pD3DXMtrlBuffer->GetBufferPointer();
for( DWORD i =0; i<m_numMesh; i++){
mMaterial = mD3DXMaterials[i].MatD3D;
pD3DDevice->SetMaterial( &mMaterial);
m_pMesh->DrawSubset( i ); }
コード中ではテクスチャには全く触れず、頂点カラーもコード中では使っていないです。
他の部分はライト、カメラ、座標変換の設定のみです。
一応、確認させていただきたいのですがXファイルで、面に指定した材質はマテリアルとして属性データに入れられるんで合ってますか?
DirectXをはじめて日が浅いので、訳のわからないことを言ってるかもしれませんが、間違っていたら指摘お願いします。
mMaterial.Ambientの設定はしてる?
こんな感じでやればたぶん大丈夫だと思うけどどうだろう?ミスってたらすまん
D3DMATERIAL9* mMaterial;
D3DXMATERIAL* mD3DXMaterials = (D3DXMATERIAL*)m_pD3DXMtrlBuffer->GetBufferPointer();
int num = D3DXLoadMeshFromXの七番目の奴
mMaterial = new D3DMATERIAL9[ num ];
for( int i = 0; i < num; i ++ ){
mMaterial[ i ] = mD3DXMaterials [ i ];
mMaterial[ i ].Ambient = mMaterial[ i ].Diffuse;
}
for( DWORD i =0; i<m_numMesh; i++){
pD3DDevice->SetMaterial( &mMaterial);
m_pMesh->DrawSubset( i );
}
>>725 ありがとうございます。
これで書き直してみましたがだめでした。
D3DMATERIAL9* mMaterial;
D3DXMATERIAL* mD3DXMaterials = (D3DXMATERIAL*)m_pD3DXMtrlBuffer->GetBufferPointer();
DWORD num = m_numMesh;
mMaterial = new D3DMATERIAL9[ num ];
for( DWORD i = 0; i < num; i++ ){
mMaterial[ i ] = mD3DXMaterials[ i ].MatD3D;
mMaterial[ i ].Ambient = mMaterial[ i ].Diffuse; }
for( DWORD i = 0; i < m_numMesh; i++ ){
D3DMATERIAL9 mMat = mMaterial[i];
pD3DDevice->SetMaterial( &mMat );
m_pMesh->DrawSubset( i ); }
http://uploadr.net/file/624bba1f83 ↑勉強している本のサンプルなんですが、これは色もちゃんと描画できます。
いや、だからメタセコのファイル出力見直せって
メタセコで出力したファイルの内容を見直してみろって言ってるんでしょ?
自作のシェーダーのビューワで見たら普通に表示できたけど
サンプルのチュートリアルのMeshにライトの設定を書き加えた奴では見れなかったよ
試しにメタセコで適当なオブジェクトを
>>712の設定で書き出したらやっぱりだめぽ
>>722にあるようにUVのチェックはずしたら正常描画された
もう固定機能なんて触らなくなって久しいから理由は分からんけど
UV消して動くならDECL?がちがうんでねーの?
固定触らないと忘れるな
F!V!F!
ああDeclは固定じゃなくても使うかw
もはやDirect3D9を忘れかけてるな
>>733 当分はXPのサポートが捨てられない商用ゲーム書きからすると、羨ましい限りだな。
そいや、VistaでもDx11が使えるようになってるんだったっけ?
>>727 >>730 UVマッピングをはずしたら描画されました!ありがとうございます。
ただ、色がメタセコのときよりだいぶ暗いんですが、これはコードの方でライトの設定をいじればいいんでしょうか。
今、ライトはディレクショナルでDiffuseが全て1.0f、ベクトルがYのみ1.0fで、他はいじってません。
Yのみ1.0fってそら真下から光当ててたら暗くみえるがな
SkinnedMeshサンプルのHLSLを見ると、頂点だけでなく、法線にもアニメーションの変換行列を掛けています。
この行列は平行移動も含んでいますが、法線は正しく変換され、ライティングもうまくいっています。
平行移動が反映されていないということは、w成分が0ということだと思いますが、
これは、float3型に行列をかける際に、ベクトル側のw成分を0として計算しているという解釈でよいのでしょうか?
ホストプログラム側では、こういった変換はwをどう扱うかで異なるAPIが用意されていますが、
HLSLでは単にmul関数だけなので、注意が必要だと感じたので、質問させていただきました。
よろしくお願いしますm(_ _)m
>この行列は平行移動も含んでいますが、法線は正しく変換され、ライティングもうまくいっています。
うまくいかないのが普通なの?
ベクトルをローカル座標に移したりワールド座標に移したりすることを考えたら
何が疑問なのかさっぱりわかんねーけどどうよ?
拡大縮小入るとおかしくなるかもしれないけど
739 :
737:2010/03/04(木) 21:21:21
>>738 3次元ベクトルV(x,y,z)に4x4の平行移動行列をかけるとします。
V(x,y,z)を頂点のような「位置ベクトル」と見なした場合は、
平行移動分だけ移動すればよいです。
しかし、同じV(x,y,z)でも、これを法線のような「向きを表すベクトル」と見なした場合、
平行移動してもV(x,y,z)は変わらないようにしないといけません。
DirectXAPIでは、これらを区別するため、同じ3次元ベクトル×行列でも
平行移動が反映される変換
・D3DXVec3Transform
・D3DXVec3TransformCoord
平行移動が反映されない変換
・D3DXVec3TransformNormal(w=0として計算)
が用意されています。
HLSLでは、何気なしに頂点と法線に変換行列をmulで同じようにかけていましたが、
よく考えると、上記のように異なった掛け方をしないといけないのではと気付きました。
これがうまくいく理屈として、法線がfloat3型であるということは、4x4行列との掛け合わせの際、
w成分を0として計算してくるということが考えられると思うのですが、その確認をしたかったんです。
もちろん、拡大縮小などが入ってきた場合は、逆転置行列が必要になってくるので、話は違ってきますが・・・
SkinnedMeshサンプルは知らんが
float3にfloat4x4を掛けると言ってるが、本当か?
float3x3にキャストした行列を掛けているんじゃないの?
これならスジが通るだろ
741 :
737:2010/03/04(木) 21:46:12
>>740 SkinnedMeshでは変換行列がfloat4x3、自作のシェーダでもfloat4x4で、
いずれも法線はfloat3で、明示的なキャスト記述等なく、mulでかけています。
もしかすると、暗黙的に、おっしゃるようなキャストが行われていると解釈することもできそうですね・・・
>>741 確かにコンパイル通るねえ
静的型付け言語って、こういうのをはじく為に
あると思うんだがねえ
ザルだねー
はいはい
>>707 自分の環境ではフェードインでのノイズは発生しなかったよ
フェードインのコードは、
for(double i=0; i<=1; i+=0.001){
source_voice->SetVolume(i);
Sleep(1);
}
環境は、
VC++ 2008 DXSDK Feb,2010
XAudio2関係は、CreateSourceVoiceにDEFAULT_FREQ_RATIOを指定したぐらい
>>744 おっ! 情報サンクス。
早速明日調べてみます。
ところで、SourceVoiceに突っ込んでいる音声バッファは1ブロック何ミリ秒、それを何個与えていますか?
>>745 あ〜、バッファは全データをメモリに格納して1つとして、分割はしてないよ
ちょっとマルチバッファリングのときでやってみる
>>738 さすがに、法線ベクトルと位置ベクトルの違いも知らない人が
737に噛み付くのはどうかと思う。
>>737 コンパイル結果を見ると、法線の方はm3x3になっていた。
ドキュメントのmulのとこにはdimensionは等しくないといけないように書いてあるけど、
行列が大きい分には余分な部分が無視されるだけっぽいね。
D3DXって2軍が作ってる感が凄い
749 :
737:2010/03/04(木) 22:52:14
>>742 >>747 わざわざ確認までしていただいて恐縮です。
ありがとうございます。
>コンパイル結果を見ると、法線の方はm3x3になっていた。
おお、確認できるんですね。
>行列が大きい分には余分な部分が無視されるだけっぽいね。
これが結論ですね。
すっきりしました。
ありがとうございましたm(_ _)m
750 :
735:2010/03/04(木) 23:22:09
>>736 すいません、1.0fではなく-1.0fでした。
そろそろお世話になりすぎなので、後は自分で試行錯誤してみます。ありがとうございました。
今更ですが、DirectX7の日本語版ヘルプを入手できる場所ってどこかあるでしょうか
752 :
744:2010/03/05(金) 00:06:41
>>752 ……なんかこのコードの書き方変なような気がするんだけど、気のせい?
XAudio2ってイベントハンドラを定義したインターフェイスを継承したオブジェクトを作って
そいつでストリームの継続処理をやらせるのが常道だと思ってたんだけど。
このコードの書き方だとDirectSoundの書き方と大差なくてXAudio2の恩恵があまりないんじゃない?
754 :
744:2010/03/05(金) 00:15:36
ごめん
>>752は別スレッドで動作させてないな
でもそのプログラムでノイズ無しでいけたから参考にどうぞ
>>753 そうですか〜、C++のクラスについて本格的に触れたのも最近で
waveOutからXAudio2に急に切り替えたもので何分使い方がよく分かっていません・・。
もっと勉強してきます!
>>755 8ビットサウンドなんて今時使わないし、
比較的低周波の単音ではノイズのテストにならないような気もするけど、
自分の書いてるコードが間違ってるかもしれないから
明日このコードと比較してみることにします。
>>752 横槍だけども。何かひらめいたときの効果音みたくて面白かった。
>>739 >3次元ベクトルV(x,y,z)に4x4の平行移動行列をかけるとします。
>V(x,y,z)を頂点のような「位置ベクトル」と見なした場合は、
>平行移動分だけ移動すればよいです。
なにいってるのかわからない
位置ベクトルだって回転すれば変わると思うんだけど・・・
平行移動分だけってどういう意味?
解説で平行移動行列にわざわざ限定する意味がわからない
単純にモデル座標系上のベクトルAにワールド変換行列をかけても
ベクトルAがワールド座標上でのベクトルAになるだけでかわんねーと思うんだけどマジで
やってみそ
>>739は同次座標行列による変換というテクニックの
説明をしている。
3次元ベクトルは、向きと大きさを表すものと
位置を表すもの、2つの量を表現出来る。
後者の位置を表すベクトルは、
〜第一部完〜
つまり、法線ベクトルを(0,0,0)-(nx,ny,nz)のベクトルとして計算してないからワールドのxyzを捨てたいのか
っていっても俺のそんな変換してねぇな
ライトベクトルのほうをローカルにもってきてるシェーダが多いわ
762 :
737:2010/03/05(金) 06:58:13
>>758 例では、着目してほしい平行移動だけを含んだ行列をかけていたので、
「平行移動分だけ」という書き方をしました。
もちろん、回転が入っていたら回転もします。
回転の成分は、位置ベクトル、法線ベクトルの両方に普通に作用させればよいだけですけどね。
>>759 いえ、そのベクトルAというのをどう見なすかで、ワールド変換行列をかけた結果と
望む結果とが異なることがあります。(
>>739)
このベクトル×行列も、行列の内容やそれぞれの次元をどう揃えてかけるかで違ってくるので、
ややこしいことになっていると思います。
HLSLはこのあたりを曖昧にした記述ができ、概念的な記述ができて高度かな、とも思いますが、
>>742さんも漏らしているように、厳密でないといえば厳密でないですね・・・
>>761 ライトベクトルをローカルや接空間に持ってこれば計算量を減らせるので、そうしていますが、
アニメーションを含んだ行列(ボーン合成行列っていうのかな?)はそのテクニックとは関係なく
法線に適用しないといけないです。
>>734 なってる
ついでに知ってると思うがDirect3D9レベルのハードでもDirect3D11で書ける
XPさえ切り捨てられれば移行できるぞ
使いやすすぎてもう9には戻れんわ
何がどう使いやすくなったのか書かないあたりが、
実は使っていないのがよく分かる。
11にすれば全てがシェーダに統一されていて、非常に一元的に書けるというのはよくわかる
だがXPを切り捨てられるほどなぁ・・・
もっとわかりやすいライブラリ作って欲しいなあ。
つ 自作ミドルウエア。
これだからしろうとは
一方、玄人は・・・。
MSがせこい真似しないでXP版11出せばいいだけ。
頂点シェーダーとピクセルシェーダーの切り分けっていうんですか、
どこまでの処理を頂点シェーダーでやれば良いのでしょうか?
>>772 2つのシェーダーはHLSL中でよく似た書き方をするから最初は戸惑うが、
動く粒度が全く違うので同じ処理が出来ないことが実際に書けば分かるよ。
とりあえずシェーダー処理関数のin/outに注目してご覧。
>>773 ありがとうございます。
Phoneシェーダー書くとしてハーフベクトルを求めるのにも結果は違くなるんですか?
773じゃないけど
頂点シェーダからピクセルシェーダにデータが渡される時に
ラスタライザで頂点間の線形補完がされるのがポイント
フォンシェーダの場合
高ポリゴン時なら頂点間のハーフベクトルの差が少ないのでそれほど気にならないが
低ポリゴン時に想定外の補完がされてしまってボッコボコになってしまうはず
そういうときに頂点単位ではなくピクセル単位でハーフベクトルを計算することになるのだが
当然塗りの面積が大きくなればなるほど負荷が高くなる
その辺のバランス取りは状況に応じてチューニングしていくしかない
>>775 ありがとうございます。なるほど、、、すっきりしました
俺は、ハーフベクトルは
VSとPSでは差は無いと考えて
VSで計算するようにしているが。
他にシャドウマップ用のZ値なんかもそうだな。
プログラマブルシェーダーの時代になったが、数学的な理解がある奴って少ないな…
いくら、ピクセル単位でハーフベクトルを計算したところで
ハーフベクトルを算出するのに必要な、法線、視線、ライトベクトルの内
法線は頂点間の線形補間されたものしかないわけじゃんw
なら頂点でハーフベクトルを求めて、それをピクセルに渡しても変わりない
大方、ピクセル側でベクトルの正規化をしてないのを
頂点側で計算したベクトルは駄目だ、とか思ってるんじゃないの?
線形補間されるって事は、ベクトルの大きさが1じゃなくなるって理解出来る?
そんな自慢げに熱くなって語ることでもなかろうに
>>778 58頂点くらいの球と1000頂点くらいの球で
頂点でハーフベクトルを計算したフォンシェーディングしてみれば分かる
>>778 普通に考えて
こっちを向いてる頂点と反対側を向いてる頂点が隣り合ってる時に
ハーフベクトルを補完したら
角だけが光っちゃうのは自明ジャン
お前こそ頭使え
>>778 必要に応じてピクセルシェーダでベクトルを正規化しなおすのは当然だろ。
どの段階でラスタライザの線形補間を挟むかによって誤差の出方は変わってくるんだから、
「変わりない」なんていう乱暴な議論は感心できないな。
>>780 >>781 お前等って馬鹿だなw
>58頂点くらいの球と1000頂点くらいの球で
>頂点でハーフベクトルを計算したフォンシェーディングしてみれば分かる
で、それらを
ピクセルでフォンシェーディングした時に
58頂点のピクセル計算のと1000頂点のピクセル計算した奴を比べたら変わるか?
そもそも球なら、頂点間でハーフベクトルを補間しても変わらんだろw
>こっちを向いてる頂点と反対側を向いてる頂点が隣り合ってる時に
>ハーフベクトルを補完したら
おいおい、この場合は
どうやってピクセルに法線と視線とライトのベクトルを渡すんだ?
ピクセル単位で処理する場合でも破綻する例まで出して必死だなw
>>782 >必要に応じてピクセルシェーダでベクトルを正規化しなおすのは当然だろ。
当然なんだけど、それやってないような発言ばっかりだったから
>どの段階でラスタライザの線形補間を挟むかによって誤差の出方は変わってくるんだから、
>「変わりない」なんていう乱暴な議論は感心できないな。
フォンシェーディングのハーフベクトルについて、と限定されていると思っていたが?
普通に考えて理解出来ないのかな
頂点間でハーフベクトルが補間された値
頂点間で法線、視線、ライトベクトルが補間された値で、ハーフベクトルを算出
後者の方が精度が高いとか言っちゃう奴ってw
うわっ
>>783が実際に試したことがないことが丸分かりだw
>>784 出た出たwww
やっぱり勘違いしてるじゃんw
ピクセル単位の法線を、法線マップから拾ってる前提じゃん
フォンシェーディングの話をする時に、法線マップ使うなんて前提する奴はイねーw
>>786 お前が勘違いしてるんだよ
頂点数が少ない事による差と、頂点計算とピクセル計算の差をごっちゃにしてるだけwww
試して動かしても、大本を勘違いしてるんじゃ話になんねーw
>>785 どっちが精度が高いか低いかという話は置いておいて、
前者と後者はまったく同じ結果にはならないだろ?
>>783 > 58頂点のピクセル計算のと1000頂点のピクセル計算した奴を比べたら変わるか?
明らかに変わる
ようは、その58頂点くらいの球で
頂点でのハーフベクトルでフォンシェーディングするのと
同じ58頂点くらいの球で
ピクセルでハーフベクトルを求めてフォンシェーディングするのと
変わらねーだろってこった
なんで1000頂点と比べて綺麗とか言い出すんだ?w
>>791 >変わらねーだろってこった
少し変わるよ
>>789 あんただけだな、まともなのは
確かに同値にはならない
しかし、数学的な理解と、シェーダーの原理と、処理負荷を考えれば
フォンモデルのハーフベクトルを頂点で求めるのも、ピクセルで求めるのも大して変わらない
なんで、ピクセルで求めると良いなんて言い出す奴がいるのか?w
って事だ
>>793 ここに来て「大して」という修飾語が入って安心した。
まあそう熱くなるなよ。
specularで特に死ぬんじゃない?
よほどのローポリじゃない限り、ハーフベクトルの正規化さえちゃんと行えば
>>793の言うとおり「大して変わらない」と思うよ。
俺も大して変わらないに一票
なんか別の要素を拾って勘違いしてると思う
誰かがレンダリング画像上げてくれたら解決するんじゃね?
どうせそのうちノーマルマップを張りたくなるんだし、ピクセルシェーダーでやっておけばいい
勝手に画像を上げる事にしてしまっている、残念な人がいるなw
プログラマだと思ってたんだが…
これだけ説明して、勘違いも突っ込んでやってるのに
(口と態度が悪いのは認めるw)
画像を求める時点で、企画レベル認定(デザイナより劣る)
例えるなら、バグの原因を説明して、バグじゃないと勘違いしてる所も説明してやってるのに
デバッガでステップ実行をして実際の挙動と数値を見せろ、
と言いだす、プログラマに等しい(俺的にはプログラマじゃないと思うがw)
803 :
デフォルトの名無しさん:2010/03/06(土) 06:14:27
DirextX9で回転縮小のある2Dゲームを作ろうと思っていますが
座標変換済みの頂点でいいのでしょうか?
行列計算をして3Dで作ればいいのですか?
これは分かりやすい
802は口が悪いだけじゃなくて口だけってことが証明されちゃったってことでいいですか?
>>804 >>805 完全に間違ってるだろw
フォンシェーディングする為に使用するハーフベクトルを、
頂点で作成してピクセルに渡して使用するのと
ピクセルで作成して使用するかの違いの話なのに
804は、完全にフォンとランバートを比べてるってーのw
もうね、全然シェーダー理解してないのが分った
2chだから色々なレベルがいるのは仕方無いが…
804は、間違ってると言え、試しているし口調も断定的では無いし、攻撃する気は起きない
806を読めば、自分の間違いを理解出来るんじゃないかな?
ただ805なんかは、理解すらしてないのが丸分りw
あの映像の最初の絵を見た瞬間に、ランバートだろ
って分らないレベルなのに、口を挟んでるじてんで頓珍漢を通り越して、滑稽すぎるw
よかったな2chの出来事で、って感じ
リアルな会社とかなら恥ずかしすぎるw
808 :
804:2010/03/06(土) 07:35:12
あれ、俺に当たられても困るんだけど…
じゃあ、シェーダの一部抜粋
さっき適当にざっとやったやつだから汚いけど
VS計算の方の頂点シェーダ
float amb = 0.2f ; // 環境光の強さ
float3 N = normalize(mul(input.Normal, World));
float3 L = normalize(Light);
float3 eye = normalize(Camera - input.Pos.xyz);
float3 H = normalize(L+eye); // ハーフベクトル
output.Diff = Diffuse * max(amb, dot(N, L)) // 通常ライト
+ pow(max(0,dot(N, H)), 20); // フォン
/***********************************************************/
PS計算の頂点シェーダ
float amb = 0.2f ; // 環境光の強さ
float3 N = normalize(mul(input.Normal, World));
float3 L = normalize(Light);
output.Diff = Diffuse * max(amb, dot(N, L)) ;// 通常ライト
output.N = N.xyz ;
output.Eye = Camera - input.Pos.xyz ;
PS計算のピクセルシェーダ
float3 L = normalize(Light); // ローカル座標系でのライト
float3 H = normalize(L+normalize(inEye)); // ハーフベクトル
float3 N = normalize(inN) ;
outDiff = inDiff + pow(max(0,dot(N, H)), 20) ;
どこがランバート?
>>804 >>808 ん〜デバッグは自分でしてくれw
結果が、明らかにランバート、俺の環境だとハーフベクトルを変えるだけじゃ
違いなんて分らないレベル
こっちもシェーダ貼ってあげるよ、GLのだけど簡単に書いた奴だから分り易いハズ
varying vec3 viewVec;
varying vec3 lightVec;
varying vec3 normalVec;
varying vec3 halfVec;
void main(void)
{
/* フォン用の各情報 */
viewVec = -normalize( vec3(gl_ModelViewMatrix * gl_Vertex) );
lightVec = normalize( gl_LightSource[0].position.xyz );
normalVec = normalize( gl_NormalMatrix * gl_Normal );
/* ハーフベクトル */
halfVec = normalize( lightVec - viewVec );
gl_Position = ftransform();
}
varying vec3 viewVec;
varying vec3 lightVec;
varying vec3 normalVec;
varying vec3 halfVec;
void main (void)
{
/* 法線とライトの正規化 */
vec3 fnormal = normalize( normalVec );
vec3 flight = normalize( lightVec );
/* デフィーズ用の内積 */
float lightPow = max( dot(flight, fnormal), 0.0 );
/* デフィーズ */
vec4 color = lightPow * gl_FrontLightProduct[0].diffuse;
/* アンビエント */
color += gl_FrontLightProduct[0].ambient;
/* ハーフベクトル(スペキュラ用) */
/* ピクセルで求めるか、頂点からの値を使用するか */
#if 1
vec3 fview = normalize( viewVec );
vec3 halfVec = normalize( flight - fview );
#else
vec3 halfVec = normalize(halfVec);
#endif
float specular = pow( max( dot(fnormal, halfVec), 0.0 ), gl_FrontMaterial.shininess );
/* スペキュラ */
color += gl_FrontLightProduct[0].specular * specular;
gl_FragColor = color;
}
>>804 疑うわけじゃないが、一番最初の”VS計算100ポリ”は、明らかにおかしい
理由は、ハイライト部分が、他の場合は回ってないのに
球と一緒に回ってる挙句、点滅してるじゃんw
作為的とまでは言わないがw
明らかに間違ってる
だからそれが上で散々言われてる低ポリ時の弊害だろ
ハイライト部分が回ってるんじゃなくて
視線側を向いてる頂点付近だけ急激に光ってるから回ってるように見えるだけ
ランバートじゃなくてグローシェーディングなんじゃね
>>808のVSは版はカラーまで計算しちゃってるから。
今比較したいのはVSでハーフベクトルまでを計算してPSに渡すのと、PSで計算するかなのかと
VSで色まで計算するのとはまた話が違う
俺には809の方がいわゆるフォンじゃない臭くみえるんだが
>>812 >低ポリ時の弊害
>視線側を向いてる頂点付近だけ急激に光ってる
全然、理屈が分ってないじゃんw
だから俺の環境だと、もう球じゃなくて8角形にしか見えない低ポリにしても
ポリゴン内のシェーディングは、綺麗なままっだつーのw
しかも、ハイライト部分は動きもしねーしwww
>>814 だからさ
発言した瞬間に分ってないのがバレるレベルの奴は黙ってればw
>フォンじゃない臭くみえる
いわえるフォンとは、ピクセル側でdot3ライティングをする事
違うと言うなら、ちゃんと理由を言って見ろよwww
初心者スレで暴れるopenGL使い。なんでそんなにイラついてるの?景気わるいの?
ところでGLとDirectXでラスタライズの方式が同じって保障あんの?
面白いからもっとやれw
すげえところまで巻き戻すんだな
週末になった途端に臭いのが集まってきたな
つかほとんど同一人物の自演に見えてしょうがない
すべて自演だろ。
つうか初心者スレの話題じゃねーだろ。
余所にいけよ、臭いから。
それほど凄い話題じゃないし、ディベート的で初心者にもためになるだろ
これじゃ議論に負けそうな方が、感情論に走っているだけに見えるぞ
すみません。ポリゴンの上にキャラを立たせているのですが、
モデル制作ソフト上で、地形を作る時、
ポリゴンを1枚ずつ複製〜反転で繋げると綺麗に歩けるのですが、
ポリゴンを一括して生成(グリッド生成)すると平面ですら異常な事になったり、何もないのに高さが急に飛んだりします。
○×の
ttp://marupeke296.com/COL_Basic_No2_ShortTec.html の「斜面に立つには?」を元にコードを書いたのですが、
それだけでは上手く行かず、「y軸の一番低い頂点を基準に計算する」としたら上手く行きました。
これは私が計算方法に、何か勘違いをしているのでしょうか?
もしくは地形モデルの頂点の並び方が問題なのでしょうか?
推測で構いませんのでご指摘頂けると幸いです。
ここまでやられると初心者的にはどっちが正しいんだか判別がつかない…
ググったりWikiを読んだ限り「ピクセル単位で計算する」のがセオリーっぽい印象を受けたが
とりあえずそういう理解でいいのかな
>>821-823 2ch技術系スレの膿が出ましたね
アンタらがここをクソスレに下げてるんだよ
自覚はあるか?
もう蒸し返すなよ
829 :
デフォルトの名無しさん:2010/03/06(土) 14:42:03
>>803 2Dポリゴンでやるかスプライトでやればいいよ
俺も比較してみたよ
ペイントで切り貼りして大変だった
http://a-draw.com/contents/uploader2/src/up18148.bmp まあ結果変わんないね
# VSの場合
h = normalize( (l0+v0) + a * ( (l1+v1) - (l0+v0) ) )
# PSの場合
l = l0 + a * ( l1 - l0 )
v = v0 + a * ( v1 - v0 )
h = normalize( l + v )
※l ライトベクトル、v 視線ベクトル、h ハーフベクトル
これはどちらも同じ式になるので、結果が同じであることに同意出来る
h = normalize( l0 + v0 + a * ( l1 + v1 - l0 - v0 ) )
違いが出るとすれば、PSでlとvを正規化した場合だが・・
これはどっちに転ぶのかねえ
>>829 >2Dポリゴンでやるかスプライトでやればいいよ
ポリゴンには2Dもへったくれもないし、
スプライトにポリゴンを利用するのなら両者に違いがないということになる。
出直してこい。
DirectShowでテクスチャに動画を書き込ませようと色々人に聞いたり調べまわったりして
断片的な情報が収集できただけで困ってたら、
SDKのサンプルソースが一番わかりやすかったよ……orz
ビルドしただけですぐ動いたし。
サンプルも触らないうちから人に聞くなよ
その通りですね。ごめんなさい。
835 :
デフォルトの名無しさん:2010/03/06(土) 16:57:23
>>835 「座標変換済みの頂点にして使っている」のか「座標変換済みの頂点を使っている」のどっち?
837 :
デフォルトの名無しさん:2010/03/06(土) 17:25:13
>>836 「座標変換済みの頂点を使っている」のですが
3Dで行列計算をした「座標変換済みの頂点にして使っている」の方が楽に作れる(回転・拡縮)かもしれないと思って聞きました
>>353 どうせ計算量なんてたかがしれているんだから、好きな方法でかまわない。
>>837 回転と拡縮は基本的にどちらも同じような処理が必要。
トランスフォーム済み頂点であればビュー行列を意識する必要が無いので
コードが若干少なくなるしデバッグもやりやすいよ。
>>837 そもそも変換済みだろうとなかろうと、行列で計算は出来るし、
結局はきちんと計算そのものを理解しているかどうか。
変換済みでも中心を切り替える成分を混ぜておけば、好きなように再変換できる。
ぶっちゃけ計算そのものを理解していない奴は、
やり方が分かっていないんだから何をやろうと不便なのは当たり前。
841 :
デフォルトの名無しさん:2010/03/06(土) 17:44:38
とりあえずこのまま座標変換済み頂点で作ろうと思います
たいがいの場合利点がどうこう言う奴は、
根本的に自分で調べるのが面倒で、
現在のやり方に乗り換えなくていい理由を探すために質問する。
大した手間じゃないんだから両方やってみればいいだけなのに、
言い訳を探して永遠に成長しない人間なんだよね。
843 :
デフォルトの名無しさん:2010/03/06(土) 18:15:58
>>842 >大した手間じゃない
そんなに簡単に出来たら質問しませんよ
>>843 いや、こんなもんもできないんじゃゲームなんて作るの面倒臭くて面倒臭くてたまんないだろ
普通は最初にDirect3Dの実験する過程で両方やるだろう。
チュートリアルすらやってないのか?
どれだけ怠け者なんだよ。
日本人にヘルプを読まない文化を植えつけたのは実はMS。
847 :
デフォルトの名無しさん:2010/03/06(土) 18:50:17
>>845 チュートリアルはやりましたよ
でないと座標変換済み頂点と未変換かなんて思いつかないでしょ?
でも特性を理解して使いこなすにはあれだけでは不十分だと思いますよ
まーた説教レスとゆとり返しレスで埋まるのかよ。荒らしじゃなきゃ絶望すぐる。
>>825をスルーするしたのは見事だと思ってた矢先にこれだよ!
>>825 異常値が出るときの、面法線VとP0、cxcyは書けるかい?
なんというか
>>843の内容が非常に残念。
初心者でもこの程度の処理を書くのが簡単ではないのであればプログラミングをしなければいいのに。
851 :
チラ裏:2010/03/06(土) 19:40:15
ああああああああああああああああぁぁぁぁ
座標変換難しいようようょぅ
あたり判定とかレイとかデバッグしにくいようようょぅ
>>846 それはわかるw
ヘルプが何言ってんだかさっぱりだったなww
イルカとかなw
つうか初心者スレでこの対応はねーわな。
上から目線でしか喋らない奴はもうこのスレから消えればいいんじゃない?
そうやって初心者排除して何したいのだろうね。
>>853 だが、どこで彼等を修正するんだ?
俺はいまぐらいで調度いいと思うんだが?
会社に入って同じようなことしたら
同僚は問答無用で潰しにくる
ゲーPGに限らず、上司は自分では気軽に聞くくせに部下や他の人間にはそれを許さない
人間は権力という力に魅了されてしまうからね・・・
857 :
825:2010/03/06(土) 20:50:31
>>848 ご助言ありがとうございます、
面法線V [x]0.000000 [y]-625.0000 [z]0.000000
P0 [x]-174.9999 [y]0.000000 [z]-99.99999
[cx]111.756142 [cy(モデルのz座標)]102.775612
これがあるべき高さの10倍を超える高さになってしまった時の値なのですが、
正常に高さを計算できるデコボコのメッシュでも、面法線VとP0の座標がどのポリゴンに乗っても同じに・・・
何かもっと別のミスをやらかしてるのかも・・・何故・・orz
>>830はうそ臭いな
1ドットの狂いも無く一緒になるわけないがな
シェーダーの数式を理解するのに必要なのは数学の知識?物理学?
行列やベクトルの計算方法は数学だろうけど、
「なぜ」その計算を行うのか、その計算が「なに」を意味しているか、を理解するには物理の素養が必要だろうね。
ところで同僚同士で潰し合う会社ってどこのこと?
>>857 言わない俺が悪い時代かも知れんが、答えも書きんさいw
エスパーすると、yとz取り違えているんじゃね?下の式見て、コードの変数全て確認してみそ
高さ = P0[y] + (-Vx * ( cx - P0[x] ) - Vz * ( cz - P0[z] ) ) / Vy
>>858 いやちゃんと式も書いてるでしょ
同じになるんだよ
16bitカラーなんで、細かい違いが吸収されてるかもしれんが
頂点単位のスペキュラの問題点は、頂点の輝度を補間して各ピクセルの輝度を計算しているため、メッシュが粗い場合にはスペキュラに不自然なジャギーが出てしまうことです
昔は今ほど3Dの技術も多彩じゃなかったし
Bio100%とかBBXがちゃんと機能してたからなぁ・・・。
>>830 前者のVS版(頂点シェーダ側でハーフベクトルを計算するケース)では、
H = L + V を正規化せずにそのままラスタライザの線形補間処理に渡してるんだね。
これなら確かにPS版と数式的に完全に一致する。
もしVS版で H = normalize(L + V) としてからラスタライザに渡したり、
あるいは
>>830で言及しているようにPS版で H = normzlize(normalize(L) + normalize(V))
というようにLとVを個別に正規化してからハーフベクトルを計算したりすれば、
両者の数式が一致しなくなるから、ローポリなら目に見える程度のわずかな違いは出てくると思う。
XInputとDirectInputってXInputの使用が推奨されてるの?
ゲーム的に
XInputってXbox 360パッドしか使えないらしいから
両方使うのが推奨じゃないかと思うけど、どうなんだろうね
870 :
825:2010/03/07(日) 10:44:36
>>862 ご助言ありがとうございます。式を確認させて頂いたのですが大丈夫なようで、
手前にご指摘頂いた面法線が下を向いている事から
どうやらエディタのバグで、背面非表示モードで作り安心していたものの
特定の操作をしたポリゴンは、出力時に法線方向が反転して書き出されている様でした orz
開発環境で背面カリングを有効にしてなかった自分も自分・・orz
お騒がせして申し訳ありません、解決に至らせて頂きありがとうございましたっ;
>>869 いや最近はそうでもない。
各メーカーがXInput対応のパッドを順次リリースしてる。
ID3DX10Fontについて質問させて下さい。
現在DirectX10を勉強中で、文字表示をしたいと考えています。
環境はWin7 x64・VisualStudio2008Pro・SDK February 2010です。
msdnの基本チュートリアルを一通り作ってみた状態で、文字を表示したいと思いID3DX10Fontを使ってみたのですが上手くいきません。
チュートリアル5(中心に大きい箱があり、その周りを小さい箱が回っている)は正しく描画できているのですが、そこに文字表示をしようとすると箱の前後関係が崩れ、小さい箱が常に前面に表示されてしまいます。
その際、文字自体は正しく表示されています。
付け加えたコードは
・初期化時
D3DX10CreateFont(g_pd3dDevice, 24, 0, FW_NORMAL, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Aria", &g_pFont);
・描画時(箱を描画する記述の前)
UINT stride = sizeof( SimpleVertex );
UINT offset = 0;
g_pd3dDevice->IASetInputLayout( g_pVertexLayout );
g_pd3dDevice->IASetVertexBuffers( 0, 1, &g_pVertexBuffer, &stride, &offset );
g_pd3dDevice->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 );
g_pd3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
・描画時(箱を描画する記述の後)
RECT rc = {10, 10, 0, 0};
g_pFont->DrawText(NULL, L"Hello World!", -1, &rc, DT_LEFT | DT_NOCLIP, D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f));
です。
また、スプライトを自分で作成しDrawTextに渡した場合、DXUTでCDXUTTextHelper使った場合も同様の結果でした。
前後関係が崩れるのはDrawText()やPreloadText()が実行された後なので、文字生成したときにデプス関係の設定が変わってしまうのかと予測を立てていますが、解決策が分かりません。
すべき設定や間違っていそうなところ、サンプルコード等ありましたら教えて下さい。よろしくお願いします。
>>872 PIXで追ってみるっと分かるが
内部で勝手にOMSetDepthStencilState、OMSetDepthStencilStateが呼ばれてる
箱を書いてるシェーダーでステートをきちんと指定してやるか
うろ覚えだがSpriteのBegin辺りでEndでステートを復元するフラグがあったような気がする
>>864 このタイミングで、お前見たいな知ったかが一番性質が悪い
今問題にしてるのは、スペキュラ計算はピクセル毎にするが、その為の係数を
頂点毎に求めてピクセルに渡すか、ピクセル毎に求めるかって話しなんだよ
ポリゴンが荒くとも結果は、ほとんど同じなんだよ
お前の話は、頂点でスペキュラ値を求めて、それをピクセル側で使う場合の話なの
この問題、始めか理解出来てない奴ばっかりだなw
>>873 DepthStencilStateを設定することで表示することができるようになりました。
復元フラグは試していたのですが、どちらにせよ1回はステートをセットしてやらないと意味がなかったですね。
実はPIXがどういったものか知らず、デバッグの仕方がよく分からないという状況だったのですごく助かりました。
ありがとうございました。
Direct3Dとはちょっと離れるのですが、FBXファイルを読み込み時に
トライアングルに変換してくれるメソッドってないのでしょうか?
2009Augで開発していたプロジェクトを2010Febに差し替えたらコンパイル出来なくなってしまいました。
リンカの設定もFebに変えてあります。
他に何が原因でしょうか?
ちなみにコンパイルしようとしたプログラムはDrawTextでHello worldを表示するだけのもの(一般的なサンプルと同じく余計なコードはありません)です。
コンパイルができないならコンパイルエラーの内容くらい書きましょう。
879 :
デフォルトの名無しさん:2010/03/07(日) 18:05:22
エスパーするなら、"Hello World"を_T("Hello World")に変えれば良いかと
じゃあオレもエスパーしてみる
リビルドしてないとか
メッシュクラスなるものを作ったんですけど、これが描画を担当するべきですか?
ちなみにメッシュクラスは頂点バッファとマテリアル情報を持っています。
>>884 同じものを同時に10個表示しようとした時に
10個メッシュクラスを作らないといけないような作りになってなければいいんじゃない?
特にそれぞれが違うアニメーションしてたり
違うシェーダーでレンダリングしたりする場合に特に問題がないかどうか
KFbxGeometryConverter::TriangulateInPlace
メッシュクラスに豪華機能の描画関数が条件分岐の塊になって、わけ分からなくなって破綻した経験がある。
DrawSubset程度の基礎機能しか持たないほうがいいよ。マテリアルをどう解釈するかは外部に出した。
メッシュと描画クラスは分けた方がいい。
で、必要に応じて描画クラスを使い分けるようにすると、一つ一つの描画クラスは単純な実装にできる。
今ちょうど自分もその部分で悩んでる。
モデル(メッシュ)とシェーダは分けて、それぞれを他と共有、組み合わせられるようにして、
おおよそよい感じになってるんだけど、
シェーダが必要とするシェーダ変数を持ってるのが、シェーダ自身、モデル、モデルに位置や向きを
あたえるキャラクタ等に分散していて、しかもそれらをSetするタイミングが違う
(例えば、アニメーションモデルなら、ボーン毎にDrawSubsetするタイミングで合成行列を
シェーダ変数にセットする)ので、どこか一つのクラスで一元的にシェーダ変数を管理できない・・・
あまり結合度を上げたくないが、現状ではうまく組み合わせたときに正しく動くことを期待した組み方
(例えば、モデル側で勝手にシェーダ変数をpEff->SetXXXでセットしようとするが、
それがシェーダにあるか保障されていない)になってしまっている。
何とか動いてるけど、もっとキレイな設計ないかな・・・
えー、俺の所 Mesh.render() が全部やってるお。
もっとも単純な描画はメンバー変数の Material.render() に丸投げだが、
Mesh.animate()がもの凄いぐちゃぐちゃと書き換えるのが普通に死ねる。
>>887 ありがとうございます。
メッシュにありそうな過去ログがあったので、そのあたり調べてました。
ゲームに使うシェーダーを最初から決めて作れば簡単かな
べつに3DCGソフト作るわけじゃないし
894 :
890:2010/03/08(月) 19:00:25
>>891 >>893 なるほど・・・。
やはりどこかで落とし所が必要だよね。
ちょっと拡張性にこだわりすぎてた気がするよ。
参考になった。
ありがとう。
俺はMeshクラスはただのデータの塊でしかないな
Meshのインスタンスを描画クラスのメソッドに引数にぶち込むと描画されるようにしてる
すみません
D3DXLoadMeshHierarchyFromXでのメッシュの頂点色についてなのですが、
・メッシュのファイル内には、ちゃんと頂点色のデータが存在している。
・描画時にHLSLへ頂点色を後付で送れば、その色が足されて描画される。
・何もしないとファイルに設定した頂点色が反映されず、モノクロテクスチャのまま。
こういう状態です。
読み込み部分であるはずの仮想関数のCreateMeshContainerを見ると
どうも頂点色(Diffuse)を読み込む記述が無いように見えるのですが、
やはり具体的に頂点色(Diffuse)を取得する記述が無いという事は
取得がされていないという事なのでしょうか?
何かご指摘を頂けると助かります。 よろしくお願いします。。
マテリアルカラーと頂点カラーをごっちゃにしてないか?
良くあるサンプルで見かけるのはマテリアルカラーを
Diffuseとしてシェーダーとして送ってるけど
とりあえず読み込んだメッシュの頂点フォーマットを調べて
頂点カラーがあるかどうか確認する
あれば頂点シェーダーに入力されるCOLOR0で拾えるはずだけど
>>896 進研模試の偏差値でいうと2ちゃんねるのニュース速報がおよそ45、民放地上波の報道ステーションが約40、
ニュース速報+は35程度の読者を想定しています。
開発環境:XPSP3、VisualStudio2008
稼働環境:XPSP3、DirectX 9.0c ランタイム
今ならDirectXのSDKはどれを落とせばいいんでしょうか。
February 2010
>>900 ありがとうございます、最新ので良いのですね
902 :
896:2010/03/09(火) 21:15:46
>>897 >マテリアルカラーと頂点カラーをごっちゃにしてないか?
その通りでした、orz
VertexColorはそもそも頂点の数(300弱)定義されているのにマテリアルは1個ですよね;
>とりあえず読み込んだメッシュの頂点フォーマットを調べて
LockVertexBufferして中を見たのですが、FVFのフラグ数値の意味が解らず、とりあえず中を見ると
1頂点36バイトで 頂点座標xyz 法線xyz 謎の4バイト U座標V座標 順に並んでおり、
謎の4バイトがRGBAかと思ってVertexColorの数値をいじってみたものの変化がありませんでした。
しかしCloneFVFというのが気になり、一部にしか設定してなかった頂点カラーを全ポリゴンに設定した所、
ポリゴン単位での頂点カラーが、正しく適応されて描画されるようになりました;
しかし、同じ仮想関数を通して生成した別のモデル(階層構造が無いモデル)は相変わらず頂点カラーは描画されず・・。
これは一体、何が起きているのでしょうか?;
また、処理中に頂点カラーを書き換える為にも所在を知りたいのですが、何か手はないでしょうか・・orz
>>902 固定機能ならある程度自動でやってくれたけど
シェーダーは自分で書いたようにしか動かないんだから
何が起きてるもなにもそうなるように書いてるんだろう
ソースを全部うpするか頂点シェーダ部分だけでも書いてみ?
904 :
902:2010/03/09(火) 23:01:54
Effect FileをUPしてみました。
ttp://www1.axfc.net/uploader/Sc/so/90811 マテリアルのDiffuseを送る為に変数(?)CCC_DIFを作って送ってる以外、
ほぼSDKサンプルのままです; 使いたい機能が有るものの理解がまだぜんぜんで orz
頂点カラーがちゃんと描画されるモデルが有るという事は
VertexBuffer内にデータは有るハズなんですよね・・何か勘違いしてるはず・・orz
>>904 頂点シェーダー入力情報に色情報を追加して
シェーダー内でブレンドするなりなんなりと
struct VS_INPUT
{
float4 Pos : POSITION;
float4 BlendWeights : BLENDWEIGHT;
float4 BlendIndices : BLENDINDICES;
float3 Normal : NORMAL;
float3 Tex0 : TEXCOORD0;
float4 Color : COLOR0;// これ
};
907 :
904:2010/03/10(水) 19:10:31
>>905-906 ありがとうございます。色々とテストし続けた結果、頂点カラーの確認ができ、
RGB値が0か255以外の値は全て255になって読み込まれている事が解りました。
変に微調整した色を使うとなぜか全て255,255,255へ。。
何か読み込む段階で問題が有りそうな事に・・色々ご助言ありがとうございました。
英文・・苦手ですが、いつか目を通せればと思います。HLSLも勉強しなければ。。
ありがとうございました。
0.0〜1.0じゃないのか?
シェーダープログラム内でprintデバッグみたいなことって出来ないよね
PIX使うとか、エフェクトファイルの呼び出し元から変数を与えてもらってそこに書くのも1つの手ではあるかも。
directdrowはいずれ消える予定なのでしょうか?
2Dゲームを作ろうと思うのですが、3D関係を習得して2Dを作ったほうが良いのでしょうか
>directdrow
消えるも何もそんなモノはない
drawだろw
当分消えないと思うけど、バージョンアップの見込みが低いと思う
両方覚えた方がいい
半透明処理がやりたいとか回転がやりたいとか要望に対応できないので
Direct3Dに慣れといた方がいいと思うの
デバイスロストとか面倒くさいからDX11から始めるのお勧め
10以降はメモリ使用量意識しなくていいのはすごく助かる
スワップしないように意識した方がいいのはもちろんだけど確保失敗しないところがいい
2Dか3Dかという話の中でDirect3Dのバージョンの話を始める奴は、
リアルでも会話の流れを無理矢理自分の進めたい話に持って行こうとして、
空気の読めない奴だと周りから思われているんだろうね。
別にその話はもう終わってるからいいだろ
MSDNにDX11の資料が無いのは何故ですか?
英語であるじゃん
英語ではある。しかしながら、日本語では無い。
ということでよろしいのですね?
August 2008の日本語訳が来たのがほぼ1年前
今の英語サイトがAugust 2009だからそろそろ来てもいい気がするが…
Direct2DやらDirectWriteやら項目が増えてるからまだ放置されるかもな
D3DXVECTOR3 mypos(1.0f,8.0f,-0.5f),myangle(0.0f,0.0f,0.0f),myvec(0.0f,0.0f,0.0f);
--------------------------------------------------------------------------------------------------------------------------------
if(keyState['F']&0x80) myangle.y-=D3DX_PI/72;
if(keyState['G']&0x80) myangle.y+=D3DX_PI/72;
if(keyState['T']&0x80) myvec.z=+0.15f;
if(keyState['V']&0x80) myvec.z=-0.15f;
--------------------------------------------------------------------------------------------------------------------------------
D3DXMATRIXA16 matWorld1,matWorld2,matWorld3;
D3DXMatrixRotationYawPitchRoll(&matWorld2,myangle.y,myangle.x,myangle.z);
D3DXVECTOR3 myvec2;
D3DXVec3TransformCoord(&myvec2,&myvec,&matWorld2);
mypos+=myvec2;
D3DXMatrixTranslation(&matWorld1,mypos.x,mypos.y,mypos.z);
matWorld3=matWorld2*matWorld1;
pDevice->SetTransform(D3DTS_WORLD,&matWorld3);//―*
D3DXVECTOR3 viewvecE(1.0f,8.0f,-0.5f),viewvecL(1.0f,8.0f,0.0f);
D3DXVECTOR3 viewvec;
D3DXVec3TransformCoord(&viewvec,&viewvecE,&matWorld2);
D3DXVECTOR3 vEyePt(mypos.x+viewvec.x,mypos.y+viewvec.y,mypos.z+viewvec.z);
D3DXVec3TransformCoord(&viewvec ,&viewvecL,&matWorld2);
D3DXVECTOR3 vLookatPt(mypos.x+viewvec.x,mypos.y+viewvec.y , mypos.z+viewvec.z);
D3DXVECTOR3 vUpVec(0.0f,1.0f,0.0f);
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH(&matView,&vEyePt,&vLookatPt,&vUpVec);
pDevice->SetTransform(D3DTS_VIEW,&matView);
C++でVS2008EEを使用しています。上のようにするとキーボードで回転角を変化させても三角の面を描画した画面上には変化が起こりません。試しに*のコメントがある行のmatWorld3を
matWorld1、matWorld2に変えてみるとmatWorld1のときはカメラが前後移動・円移動をし、matWorld2では回転が出来ていました。どなたかご教授願います。
D3DFMT_A8R8G8B8で半透明にしてたテクスチャが、
デバイスロスト復帰後は透明じゃなくなりました。
D3DPOOL_MANAGEDは復元で元のフォーマットを考慮してくれないんでしょうか?
DirectX9です
926 :
925:2010/03/12(金) 21:38:05
ごめんなさい原因が分かりました。
レンダリングステートの関係でした。
>>924 何がやりたいのか良く分からんが
三角の面とカメラが同時に回ってるから
いくら回しても同じ面しか映らないぞ
928 :
924:2010/03/12(金) 22:12:29
>>927 一人称視点・三人称視点が切り替え可能なガンシューティングを作ろうと思っていました。
自キャラを表示した後
D3DXMatrixTranslation(&matWorldm,0,0,0);
pDevice->SetTransform(D3DTS_WORLD,&matWorldm);
とさっきのコードの下に書き加え三角形を表示したところうまくいきました。
キャラ表示用の設定のまま三角形を描画していたのですね。
非常にお早い返答ありがとうございました。また、説明不足で申し訳ありませんでした。
DirectXでゲーム開発を行うにはどの程度のPCがひつようですか?
>>916 え!?DX11はデバイスロスト対策いらないの!?
これはでかい・・・!
しかし奴らはXPを使っている
質問させて頂きます。
オンラインゲームや一般のゲーム(DirectXで開発をしているもの)で
ゲーム内ウィンドウをどうやって実装しているのか分かりません。
WIN32APIなどの関数が使えるわけでもないので、どうすればいいでしょうか?
一番単純なのはふち無しウインドウでやること。
手間かがかかるのは、APIでインプットを取ってきて自前実装すること。
当たり判定とかは得意でしょ?
>>933 実際に作ってみれば分かるが、ゲームで使うウインドウシステムなんて
自分で作ってもそんなに難しくない。
>>933 マウスで「つまむ」、「ドラッグする」という動作を実装するだけ。
あとはマウスの状態によって「ウィンドウ」の描画状態を変更するだけだからそれほど難しいことではない。
ウィンドウに関しては、お決まりの書き方があって、訳が分からなくても、
とりあえず、こう書きゃ動くくらいに考えたら簡単だよ。
SteamのオーバーレイのGUIだと、WindowsのGUIをそのまんまリダイレクトして実装しているみたいだけど、やり方は知らん。
939 :
933:2010/03/13(土) 00:12:25
なるほどー
作り始めているんですけど、なかなか私の能力だけじゃ難しくて…
各イベントのメッセージなど、どうすればいいのか全く検討がつかないです。
普通にそれぞれが独立して順次1フレームに一回処理をするオブジェクトを
複数走らせられるようなシステムにしとけばいい気がするけどな
変にマルチに動かれると複数のウィンドウから同時に同一の情報にアクセスしたときに起こる、
みたいな再現性の無い変なバグ引き起こすことあるし
いまさらながらDirectX7で作りたいのですが
DX7の最新のsdk(ver7.1?)ってもう手に入らないのですかね?
せめてヘッダやライブラリがあればいいのですが、最新のDirectX SDKには含まれていませんでした
古本なり専門書店で7時代の本買ってきて
付属のCD-ROMから入れるしかないんじゃないか?
もう公式はもちろんアングラな場所からも消えてから大分経つよ
いや、そこまでさかのぼらなくても
8以前とかmusicとかの過去のコンポーネントが削除されたのはNovember2007だから
サンプルとか抜きにして作りたいだけならAugust2007でいける
August2007が今DL出来るかどうかは知らんが
DX7というと、機種依存が入りそうな微妙なバージョンだな。
ヘッダは最新のSDKにも入ってるだろ。
消えたのはDX8関係。これは2007 August辺りが最後だと思う。
質問おねがいします
拡張したマテリアル情報を含んだXファイルを保存しようとしているのですが
D3DXSaveMeshHierarchyToFile()関数に
ID3DXSaveUserDataに実装したものを渡して処理しているのですが
デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
登録して保存してみても、デフォルトテンプレートのMaterialと
カスタムテンプレートのMaterial情報が保存されてしまい思った用に処理できません
デフォルトテンプレートでの処理を上書き処理についてご教授おねがいします
>>942 >>943 ありがとうございます
August2007探してみます
>>944 ddraw.hはあるのですが、d3d.hやd3dx〜.hが無いんです
同様にライブラリもddraw.libはあってもd3d関連のが…
今更dx7やるくらいならGDI叩くかdx9以降を触った方がいい気がしなくも無い
dx7やdx8世代のビデオカードでもdx9で固定機能パイプラインだけを使うなら動作するんでしょうか?
dx7のHwTnLもどういう扱いになるのか気になります
動くよ
>>945 テンプレートの登録はちゃんとカスタムのMaterialにしてるの?
RegisterTemplatesあたりだと思うが
>デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
デフォルトMaterialのGUIDは、デフォルトMaterialだけのものだから
こういうことはやっちゃいけない気がするが・・
というか、今更「dx7やdx8世代のビデオカード」みたいなブツをどうやって入手するかの方が謎だぜ。
俺のPCにささってるぜ
ワールド座標のレイをワールド座標(回転拡大縮小平行移動後)のメッシュと交差判定させるにはどう変換したらいいんでしょうか?
無変換だとワールド座標の原点(メッシュのローカル座標?)を中心としたメッシュの空間にヒットします。
レイの座標やベクトルにワールド(逆)変換をかけても原点を中心とした空間にしかヒットしません。
その後にヒットした座標を座標変換
Aug09からFeb10に差し替えたところソフトウェアですら初期化できなくなりました。
2000年頃のRadeonです
957 :
953:2010/03/13(土) 22:03:29
meshに適用してる行列の逆行列をrayに掛けて
rayをmeshのローカル空間にもってくる
交差判定、交点を求める
交点にmeshに適用してる行列を掛ける
>>950 はい、ID3DXFile::RegisterTemplatesを使ってテンプレートを登録しています
マテリアル保存の処理を置き換えた処理をしたくて
カスタムマテリアルテンプレートをオリジナルのGUIDで登録
↓
デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される
カスタムのマテリアルテンプレートをデフォルトのGUIDで登録
↓
デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される
といった動作になってしまうので悩んでいます
ID3DXSaveUserDataは新たな要素を保存するメソッドを追加するだけで
既存の処理を置き換えるってことは出来ないんでしょうか?
Feb10でd3dref9.dll削除されたんですか?
962 :
953:2010/03/14(日) 10:16:09
>>958 なんとか出来ました。ありがとうございました。
>>923 August 2008に更新される前は、April 2006のまま超長期放置されていた事を忘れていないか?
April 2006どころじゃねーや、October 2004だった
それは英語版も一緒だから
英語版はSDK付属のヘルプが毎回更新されてるだろうが
前提条件が違う
2008のヘルプファイルって無いの?WEBだと重くて、、、
最新の機能を使う必要がある人は嫌でも英語読めるようになるし
使わない人はoct2004使っとけばいい
何も問題ないな
マイクロソフトもソフトウェア業界もそーやって自助努力100%で放置した結果、
日本の開発力はガタガタに落ちたというか英語圏に引き離される一方
日本のゲーム会社はなーんにもやらないのな
単に英語読めるようになればいいだけの話では
その単にが大多数の日本人には思いの他でかい壁になっていて、現実に深刻な影響が出ているってことだろ
深刻な影響ねぇ
英語読めなきゃ最新情報追えないのはDirectXに限らず当たり前の話だと思うが
ゲーム会社の英語力はそんなにズバ抜けてヤバいのか?
ミドルウエアより上のレイヤーしか触たことないひとでも、ゲームは作れるんじゃね?
だから、英語力なんかつくわけない。
英語読めなくても英語できる優秀な人が厳選された良質な情報だけを日本語に訳して提供してくれればOK
ぶっちゃけ大手のゲーム会社のプログラマーの試験で英語が出て来た記憶が無い。
中学生レベルの一般常識+高卒レベルの数学と物理、
入社してから英語を学ぶ機会があるのはリーダー以上や社外の人と会うプランナーぐらい。
PS3なんかツールやライブラリがSCEE頼みで、SCEJは何もしてくれないから困る。
それに比べればMSはかなり親切なほうだと思う。
ソニー系の開発環境がタコなのはもはや病気のレベルだよね……。
VGA(4:3)で開発しているゲームをFWVGA(16:9)でフルスクリーン表示にした場合どの用に表示されるのでしょうか?
横に伸びてしまう?
GeForceだとこんな設定がある
・ドットバイドット
・アス比保ったまま引き伸ばす
・保たず引き伸ばす
・モニターに任せる
開発者側が気にすることはないということですかね?
>>982 ビデオカードのスケーリング機能は、NVIDIAのドライバがポンコツなせいで
動かないことが多いので、気にする余裕があるならした方がいい。
とりあえず、ウインドウモードでウインドウサイズを変えれるようにしてあれば
苦情は来ないと思う。
ポインティングデバイスを使うソフトだと面倒だけどね。
このスレにはプロが居るんですね
ありがたや
失礼な奴だな。
>>908 アクセス規制に巻き込まれて返事遅れましたが、その通りでした。ありがとうございます。
SCEIのツール&ライブライに不満があるなら自分で作ってSCEIに
これをフリーで提供しますのでPS系の標準にしてくれませんか、
という提案をすべき。
ナムコかよ
ゲーム会社でもDirectXのヘルプファイル見るの?
見てますん
>>987 ツールやライブラリ以前に開発機材の管理からSCEE頼みだから提案するにも根本的にだな・・
>>989 むしろ全て頭に入っているプログラマがいたら教えてくれ、歩く辞書と名づけるわw