5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【C++】 DirectX初心者質問スレ Part27 【C】

1 :デフォルトの名無しさん:2010/01/09(土) 17:13:25
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。


2 :デフォルトの名無しさん:2010/01/09(土) 17:14:10
前スレ
【C++】 DirectX初心者質問スレ Part26 【C】
http://pc12.2ch.net/test/read.cgi/tech/1256403984/

3 :デフォルトの名無しさん:2010/01/09(土) 17:16:26
>>1-2


4 :デフォルトの名無しさん:2010/01/09(土) 17:21:45
>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 :デフォルトの名無しさん:2010/01/09(土) 19:29:24
デバイスの場合そんな初歩の話をしてるんじゃ無いと思うぞ

6 :デフォルトの名無しさん:2010/01/09(土) 22:42:40
>>5
そう?
少なくとも俺はこのレベルでの話をしたつもりだけどね

7 :デフォルトの名無しさん:2010/01/09(土) 23:18:35
D3DXで描画したオブジェクトの周りの背景を透過して、ウィンドウの向こう側が
見えるようにできたらと考えているのですが可能でしょうか?
環境はXP,DirectX9です。

レイヤードウィンドウを作成して、SetLayeredWindowAttributesで
D3DX側の背景色を指定してみたのですが、さすがにそう甘くはなかった…orz
画面閉じてもD3DXの描画部が残る始末。。
描画先?描画デバイス?が違うみたいだから無理なのかな?

ウィンドウの向こう側をコピーして、D3DXで描画するオブジェクトと合成
という手段も考え中ですが、ビルボードに貼り付けじゃなんか違うよなぁ…

良い方法ありましたら教えてください。

8 :デフォルトの名無しさん:2010/01/09(土) 23:55:34
>>4
それは単なるルールじゃないの?




9 :デフォルトの名無しさん:2010/01/10(日) 00:15:11
>>4
真ん中の場合も解放されてるかどうかはunko関数の中身を調べてみないとわからないんじゃ

10 :デフォルトの名無しさん:2010/01/10(日) 01:21:36
結局引数で渡そうが
その渡すための元の変数をどこに置くかって話でそ
クラス設計の話なんだから
>>4みたいな構造化プログラミングの思考で考えてもしょうがない

11 :デフォルトの名無しさん:2010/01/10(日) 02:23:06
てか、デバイスのロストとか関係無しの話なら
スレ違いになるんじゃね

12 :デフォルトの名無しさん:2010/01/10(日) 03:23:39
デバイスの管理は昔のサンプルにあったCD3DApplicationみたいな
クラスでやってるな自分は

勝手に解放されてしまうかもしれない、なんてのはスマポ使おうが何使おうが
ラップして隠蔽でもしない限り、防ぎようが無いから気にしてもしょうがない

13 :デフォルトの名無しさん:2010/01/10(日) 08:32:29
>>9
はぁ?

14 :デフォルトの名無しさん:2010/01/10(日) 11:28:17
>>12
気にしてもしょうがないですね

15 :デフォルトの名無しさん:2010/01/10(日) 15:43:51
>>12
なるほど、参考になります

16 :デフォルトの名無しさん:2010/01/10(日) 15:48:06
ロスト自体は防げないが
いつロストしてもなるべくリストアできるようにする設計は考えなくてはいけない
まぁ、10からはロストなくなったんだっけ?

17 :デフォルトの名無しさん:2010/01/10(日) 15:50:48
>>16
どうなんでしょうね・・・

18 :デフォルトの名無しさん:2010/01/10(日) 15:54:04
引数通した場合はどこで死んでるかはデバッガで追えば一発だけど
グローバルの場合はなかなか見つからない上にたとえわかっても対策できないだろ
途中までロスト考慮しないでグローバルで組んでしまったD3DDeviceのポインタは
1つ1つラップしていくぐらいしかどうにもならねーだろ
この組み方は致命的なんだよってわからないなら設計なんて考えないでもう根性だけで組んだらいいんじゃない?
別にそれが悪いわけではないってのもついでにいっておく

19 :デフォルトの名無しさん:2010/01/10(日) 16:04:20
このへんは設計云々っていうより
プログラムの美意識に関する問題だからぶっちゃけ結論は出ない気がするな
プログラマは何故か「美しい」プログラムに拘る人種だから
たとえそれが有効だとしても
グローバル変数なんて「美しくない」ものを使いたくないという気持ちが働く

シンプルさを求めるか堅牢性を求めるかも人によって違うし

20 :デフォルトの名無しさん:2010/01/10(日) 16:13:02
すなおに謝ればいいんだよ

21 :デフォルトの名無しさん:2010/01/10(日) 16:22:49
>>19
でも綺麗に組むなら引数とキチンと通してグローバル変数は一切使わずに・・・っていうのは
知っておいてもいいだろ?
これを正当化するようなことは技術者ならあってはならない
あくまでも時間がなかったり現場の作法やらで
しょうがないからグローバル変数・関数を使ってることは理解しておいてもらわないと困る
グローバル変数を使ったほうが綺麗とか言い出したら間違いなくそいつはなにも理解してないわけだし

22 :デフォルトの名無しさん:2010/01/10(日) 16:24:27
てか論点がずれてない?
引数で渡すにしたって渡すための変数は
その関数がよばれる全てのスコープ内ではグローバルじゃなきゃいけないわけでしょ?
引数で渡すのはあくまで可読性を高める規則であって
それが守られてる保障が無い限りデバックがどうとかは関係ない希ガス

23 :デフォルトの名無しさん:2010/01/10(日) 16:26:41
馬鹿の一つ覚えってやつだろ

24 :デフォルトの名無しさん:2010/01/10(日) 16:40:26
元の質問がデバイスにアクセスするクラスにどう渡すかって話なんだから
順をおって考えると

あるクラス内でデバイスにアクセスしたい
オブジェクト指向で考えるとクラス内ににデバイスへのポインタがあるのが望ましいよね
じゃあ、インスタンス生成時に初期化子としてデバイスへのポインタを渡そう
あ、でも、もしかしてどっかでデバイスのアドレスが変わったらそれって無効だよね…
じゃあ、あまりC++っぽくないけどダブルポインタで渡しとく?
どっちにしても毎回渡すのはメンドクサイし
クラスを生成する可能性のある場所からはデバイスが見えてないといけないし
それって結局グローバルじゃないの?

ってことじゃ?

25 :デフォルトの名無しさん:2010/01/10(日) 16:45:47
>>22
は?C言語大丈夫かよw

26 :デフォルトの名無しさん:2010/01/10(日) 16:47:54
>>24
全然違うね
違うデバイスかもしれないぜ
できるかどうか知らないけどD3DDeviceが2つもてたら?
それも可能だし、あってもいいよね?

27 :デフォルトの名無しさん:2010/01/10(日) 16:56:52
そもそもいろんなクラスからデバイスにアクセスしようとする発想がおかしい
デバイスが必要なのって描画クラスと後はせいぜいリソース管理クラスくらいだろ

たとえデバイスをグローバル変数(あるいはstaticメンバ変数)として配置したとしても
そこにアクセスできるのは描画クラスのみという設計にしておけば良い
デバックするときは描画クラス内だけをみればいい訳だし
ゲームの実装部分はデバイスには触れずに必ずそのクラス経由で描画するようにすれば
たとえばDirectX9から11にしたいなんて時には
その描画クラス内のみを変更すればゲーム部分はそのまま使えるよね

変に引数であっちこっちにデバイスをばら撒いちゃって
どっからでもデバイスにアクセスできるようにしちゃうと
もしDirectXの仕様がかわってある関数の引数の数が変わりましたなんてことになったら
修正箇所を全部直すことになるし
うっかりデバイスの変数名を変えたい、なんてことになったときに一括置換じゃちょっと怖いよね

28 :デフォルトの名無しさん:2010/01/10(日) 16:59:48
>>25
うるせー

29 :デフォルトの名無しさん:2010/01/10(日) 17:02:25
>>25はC++解ってなさそう

30 :デフォルトの名無しさん:2010/01/10(日) 17:06:13
>>27
あれあれ?
君の実装の仕方だったら確実に俺のほうが影響範囲少ないよ
わからないかな?

31 :デフォルトの名無しさん:2010/01/10(日) 17:12:05
お前は誰と戦ってるんだw

32 :デフォルトの名無しさん:2010/01/10(日) 17:27:07
>>18
特定メモリに対する書き込みアクセスはVC++のデバッガでも簡単に補足できるから、
グローバルだろうが破壊されるタイミングは簡単にチェックできる。
むしろアドレスが不定のグローバル変数の方がブレークポイント一発で楽なくらいだ。

それより、>>16とかはデバイスロストを誤解してると思う。
ロストしたデバイスをリセットできるタイミングは前フレームの描画終了〜次フレームの
描画開始の間の1ヶ所だけで、描画の途中でやたらに戻していいものではないよ。

33 :デフォルトの名無しさん:2010/01/10(日) 17:34:58
いつまでやるつもりなのこれ…

34 :デフォルトの名無しさん:2010/01/10(日) 17:56:04
某スレのテンプレ

●下記の話題は何度繰り返されても結論が出ず、無駄に荒れるだけなので避けましょう
・全角英数でのレス
・コーディングルール全般
・古典タスクシステム
・オブジェクト指向
・バージョン管理システム
・エクストリームプログラミング
・テスト駆動開発
・言語論争
・進路問題(大学にいくべきか、ゲーム専門学校にいくべきか等)
・エディタの強制
・読解力の指摘
・プラットフォームの優劣について

35 :デフォルトの名無しさん:2010/01/10(日) 18:18:48
美しいコードでコレ思い出した
心当たりがありすぎて笑えるw
http://www.geocities.co.jp/HeartLand-Kaede/9677/read.htm

36 :デフォルトの名無しさん:2010/01/10(日) 19:12:33
>>32
は?そのレス、俺への反論になってると思ってるの?
そりゃお前がいってるのは死んだときのみの話で
死ぬ可能性がある、もしくは変更される可能性があるってところまでは全くわからないよね?

したら前に例をあげたような関数の中身を全部すみずみまでチェックしないといけないわけだよね?
そこわかって反論してるの?
もう結論でてるでしょ?
育ちの悪いガキの必死な反論聞いてるの馬鹿らしくっていらいらすんだよw

37 :デフォルトの名無しさん:2010/01/10(日) 20:15:02
話があっちこっち飛びすぎて理解が追いつかない初心者だけど
>>36がKYなのは分かった

38 :デフォルトの名無しさん:2010/01/10(日) 20:15:37
平和だね

39 :デフォルトの名無しさん:2010/01/10(日) 20:56:12
っていうかデバイスがロストしても
D3DDeviceのポインタがロストする訳じゃねーし
勘違いの上で議論重ねても仕方なくね?

だからさ、
>>987 
よくわからんくせに、講釈たれんなよ

40 :デフォルトの名無しさん:2010/01/10(日) 21:13:35
次の質問どうぞ

41 :デフォルトの名無しさん:2010/01/10(日) 21:28:21
>>7なんだけどなんか良い方法無いかな?…(´・ω・)

42 :デフォルトの名無しさん:2010/01/10(日) 22:16:58
オフスクリーンでレンダリングしてDIBにコピーして、レイヤーウィンドウに描画すればいいんだよ。

43 :デフォルトの名無しさん:2010/01/10(日) 23:06:34
>>42
サンキュウ。
ちょっと調べてくる

44 :デフォルトの名無しさん:2010/01/11(月) 02:14:11
>>39
>D3DDeviceのポインタがロストする訳じゃねーし

デバイスロストの種類は2種類
1つはポインタごとふっとぶ

45 :デフォルトの名無しさん:2010/01/11(月) 02:52:05
そんな状況に陥ったらもう不正終了で落としていいよ

46 :デフォルトの名無しさん:2010/01/11(月) 03:46:33
>>45
3Dのスクリーンセーバーが起動するたびに運が悪いと落ちるんじゃねか?

47 :デフォルトの名無しさん:2010/01/11(月) 04:06:33
Resetで戻せないなら分かるが、ポインタごとふっとぶなんて状況あるの?

48 :デフォルトの名無しさん:2010/01/11(月) 04:44:43
>>47
だから苦労するんだし
D3DDeviceのポインタ保持ってるような組み方してると復帰できない

49 :デフォルトの名無しさん:2010/01/11(月) 04:49:46
>>44
もう一つは?

50 :デフォルトの名無しさん:2010/01/11(月) 04:59:01
>>49
D3DDeviceは生きててPOOLMANAGEだかなんだかに設定してると復旧してくれる

本題からかなりずれるけど用はグローバル変数にしててどっかでdeleteされたり変更されたりすると
その変更がわからないってのが問題なわけよ
別にD3DDeviceは例として挙げただけで他のもんでもおこるだろ?
グローバル変数にしてしまうと
unko();
の中身で使用されてるかどうかがまったくわからない

unko(pD3Device);

これだとわかるでしょ?
って話よ
単純な話してんだけどなんで食いつき方おかしいかな?

51 :デフォルトの名無しさん:2010/01/11(月) 05:41:26
>>48
D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、
D3DERR_OUTOFVIDEOMEMORYな状況のことを言いたいんだろうけど
インターフェースは生きているんだし「ポインタごとふっとぶ」なんて
普通は言わないと思うが。

52 :デフォルトの名無しさん:2010/01/11(月) 06:00:31
>>42
自分なりに解釈して調べてみたんだけど、
1.CreateOffscreenPlainSurfaceでオフスクリーンサーフェイスを作成
2.SetRenderTargetで用意したサーフェイスに描画先を変更
3.描画処理
4.DIBを作成
5.サーフェイスのDCを取得し、StretchDIBitsで作成したDIBにコピー
6.DIBをなんらかの手段でレイヤーウィンドウに描画
って流れでいいのかな?

2すらうまくできてないみたいでまだ最後まで試せてないから、
とんちんかんなこと言ってるなら指摘してもらえるとありがたいですm()m

53 :デフォルトの名無しさん:2010/01/11(月) 06:20:29
>>51
>D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、
>D3DERR_OUTOFVIDEOMEMORYな状況

こんな重大なエラーに直面したらメッセージ出して落とすくらいしか
やることないのではと思うんですが
上手くまとめて処理を継続できるのかなあ?

54 :デフォルトの名無しさん:2010/01/11(月) 06:43:00
そもそも質問の意図が良くわからないなぁ
デスクトップアクセサリみたいなウィンドウ枠のない描画をしたいってこと?

55 :デフォルトの名無しさん:2010/01/11(月) 07:32:14
想像力の欠如だな
まぁありすぎても困ったことになるんだが

56 :デフォルトの名無しさん:2010/01/11(月) 08:18:06
やりたいことの説明下手が多いのはいつもの事

57 :デフォルトの名無しさん:2010/01/11(月) 11:01:51
>ポインタごとふっとぶ
これは勘違いでOK?
大体COMなんだから、俺が参照保持してる時点で
インスタンスを開放されちゃ困るよ。唯のバグじゃんそれ。

58 :デフォルトの名無しさん:2010/01/11(月) 12:04:23
>>57
はぁ?

59 :デフォルトの名無しさん:2010/01/11(月) 12:24:06
>デバイスロストの種類は2種類
>1つはポインタごとふっとぶ

詳細が書かれたlink貼ってくれないか?

60 :デフォルトの名無しさん:2010/01/11(月) 12:33:43
参照カウンタを増やすのを忘れたってオチだろ

61 :デフォルトの名無しさん:2010/01/11(月) 12:53:00
>>54
説明下手でごめんなさいm()m
イメージ的にはそのデスクトップアクセサリとやらに近いみたいです。
でもウィンドウ枠は表示できたらいいな(´・ω・)

62 :デフォルトの名無しさん:2010/01/11(月) 13:37:09
>>61
謝罪が足りない

63 :デフォルトの名無しさん:2010/01/11(月) 19:00:50
愛が足りない

64 :63:2010/01/11(月) 19:01:38
>>62

65 :デフォルトの名無しさん:2010/01/13(水) 18:29:34
ポリゴンで複数の図形を描きたいのですが、図形の数だけ頂点バッファを作らなければならないのですか?


66 :デフォルトの名無しさん:2010/01/13(水) 20:00:58
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);

68 :デフォルトの名無しさん:2010/01/13(水) 22:08:05
66じゃないけど
D3DPT_TRIANGLESTRIPじゃなくて
D3DPT_TRIANGLELISTで一回のDrawPrimitiveで描いた方が
パフォーマンスには優しいんじゃないの?
頂点数が増えるのが嫌ならインデックスバッファ使って

69 :デフォルトの名無しさん:2010/01/14(木) 22:03:44
DirectXってほんと不思議な仕様だよな

70 :デフォルトの名無しさん:2010/01/14(木) 23:11:30
そうか?
まとめて書いたほうが早いのは昨今のビデオカードでは
API関係なく共通の設計上の都合だが。

71 :デフォルトの名無しさん:2010/01/14(木) 23:30:09
ラスタライズ系3Dグラの手法に
寄ってるから、歪なのは致し方ない。

72 :デフォルトの名無しさん:2010/01/15(金) 00:23:32
>>70
トレードオフにならね?
確実に画面に入るってわかってるならいいけど
まとめてっていうのもどんな視点で言ってるのか明確にしないとわけがわからなくなる
一番速いのはなにもしないこと(クリッピングではじく)であるのは絶対覆らないわけだし

73 :デフォルトの名無しさん:2010/01/15(金) 01:10:31
そんなの質問者の言葉が足りないんだからしょうがない
複数の図形が
いくつ出るのか、動的に数が変わるのか、
それぞれが毎フレーム移動したり回転したりするのか
最低でもそれくらい分からないと

74 :デフォルトの名無しさん:2010/01/15(金) 15:24:49
>>73 冷酷

75 :デフォルトの名無しさん:2010/01/15(金) 20:33:52
そういう時はしばらくスレの様子を見て、
解決策がアップされたら自分で検証して、
自分の考えがまとまったら御礼のレスを
書き込めばよい


76 :デフォルトの名無しさん:2010/01/16(土) 00:24:43
XAudio2はCoInitializeEx COINIT_MULTHTHREADEDで呼べとSDKにはありますが
メインスレッドがCOINIT_APARTMENTTHREADでないと困る状況の場合、
それでもかまわないのでしょうか? それともXAudio2用にスレッドをつくるものなのでしょうか?

77 :デフォルトの名無しさん:2010/01/17(日) 09:18:16
DirectX初心者なのですが、
参考書籍でおすすめの本とかありませんか?

78 :デフォルトの名無しさん:2010/01/17(日) 14:14:46
何度も言われてることですが
コレさえ読めばOKみたいなパーフェクト本はありません
実際に書店に行って自分のレベルにあったものを選びましょう
積まずに3−4冊消化してようやく「なんとなく解ってきた」と思えるでしょう
そこまでいけば今自分が知りたい情報というのも自ずと分かってくるので本選びで悩むこともなくなるでしょう

そんなお金無い貧乏さんor近くに専門書店がない田舎人さんは
MSDNのオンラインヘルプをじっくり読みましょう
十分な情報量です

79 :デフォルトの名無しさん:2010/01/18(月) 07:33:03
XNAって何?

80 :デフォルトの名無しさん:2010/01/18(月) 09:47:05
http://www.google.com/search?q=%67%75%67%75%72%65%6B%61%73%75

81 :デフォルトの名無しさん:2010/01/18(月) 14:12:41
XNAでゲーム作っても誰にも遊んでもらえないよw

82 :デフォルトの名無しさん:2010/01/18(月) 18:58:14
.netですら俺には理解できねー
なんでランタイムあんな仕様なの?w
あー、ダメだvc.netのランタイムの仕組み作った奴殴りたくてしょうがねぇ

83 :デフォルトの名無しさん:2010/01/18(月) 21:56:36
.NETをやり始めると止まらない
楽すぎて溜息が出るね

84 :デフォルトの名無しさん:2010/01/18(月) 23:14:14
質問です〜。
Direct2Dで歪な3角形または多角形を書く方法無いですか?
ブラシで塗ったヤツほしいんですけど。
もしかして、ジオメトリー系でいけますか?

WIZとかメガテンみたいなゲームのダンジョンぽいものをつくりたいんです。
迷路の自動生成は出来てて、後は表示がががが。

85 :84:2010/01/18(月) 23:21:34
すいません。自己解決しました。ID2D1Meshで出来そうです。
余計なことかいてすません。

明日がんばるです。おやすみです。

86 :デフォルトの名無しさん:2010/01/19(火) 02:58:12
D3DXANIMATIONCONTROLLERのAdvanceTime()で再生Frameを進めるけど
逆再生したい時はどうすれば良いのだろう?
負数入れても、アニメーションがStopするだけで逆再生されないです・・・

87 :デフォルトの名無しさん:2010/01/19(火) 05:10:17
>>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
レンダリングする時ってカメラの有効範囲?でボックステストを
行って合格した者だけを送ったほうがいいんですか?

89 :デフォルトの名無しさん:2010/01/19(火) 16:12:03
そのほうが速くなるならそうすればいい

90 :デフォルトの名無しさん:2010/01/19(火) 19:22:50
あからじめ入ることがわかっているならしなくてもいいし

91 :デフォルトの名無しさん:2010/01/19(火) 22:08:22
D3DXANIMATIONCONTROLLERでアニメーションを進める為のローカルタイムを初期状態にリセットするにはどうしたらよいのでしょうか
アニメーションをループさせずに最大値のポーズで固定したままにしたいのですが、どうもうまくいきません

92 :デフォルトの名無しさん:2010/01/19(火) 22:36:41
>>91
初期値
アニメーションコントローラー->SetTrackPosition(トラック,0.0f) ;

最大値
double endTime = 現在のアニメーションセット->GetPeriod() ;
アニメーションコントローラー->SetTrackPosition(トラック,endTime) ;

最大値はちょっと減らさないとダメとかあったような気がするけどよく覚えてない

93 :デフォルトの名無しさん:2010/01/19(火) 23:04:16
>>92
今試してみた所できました!
御丁寧にどうもありがとうございました

94 :デフォルトの名無しさん:2010/01/20(水) 23:46:09
>正負を見て負の時はSetTrackPositionで強制巻き戻ししてたけど
情報どうも。でも残念ながら、SetTrackPositionで巻き戻しても
Animationは逆再生しなかった・・・仕方ない、D3DX使うの諦めて
自力でAnimationシステム作るしかないか・・・。


95 :デフォルトの名無しさん:2010/01/21(木) 18:53:24
会社が倒産して再就職活動中なんだけど、探しているあいだにゲームプログラムを勉強しようと思って
自宅の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
少し調べただけでも似たようなものがありますし。最初はどれを使ったほうがいいのか、もしくは
使わないほうがいいのか。

みなさんはどうしてますか? 独自のライブラリを開発してあるのかな。

96 :デフォルトの名無しさん:2010/01/21(木) 19:17:24
普通に使って良いと思うよ
特に初期化周りのシステムは
ゲームとは関係ないところのくせに面倒で初心者が躓きがちだし
使うことによってもっと他の大事なことを勉強する時間ができるならどんどん使うべき


あとDXUTは普通のミドルウェアライブラリと違ってソースが全公開なので
心に余裕ができたら中身ののぞいてみるもよし
参考にしてDXUTを使わない独自システムを開発するもよし
よく見るといろいろ使える小ネタがいっぱい仕込んであるので
頼るというよりどちらかというと勉強の素材でもある

97 :デフォルトの名無しさん:2010/01/21(木) 19:25:14
>>96
通報した

98 :デフォルトの名無しさん:2010/01/21(木) 20:04:44
>>95
DirectXの知識は身に付かないけどゲームプログラミングをやりたいだけならDxLibみたいなライブラリを使った方が楽ですよ。

99 :デフォルトの名無しさん:2010/01/21(木) 21:55:08
Visual Studioぐらい買えよ

100 :デフォルトの名無しさん:2010/01/21(木) 22:49:19
DXUTは商用、個人使用問わずライセンスフリーだぜ

101 :デフォルトの名無しさん:2010/01/21(木) 23:39:14
DXUT使いこなせるならそもそも0からライブラリかけるだろ。
そのくらいDXUTはカオス。

102 :デフォルトの名無しさん:2010/01/21(木) 23:45:55
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の中まで追っていけるのはいいですね。何をやってるのかわからなかったけど…先は長そうです。


104 :デフォルトの名無しさん:2010/01/22(金) 00:10:08
>>102
画像読み込みは結局D3DXなんだが・・・

105 :デフォルトの名無しさん:2010/01/23(土) 00:39:09
DXUTのサンプルはDirectXが使えるが
どうプログラムを組んでいいのかわからない人の為の物だと思ってる

106 :デフォルトの名無しさん:2010/01/23(土) 17:25:59
まったく分からないところからDXUTの中を追うのは結構大変でないか?

107 :デフォルトの名無しさん:2010/01/23(土) 18:40:17
分からない人は中を追わなくてもいいのがDXUT

108 :デフォルトの名無しさん:2010/01/23(土) 22:35:47
DXUTには著作権があるんだよ・・・

109 :デフォルトの名無しさん:2010/01/23(土) 23:31:06
著作権があって問題あるの?

110 :デフォルトの名無しさん:2010/01/24(日) 00:29:49
俺の書いた糞ソースにも著作権はあるんだぜ?

111 :デフォルトの名無しさん:2010/01/24(日) 08:13:43
たしかにコピーライトはマイクロソフトにある
しかしこれは「これは俺が書いたんだぜ」と言うのがNGなだけで
開発者はマイクロソフトが許諾する範囲内でこれを自由に利用することが出来る

112 :デフォルトの名無しさん:2010/01/24(日) 16:02:05
DXUTの中を追うのが嫌になって結局自分で書き直す事になる

113 :デフォルトの名無しさん:2010/01/24(日) 17:02:20
DXUTを独自ライブラリと偽って売る(公開する)のはダメ
DXUTでゲームを作って売るのはOK

114 :デフォルトの名無しさん:2010/01/24(日) 17:03:05
>>112
俺のことか

115 :デフォルトの名無しさん:2010/01/24(日) 17:42:17
出ました自作至上主義

116 :デフォルトの名無しさん:2010/01/24(日) 22:23:46
自作至上云々の前にアレつかってゲームってかなりマゾじゃないと無理だろ・・・

117 :デフォルトの名無しさん:2010/01/24(日) 23:20:23
質問です。
DirectXを始めてすらいないので、ここでいいかわからないのですが、関連だと思うのでここで質問させてください。
OSはVista、開発環境はVisualStudio2008Professionalで、これからDirectX SDKを使おうと思っているのですが
この環境で開発したゲームをXPでも動作できるようにするにはDirectXは9.0でいいのでしょうか?
それがわかるリンクを張っていただけるだけでも結構です。よろしくお願いします。

118 :デフォルトの名無しさん:2010/01/24(日) 23:27:13
XPのDirectXが9までだから、どうしょうもないだろう

119 :デフォルトの名無しさん:2010/01/24(日) 23:34:38
>>118
そうですよね。ありがとうございます。

120 :デフォルトの名無しさん:2010/01/25(月) 00:18:37
今から勉強するのにXPターゲットでDirectX9っていうのも
なんていうか別にいいんだけどいかにも日本的な考えだなっと。

121 :デフォルトの名無しさん:2010/01/25(月) 00:23:05
11がXPに入れられるんなら9はいらねーけどな

122 :デフォルトの名無しさん:2010/01/25(月) 00:28:53
本人はVISTAもってんじゃん

123 :デフォルトの名無しさん:2010/01/25(月) 00:32:26
だからなに?

124 :デフォルトの名無しさん:2010/01/25(月) 00:43:33
DirectX11どころか10すら日本じゃろくに使える奴いないんだから
初心者ならなおさら枯れてるDirectX9でいいだろ。

最新技術は海外にまかせときゃいい。

125 :デフォルトの名無しさん:2010/01/25(月) 07:19:31
最新技術について行けなくなったじじいの世迷い言の典型

126 :デフォルトの名無しさん:2010/01/25(月) 09:38:52
ネットブックでゲームはしないだろjk
と考えて11へゴー。10はいらない子と認識している俺

127 :デフォルトの名無しさん:2010/01/25(月) 09:41:14
11に対応してるライブラリが・・・あると便利そうだけれども・・・

128 :デフォルトの名無しさん:2010/01/25(月) 09:43:31
seleneくらいしか知らんがあれ使われえるのか?

129 :デフォルトの名無しさん:2010/01/25(月) 09:51:59
そもそも自分の開発環境に11対応のビデオカードがない悲しさ

130 :デフォルトの名無しさん:2010/01/25(月) 10:10:12
http://www.4gamer.net/games/099/G009929/20100108053/

賭けてもいい dx11 は流行らないと

131 :デフォルトの名無しさん:2010/01/25(月) 10:15:19
間を取って10大勝利

132 :デフォルトの名無しさん:2010/01/25(月) 10:22:17
SlimDX を合言葉に各地で兵が集い始めて・・・つまり xna !
これならかつる!

133 :デフォルトの名無しさん:2010/01/25(月) 10:41:54
ひそかに12つかってる俺ってすごいな

134 :117:2010/01/25(月) 11:42:06
昨日質問させていただいた者ですが、みなさんのレスを見て思うところがあったので
もうひとつ質問させてください。

昨日は作ったものを「配る」ことと本や資料の充実を考え、DirectX9を勉強しようと思ったのですが、
「勉強する」ことを考えると9より10の方が良いのでしょうか?
私は現在学生ですが、いずれゲーム作りを仕事にしたいと思っています。
アドバイスをください。お願いします。

135 :デフォルトの名無しさん:2010/01/25(月) 12:29:53
誰をターゲットにするかで選択しろ。

136 :デフォルトの名無しさん:2010/01/25(月) 13:10:28
グダグダ言わずにまず始めろ。時間の無駄。
どうせどんどん新しいのが出てきてずっと勉強し続けることになるんだから。

137 :デフォルトの名無しさん:2010/01/25(月) 14:13:38
そうやって何も計画を立てずに目の前の仕事を頑張るのは能率の悪い人間のやること。間違ってもまねしないように。


138 :デフォルトの名無しさん:2010/01/25(月) 14:25:42
9にするか10にするかで悩んでる暇があったら9と10の資料集めてさっさと始めたほうがいいやね

139 :デフォルトの名無しさん:2010/01/25(月) 16:59:14
>>134
ttp://d.hatena.ne.jp/zuzu_sion/

・就職考えるなら、流行り廃りに乗っとけ
・バイトしろ
・2ch あんま見んな

くらいしか言うべきことはない。あとはじぶんで考えろ

140 :デフォルトの名無しさん:2010/01/25(月) 19:04:36
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 は全く知らないので、なんか凄い初歩的なことなのかなーと。

141 :デフォルトの名無しさん:2010/01/25(月) 19:18:35
俺は素人だから適当に答えるが、赤と緑を同じrectで描画するのでは問題あるのかい?

142 :デフォルトの名無しさん:2010/01/25(月) 19:32:25
DirectX SDKに入ってるわけじゃないから、このスレは違うんじゃないか?
あと、その説明を呼んだ限りだと、赤矩形を描かなきゃいいだけだと思うが。

143 :デフォルトの名無しさん:2010/01/25(月) 19:36:55
>>141
説明が下手ですいません。半透明のキャンパスの上に赤四角と緑四角を描いた絵を見せてから、
次に赤四角「だけ」を消した絵を見せたいのです。
キャンパスが不透明なら、赤四角をキャンパス色で上書きすれば良いのですが、
キャンパス自体が半透明なので。

いっぺん Clear して緑四角だけ書き直せというのはありかもしれませんが、
実際には緑四角以外にも大量にいろいろ描かれているので、ちょっと難しく。

144 :141:2010/01/25(月) 19:57:18
不透明度関係の実験はやったこと無いからわからないなぁ。
あんまり綺麗じゃない方法だと、一回ビットマップに書き出して、おぱしてぃ1.0で上書きとかだと無理なのかなぁ??
すまん。解らない。

145 :デフォルトの名無しさん:2010/01/25(月) 20:03:54
すみません。
FVF設定の D3DFVF_XYZRHW でできるような『極めて平面的なテクスチャ表示』を
3D空間に置いてあるポリゴン(ビルボード)で行いたいのですが、
当然3D空間だと距離による拡大縮小を受けてしまいます。
これを距離による拡大縮小を受けず、1pxがプロジェクションされても1pxのままになるようにするには、
どうすれば良いのでしょうか?


146 :デフォルトの名無しさん:2010/01/25(月) 20:14:17
>>赤の矩形だけ消す
キャンバスに描かれた絵には、赤の矩形の情報は乗っていないので
それだけ消すのは無理だろう。
普段実行したコマンドを記録していって、赤の矩形を消すとなったら
赤の矩形描画まで巻き戻すのはどうだ?
まあ、俺だったら採用しないが。

147 :デフォルトの名無しさん:2010/01/25(月) 21:30:06
9と10で悩むのはおかしいだろw
悩むなら9か11かだ。

148 :デフォルトの名無しさん:2010/01/25(月) 21:35:49
10カワイソス

149 :デフォルトの名無しさん:2010/01/25(月) 21:41:08
正直10は8と同じ運命だと思うわ。
11で9,10,11に対応してんだから10の意味がない。

150 :117:2010/01/26(火) 00:18:15
9で勉強を始めることにしました。
レスしてくださった皆様ありがとうございました。


151 :デフォルトの名無しさん:2010/01/26(火) 00:36:12
でもまだnvidiaが11にきちんと対応したカード出してないよね?
確かに11の新要素は魅力的で使いたいんだが、
ATIのカードを導入するとCUDAとかLinux上でのGL開発で困るから入れられん。

初心者ならとりあえず9で始めればいいと思うけど。

152 :デフォルトの名無しさん:2010/01/26(火) 01:38:16
CUDAか・・・
けっきょくDirectComputeに取って代わられるんだろうな・・・
cgにたいするHLSLみたいな感じで。

153 :デフォルトの名無しさん:2010/01/26(火) 08:24:33
>>145
いや、考えればなんとかなる。頑張って

154 :デフォルトの名無しさん:2010/01/26(火) 09:56:39
>>145
3Dなのに距離に影響を受けずって何がやりたいのかわからんけど
パースペクティブ射影じゃなくて
D3DXMatrixOrthoOffCenterLHあたりで画面サイズの正射影行列つくって
射影トランスフォーム行列に設定すればそうなるんじゃない?

155 :デフォルトの名無しさん:2010/01/26(火) 11:02:32
>>147
カス

156 :デフォルトの名無しさん:2010/01/26(火) 11:11:38
>>144, 146
スレ違いという指摘もあるので試行錯誤してから移動しようと思いますが、
・clipしてbitmapにcopyしたものを、clearしたところにdrawする
・数千文字・箱程度なら毎回全部書き直す
あたりの速度を試してみることにします。ありがとうございました。
要は「(頻繁に)キャンパスの一部を透明にする」方法っぽいのだけど、
opacity 1 で alpha 0 の色を塗るとかしても駄目なのがとほほ。

157 :デフォルトの名無しさん:2010/01/26(火) 13:05:55
>>153-154
ありがとうございます。

>D3DXMatrixOrthoOffCenterLH
こんな関数が有ったんですね。可能性の1つとして覚えておきます。
ありがとうございました。

158 :デフォルトの名無しさん:2010/01/27(水) 00:54:01
>>157
3D空間の点をD3DXVec3Project関数でスクリーン空間に射影
射影した点から適当に四角形でも作って(z座標はずらさない)
座標変換済み頂点として描画

これでおkなはず

偶然なのか
ゲ製作技術板のDirectXスレにも似た質問ある

159 :デフォルトの名無しさん:2010/01/27(水) 15:22:18
>>158
あちらで数名様にご回答を頂けて、もう締め切られてしまったかな?と思い、
一応ビルボードというお答えを頂いて別の技術っぽいし、1スレッドで1人で連続質問しまくるのもレス流しで迷惑になるかも?とも思い、
こちらで質問させて頂いていたら、あちらで思いもよらぬ追加助言を頂けてしまって; 申し訳ないです;

160 :デフォルトの名無しさん:2010/01/27(水) 16:00:07
D3DVERTEXELEMENT9の
D3DDECLUSAGEの
POSITIONのHELPの説明が
(-1,-1) 〜 (1,1) の範囲の位置データです。
ってなてんですけど、どういう事ですか?
まさか float x = 2.0 float y = 3.4 ・・という具合に
(-1,-1) 〜 (1,1) の範囲を超えてはならないという
分けじゃないでしょうに・・・。

161 :デフォルトの名無しさん:2010/01/27(水) 17:09:43
>>160
どこにもそんなこと書いてないけどどこ見てる?

162 :デフォルトの名無しさん:2010/01/27(水) 17:27:13
>>161
英語のHELPにもそう書いてあるし
日本語のMSDNにも↓書いてあります
http://msdn.microsoft.com/ja-jp/library/bb172534(VS.85).aspx


163 :デフォルトの名無しさん:2010/01/27(水) 18:08:51
やって見れば分かるが別にそんな範囲無い

164 :デフォルトの名無しさん:2010/01/27(水) 18:30:12
>>163
そうですか。
そういえばZバッファか何かがその範囲だったような・・・
画面座標系を出力するデータと言う意味なのかも知れない
・・・とかよく分からんけど自問自答してみます。

165 :デフォルトの名無しさん:2010/01/27(水) 20:29:03
英語版にも Position data ranging from (-1,-1) to (1,1) って書いてあるな。
http://msdn.microsoft.com/en-us/library/ee416464(VS.85).aspx
なんだこりゃ?

166 :デフォルトの名無しさん:2010/01/27(水) 20:48:27
まあミスだろうね。こっちには一言もそんな事は書いていない。
http://msdn.microsoft.com/ja-jp/library/cc324315.aspx


167 :デフォルトの名無しさん:2010/01/28(木) 01:15:42
鏡みたいなものに映ったオブジェクトってどうやって表現すんの?

シェーダーって左右の座標反転とかできんのかなあ?

168 :デフォルトの名無しさん:2010/01/28(木) 02:04:41
ステンシルバッファ使って鏡等をマスキング
D3DXMatrixReflect関数で鏡を境に反転する行列を作る
その行列を混ぜて
面の表裏を逆にして描画

こういうことじゃなくて?

169 :デフォルトの名無しさん:2010/01/28(木) 08:57:18
鏡面は>168の言うとおりでできる。
水面の反射だともうちょい面倒くさいな。

170 :デフォルトの名無しさん:2010/01/28(木) 09:19:43
高さの違う水面があったら、
水面ごとにオブジェクトを反転させて描画するの?
大抵のゲームはひとつの高さの水面しかないけど・・・。

171 :デフォルトの名無しさん:2010/01/28(木) 09:21:19
>>170
水面の場合は別のテクスチャに反転モデルを描画する。
面倒くさいから普通は水面は1個しかない。
高さが違う水面が画面内にいくつもあるって状況も普通に考えてレアだろう。

172 :167:2010/01/28(木) 09:47:17
>>168
oh・・・
なるほど

173 :デフォルトの名無しさん:2010/01/28(木) 10:51:44
D3DXIntersectでレイによる当たり判定をしてるんだけど
これってレイが命中する目標が回転してる時ってどうすればいいの?
メッシュに回転行列かければいいのだろうけど
そんな関数ある?

174 :デフォルトの名無しさん:2010/01/28(木) 10:57:44
レイの方を逆向きに回転させれば?

175 :デフォルトの名無しさん:2010/01/28(木) 11:34:41
その手があったか!

176 :デフォルトの名無しさん:2010/01/28(木) 19:52:18
>>170
反転したモデルをそのまま描画するのもありだと思う最近
水面は透けてるだけ

177 :デフォルトの名無しさん:2010/01/28(木) 20:19:58
鏡ってのは反転するだけじゃなくて
視点と鏡面との反射角によって見えるものが違うからな
ちゃんとやるには計算するしかない

178 :デフォルトの名無しさん:2010/01/28(木) 23:26:54
斜面を流れてる川に正確に反射させる方法あるの?
実用的な方法が思いつかん・・・

179 :デフォルトの名無しさん:2010/01/28(木) 23:41:01
平面で表現可能なら傾いていても出来る。
基本的には平面に対する反射行列で描画するだけ。

180 :デフォルトの名無しさん:2010/01/29(金) 06:38:59
水面なら水平じゃねーのか?

181 :デフォルトの名無しさん:2010/01/29(金) 09:10:30
川が水平だったら流れないでしょ

182 :デフォルトの名無しさん:2010/01/29(金) 09:56:02
源流部と河口に高低差があれば、中間に水平区間があっても水は流れるさ

183 :デフォルトの名無しさん:2010/01/29(金) 10:00:19
鏡と違って水面の場合は波で反射をゆらしたり屈折の表現が必要になる。
別に難しい処理ではないんだけど単純にめんどいね。

184 :デフォルトの名無しさん:2010/01/29(金) 10:04:36
高低差がないように見えても、微妙に発生するぞ。
例えばプールの排水溝を開けば、その上部の水面は引っ張られて沈む。
さらにその周囲は少しずつ角度が緩くなるだけで、トランポリンが変形するのと同じような状態になる。

185 :デフォルトの名無しさん:2010/01/29(金) 10:59:28
今話題になってんのはそういう問題じゃないだろ
物理現象の再現や検証はCUDAでも使ってやってろ

186 :デフォルトの名無しさん:2010/01/29(金) 21:38:39
アンダーライン付きのフォントを作成したいんですけど D3DXCreateFont では指定できません。
ググルと論理フォントから作成できるものもあるみたいなんですけど、定義されていません。今はもうないのでしょうか?
  これ→HRESULT D3DXCreateFont( LPDIRECT3DDEVICE9 pDevice, HFONT hFont, LPD3DXFONT *ppFont );
アンダーライン付きのフォントは作成できなくて、やるとしたら線を引くしかないんでしょうか?


187 :デフォルトの名無しさん:2010/01/29(金) 22:50:28
テクスチャに直接書いちゃえばいいらしいですよ

188 :デフォルトの名無しさん:2010/01/30(土) 00:04:34
同人ソフトやエロゲでもやってることだが、
将来、文字にルビを振る機能が欲しくなったら、まあ自前で処理するしかない。
それを思えば線を自前で描くとか楽勝だろ。

189 :デフォルトの名無しさん:2010/01/30(土) 01:11:32
>>187
事前にわかってる文字列であれば、あらかじめ描画済みのテクスチャを用意しておけということですよね。
なるほど、ちょっと考えてみます。

>>188
線を描く場合は、線の位置がフォントによって変わってしまうので、どうしたものかと困っています。
アンダーラインの位置を決定できる方法があればいいんですけど、それはもうスレ違いの話題になってしまいそうですし。

何にしても現状では出来ないということですね。ありがとうございました。

190 :デフォルトの名無しさん:2010/01/30(土) 01:16:49
Nスクや吉里吉里はルビ機能標準装備だから自前で組む必要はない

191 :デフォルトの名無しさん:2010/01/30(土) 02:03:33
>>189
CreateDIBSectionでメモリ上に文字を書いて、
そのビットマップ情報をテクスチャに書き出して
動的に文字列書いてるな。
Windowsに入ってるフォントなら何でも使えるし。

192 :デフォルトの名無しさん:2010/01/30(土) 10:28:00
>>191
そっか、勘違いしてました。
あらかじめ文字列描画済みの画像をリソースなりで用意しておくんじゃなくて
動的にテクスチャへ書き込むんですね。>>187さんもたぶんそういう意味だったんですね。
そもそもフレーム毎にDrawTextするより速度的にもいいような気がしてきました。

サンプルとかで用意してあるテクスチャしか使ったこと無かったので、その発想はなかった
ありがとうございました。

193 :デフォルトの名無しさん:2010/01/30(土) 13:01:52
+-+-+
| | |
+-+-+
| | |
+-+-+

こんな風に格子上になってる真ん中の頂点法線を求めたいんですけど、
高速に求める方法というのはありますか?
周りの頂点から三角形作って面法線を求めて、各頂点の角度を重みを掛けて
法線を求めているんでですけどもっと高速にする方法はないかなと悩んでます。


194 :デフォルトの名無しさん:2010/01/30(土) 13:09:33
まわりの頂点法線の平均とか

195 :デフォルトの名無しさん:2010/01/30(土) 13:27:23
外積で一発じゃね?

196 :デフォルトの名無しさん:2010/01/30(土) 13:40:04
格子の意味がよくわからない
動的に波うってたりするわけ?

197 :デフォルトの名無しさん:2010/01/30(土) 18:36:16
>>193
求めたい頂点の左右と上下の4点から外積で求めるのが普通じゃないかな。

198 :デフォルトの名無しさん:2010/01/30(土) 19:08:13
外積って何点必要だっけ?
4点ってそれはつまり・・・何?

199 :デフォルトの名無しさん:2010/01/30(土) 20:05:05
>>198
外積は2ベクトル。
4点あれば2ベクトル作れる。

200 :デフォルトの名無しさん:2010/01/30(土) 20:41:17
法線の平均って足して2で割るだけでいいの?

201 :デフォルトの名無しさん:2010/01/30(土) 20:41:44
>>199
それって参照する三角形の枚数を減らせってだけでしょ?

202 :デフォルトの名無しさん:2010/01/30(土) 21:42:34
>>200
確かD3DもOpenGLもそれを採用しているはず。
なので、それで正しいと言えるかもしれない。

しかし俺としては、単純に面法線を平均する方法では
各面の大きさが考慮されず、品質的に問題があると思う。

各面3頂点の外積から作った正規化してない法線を
平均化する方が良いものが出来ると思う。

203 :デフォルトの名無しさん:2010/01/30(土) 23:00:42
いろいろ意見ありがとうございます。
説明が全然足りてませんでした。
下図のようにトライアングルストリップで面を作ってます。
幅は均一で高さだけが違います。
+-+-+
|\|\|
+-+-+
|\|\|
+-+-+
本を見ながら作ったので外積とかがよく分かっていません。
中心の頂点に接する面が6面あるので、面法線と角度を重みとして
平均を求めてました。
外積を調べてみます。

204 :デフォルトの名無しさん:2010/01/31(日) 00:38:10
点を
123
456
789
としたら3角形(452)、(256)、(658)、(854)の面法線の平均にすれば4面でもよさそうな

205 :デフォルトの名無しさん:2010/01/31(日) 01:29:40
どの程度の精度がほしいか?って話だけだよな?
かなりポリゴン多くて1つ1つの法線がテキトーでいいなら
こんなのもテキトーでいいだろ

206 :デフォルトの名無しさん:2010/01/31(日) 05:46:38
>>203
1つ言えることは、、規則的な一様な格子であるなら、
三角形ストリップの向き(|\|\| か |/|/| か)によって計算結果が変わるべきではないから、
ストリップ化後の非対称な6つの三角形をベースにして重み付けを考えるのはあまりよろしくない。

207 :デフォルトの名無しさん:2010/01/31(日) 06:49:02
なんつーかここだと良くあることだけど
部分的なやりたいことじゃなくて最終的なやりたいことも書こうぜ
根本的に本当にそのアプローチで良いのかどうかわからんだろ

これは地形を動的に生成したいとかそういう話?

208 :デフォルトの名無しさん:2010/01/31(日) 11:15:57
>>204
>>206
あ〜なるほど。インデックスを利用してできる三角形を
利用することしか考えていませんでした。参考になります。

>>207
まだ買ってないんですが数値地図(標高メッシュ)を読み込んで
描画させようとしています。なので動的といえば動的です。
描画させるためのテストプログラムを書いています。

209 :デフォルトの名無しさん:2010/01/31(日) 12:38:32
俺だったら、
     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における法線を計算するかな。

210 :デフォルトの名無しさん:2010/01/31(日) 12:48:28
それは良い曲面なのん?

211 :デフォルトの名無しさん:2010/01/31(日) 15:55:18
描画させるのだけが目的ならD3DXで最適化するとかじゃダメなのか?

212 :デフォルトの名無しさん:2010/01/31(日) 20:36:30
そもそも何がしたいんだったっけ・・・?
水面演出?

213 :デフォルトの名無しさん:2010/02/02(火) 02:04:24
簡単なカードゲームを作ってみようと思っています
トランプゲームをC++を作ってみようと思うのですが、DirectXを使うのとWin32APIを使うのはどちらがいいのでしょうか?
トランプゲームはGUIで実装してオンライン対戦できたらと考えています

214 :デフォルトの名無しさん:2010/02/02(火) 02:14:11
共存できない存在ではないからなんとも・・・

215 :デフォルトの名無しさん:2010/02/02(火) 04:32:48
>>213
基本どっちでも良い

Win32APIのBitBltは低速
だが、更新部分のみ書き換えれば良いカードゲームくらいなら大丈夫、かもしれない

毎フレームフル画面更新したり派手なエフェクトを使いたい場合は
BitBltでは処理落ち確定、DirectX推奨

216 :デフォルトの名無しさん:2010/02/02(火) 06:52:21
>Win32APIのBitBltは低速
DDBのBitBltはほぼGPU性能そのものなんだが、いったい何が低速なのか、
>>215が無能の間違いなんじゃないか?

217 :デフォルトの名無しさん:2010/02/02(火) 10:44:29
オレもそう思うw

218 :デフォルトの名無しさん:2010/02/02(火) 11:06:20
vistaではDDBでもアクセラレーション効かないし、
win7ではドライバによって違ってくるあたりがややこしいけどなー

219 :デフォルトの名無しさん:2010/02/02(火) 12:01:32
>vistaではDDBでもアクセラレーション効かないし、
すでにVistaでもWDDM1.1対応になっているんだが、いったいいつの話をしているんだ?

220 :デフォルトの名無しさん:2010/02/02(火) 12:16:06
>>219
公的な資料で「vistaでもGDIのアクセラレーションが有効になる」と書かれているソースってある?


221 :デフォルトの名無しさん:2010/02/02(火) 12:34:31
60フレームで書きかえる用途でもないのに低速とか気にしないでいい

222 :デフォルトの名無しさん:2010/02/02(火) 12:38:50
http://support.microsoft.com/kb/971644

223 :デフォルトの名無しさん:2010/02/02(火) 15:04:05
>>222
そこよく文面変わっているけど、「vistaにWDDM1.1が導入される」と
書かれていたことは一度もないんだよね

224 :デフォルトの名無しさん:2010/02/02(火) 16:27:55
実機でサポートバージョンが確認できるのに、
グダグダ文句をつける意味が分からん。

225 :デフォルトの名無しさん:2010/02/02(火) 16:39:14
http://msdn.microsoft.com/en-us/directx/aa937789.aspx
DXGI1.1の機能をサポートするのにWDDM1.1のドライバが必要になるんだから、
あえて言及していないだけだろ。
理解する力がないのか探す力がないのか、どちらにしてもアホとしか言いようがない。

226 :デフォルトの名無しさん:2010/02/02(火) 16:53:50
まあまあそのくらいで勘弁してやってくださいな

227 :デフォルトの名無しさん:2010/02/02(火) 17:01:41
>DDBのBitBltはほぼGPU性能そのもの

ってほんとに自分で試してから言ってるのか問い詰めたい

228 :デフォルトの名無しさん:2010/02/02(火) 18:12:25
試すまでも無く自明な話

229 :デフォルトの名無しさん:2010/02/02(火) 18:27:05
ププッ
技術者の発言とは思えんw

230 :デフォルトの名無しさん:2010/02/02(火) 18:39:23
知らないなら、教えてくださいって聞けばいいものを
そんな態度だからリアルでも使えないやつなんだよ

231 :デフォルトの名無しさん:2010/02/02(火) 18:43:59
何・・・この状況?

232 :デフォルトの名無しさん:2010/02/02(火) 18:50:52
どちらにせよスレ違い

233 :デフォルトの名無しさん:2010/02/02(火) 19:43:45
>>225
>DXGI1.1の機能をサポートするのにWDDM1.1のドライバが必要になるんだから、
WDDM1.0のvistaでもDXGI1.1が動くのはナゼデスカ?

234 :デフォルトの名無しさん:2010/02/02(火) 21:55:55
ドライバが対応してないとGDI関連のアクセラレーションが効かなくなるだけ。
だから機能をサポートするのにとわざわざ書いているだろ。
本当に理解力が足りないな。

235 :デフォルトの名無しさん:2010/02/02(火) 22:21:13
DirectX8世代のビデオカードでDirectX9の一部の機能が動作しても、
>ナゼデスカ?
とか言い出すんだろうな。もはやどうしようもない。

236 :デフォルトの名無しさん:2010/02/02(火) 22:22:26
>>233は、何を持ってDXGI1.1が動いていると判断したか書くべき

237 :デフォルトの名無しさん:2010/02/02(火) 22:59:15
>>234
DXGI1.1 required WDDM1.1みたいに書いたのは>>225なんだけどさ
結局>>225はPlatform Update==WDDM1.1の答えになっていないってことで良いよね

つか、俺が知りたいのはvistaでもGDIのアクセラレーションが機能するかの一点だけだよ
いくらプロファイル取ってもvista上でのそれを確認できんのよ
俺の中じゃwin7のWDDM1.1とvistaのWDDM1.1は別物って疑惑があがってるんだが
不在の証明ができないもんで公的な資料公的な資料ってわけだ

238 :デフォルトの名無しさん:2010/02/02(火) 23:05:15
>>227
DDBの話はとっくの昔に話題になっているし、そのときにきっちり試しているに決まっているだろ。
メインメモリの消費量を監視してDDBがVRAM上に確保されていることも確認した。
VRAMが使われるかはドライバ依存だが、化石のビデオカードでもない限りまずあり得ない。
話が古いだけで今更当たり前のことなんだが、何でそんなに頭が悪いの?

239 :デフォルトの名無しさん:2010/02/03(水) 00:42:00
ムキになるのは分かるけど、最後の行は要らなかったよね。

240 :デフォルトの名無しさん:2010/02/03(水) 00:51:52
質問です。
DirectXで作った画面って普通に印刷できないんでしょうか?
BMP画像にしてから印刷するという情報しかないんですが、、、
見当違いなこと言ってたらすみません。

241 :デフォルトの名無しさん:2010/02/03(水) 01:01:18
>>239
いやいや、自爆しているという点でその行は重要だよ。
今更当たり前の話なら、VistaのGDIが問題視されることもなかったのにね・・・

>>240
プログラム上での話なら、プリンタDCに描画する必要があるから
一旦バックバッファを読み込んでGDIオブジェクトに変換する必要はあるよ。

ただ遊んでるゲームのスクショを取りたいだけなら、質問するのはここじゃない。

242 :240:2010/02/03(水) 01:15:42
ありがとうございます。
今作っているアプリケーションでDirectXを使っているんですが、
印刷すると真っ白で出てきてしまって困っていたところです。
よくわかっていないのですが、GDIオブジェクトというのは、
例えばどういうものでしょうか?

243 :デフォルトの名無しさん:2010/02/03(水) 01:34:26
>>242
「印刷すると」と言っているが、今は実際どんな方法で印刷を試みているの?

244 :デフォルトの名無しさん:2010/02/03(水) 07:07:07
>>241
>今更当たり前の話なら、VistaのGDIが問題視されることもなかったのにね・・・
当たり前のことが当たり前に出来ないから問題になって改善されたんだろう。
まったく流れが読めてないね。

245 :240:2010/02/03(水) 07:09:01
>>243
今は、MFCアプリケーションを作ったときにデフォルトでできる印刷機能で
試みてます。
申し遅れましたが、印刷したいと思っているのは、Direct2Dを使って
描画した画面です。DirextX(3D)では、DCに描き込んでいないので、印刷できない
ことは予測がついたのですが、今回は、Dirext2Dで提供されているDCに
書き込む用の(?)レンダーターゲットを使ってやってみたので、印刷
できるかと期待したのですが、やはり無理でした。

246 :デフォルトの名無しさん:2010/02/03(水) 07:13:49
印刷以前に画像を別のサーフェイスにコピーしたりは出来ているのか?
もし出来ていないなら印刷云々以前の問題。

247 :240:2010/02/03(水) 07:21:12
>>246
別のサーフェイスにコピーというのがどういうことかよくわかっていない
のですが、MSDNを見る限り、描画した画面を内部で画像として持つことは
できるようです。画像として保存することもできるようです。

248 :デフォルトの名無しさん:2010/02/03(水) 11:39:09
>>244
で、vistaでGDIアクセラレーションは効くようになったんですか?

249 :デフォルトの名無しさん:2010/02/03(水) 11:53:14
ドライバ次第

250 :デフォルトの名無しさん:2010/02/03(水) 12:38:19
WDDM1.1が認識されている状態なら効く。
すでに各所でベンチマークもとられているのに、何でそのぐらい調べないんだろう?


251 :デフォルトの名無しさん:2010/02/03(水) 12:53:11
そもそもvistaのWDMアーキテクチャがGDIをシステムメモリサーフェイスにリダイレクトしている以上
(win7でもWDDM1.0ならこの挙動になる)そこから変更加えなきゃいけないはずなんだけど、
グラフィクスドライバの更新だけでGDIアクセラレーションが有効なるってのがひっかかるんですよ

>すでに各所でベンチマークもとられているのに、
あーそれ気になるなぁ。探しても見つからないので教えてくらはい

252 :デフォルトの名無しさん:2010/02/03(水) 13:24:27
ドライバだけじゃなくてシステム側のアップデートが入っただろ。
このスレに出ている話すらまともに読んでいないのかよ。

253 :デフォルトの名無しさん:2010/02/03(水) 13:29:38
で、そのアップデートのどこにvistaでもWDDM1.1が有効活用されますとか
WDMが変更されましたって書いてあるの?

254 :デフォルトの名無しさん:2010/02/03(水) 13:53:39
>グラフィクスドライバの更新だけでGDIアクセラレーションが有効なるってのがひっかかるんですよ
言っていることがさっきと変わっているぞ。

255 :デフォルトの名無しさん:2010/02/03(水) 14:08:45
リリースノートにDXGI1.1を追加と明言されている上、
実際にシステム上で対応ドライバがWDDM1.1として認識される。
しかもWDDM1.1が必須のDirect2Dもサポートに含まれている。

つまり1+1が2なのが辞典に載っていないから信用できないということか?
一人で一生やっていればいいんじゃないか。

256 :デフォルトの名無しさん:2010/02/03(水) 14:30:42
Windows7の時点でGDIのアクセラレーションにWDDM1.1が必要という話は、
microsoftが公式でさんざん出している。
vistaのアップデートのリリースノートには、
今更理解できない馬鹿などいるはずがないから、わざわざ書かなかったんだろう。
しかし残念ながら馬鹿がいたようだけど。

257 :デフォルトの名無しさん:2010/02/03(水) 15:00:21
>リリースノートにDXGI1.1を追加と明言されている上
DXGI1.1と何をイコールで結び付けているのかわかりません

>実際にシステム上で対応ドライバがWDDM1.1として認識される。
でもWDMが相変わらずシステムメモリにGDIをリダイレクトしてたら意味無くない?

>しかもWDDM1.1が必須のDirect2Dもサポートに含まれている。
や、別に必須ってわけじゃないよ

>わざわざ書かなかったんだろう。
仮にvistaのWDMがwin7相当に変更されたとすると、
ウィンドウ毎のシステムメモリ抑制までvistaに導入されたことになるよね?
開発者どころか一般向けにも喧伝しそうなものだけど・・・

258 :デフォルトの名無しさん:2010/02/03(水) 16:37:25
何このスレ

259 :デフォルトの名無しさん:2010/02/03(水) 16:37:57
DirectX初心者質問スレ

260 :デフォルトの名無しさん:2010/02/03(水) 16:59:19
うちの2D3Dのエクスペリエンスが突然あがったのはこれのせいもあるの?

261 :デフォルトの名無しさん:2010/02/03(水) 18:46:07
D2D1DCRenderTargetっていうのでできそうなできなさそうな・・・。
http://msdn.microsoft.com/ja-jp/windows/ee427969.aspx

262 :デフォルトの名無しさん:2010/02/03(水) 18:50:47
Direct2DはWDDM1.1対応でない場合はWARPで代用することは可能だが、
とても実用速度にはならない。

263 :デフォルトの名無しさん:2010/02/03(水) 19:19:01
WARPなんて使わんよ? GDI+に丸投げしたとしても誤魔化せそうな部分で
3DレンダリングするわけでもないのにWARPを使う理由なんてどこにあるの?
GDI互換の部分で割食うだけだよ。

264 :デフォルトの名無しさん:2010/02/03(水) 21:08:39
へえ。そうなのかw

265 :240:2010/02/04(木) 00:02:28
>>261
そのD2D1DCRenderTargetを使ってやってみたんですけど、できませんでした。。。

266 :デフォルトの名無しさん:2010/02/04(木) 01:53:52
>>247
結論的には、いちおう客観面の問題です。
一般的な、構成要件に故意を含み、かつ、
不法領得の意思を窃盗罪の構成要件に要求する立場を前提とすると、
窃盗罪の”基本犯”の構成要件として
客観的要素・・・(窃取)行為、(占有移転)結果、因果関係
主観的要素・・・故意、不法領得の意思
があるわけですが、その”教唆犯”の構成要件としては、
客観的要素・・・教唆行為、(基本犯の構成要件充足)結果、因果関係
主観的要素・・・(以上の客観的要素に対する)故意
が要求されることになって、教唆犯にとっては、
基本犯の不法領得の意思とは、
教唆犯の結果の一部として、基本犯が不法領得の意思を持つこと、および、
教唆犯の教唆時の故意として、基本犯が不法領得の意思を持つように教唆する故意のあること、
として反映されなければなりません。

267 :デフォルトの名無しさん:2010/02/04(木) 01:54:58
誤爆です。
すいません。

268 :デフォルトの名無しさん:2010/02/04(木) 02:12:22
>>266-267
GDI云々で論争している人ですね、わかります。

269 :デフォルトの名無しさん:2010/02/04(木) 12:08:19
DirectXを基礎から勉強しようと思っているのですが、オススメな書籍はありますか?
現在はProfessionalゲームプログラミング 2ndEditionを買ってみようかと思っているのですが

270 :デフォルトの名無しさん:2010/02/04(木) 13:42:54
このスレでも検索すれば?

271 :デフォルトの名無しさん:2010/02/04(木) 18:16:57
>>269

>>77-78

272 :デフォルトの名無しさん:2010/02/04(木) 22:49:40
そもそも、なんでMicrosoftのSDKサンプルっていつもグチャグチャで読みにくいんだろうな。
あれこそが初心者入門で有るべきなのに

273 :デフォルトの名無しさん:2010/02/05(金) 00:32:16
ならそのサンプルを綺麗に書き直してくれよ。

274 :デフォルトの名無しさん:2010/02/05(金) 00:42:34
初心者向けに書いてないだろMSのサンプルは。
アレを見て分らないなら素直にそういう本を買えばいい。

DirectX10以降は日本人のライターじゃ技術についていけなくなったのか
知らんけど和書で解説してる本は工学社の1冊しか見たこと無いけどな。

275 :デフォルトの名無しさん:2010/02/05(金) 00:43:36
ただ単に11の普及をまってるんだろう

276 :デフォルトの名無しさん:2010/02/05(金) 00:47:09
どうだろうな。
工学社がDirectX10のを置換して11対応にしたやつを出して終わりそうな気がする。

277 :デフォルトの名無しさん:2010/02/05(金) 00:47:58
初歩的な質問すみません、
「透過テクスチャを貼ったポリゴン」を、forループで50近く描画しています。
1.普通に描画すると透過ポリゴン同士が後ろのを潰しておかしくなる
2.SetRenderState(D3DRS_ZENABLE, FALSE);をすると透過ポリゴン同士は潰しあわないが
  結局全てのz値が壊れるせいか、他との描画順序を入れ替えてもアベコベな事になる
となって困っています。
これはforループではなく、全部の描画順序をちゃんと並べて描画していくしか
対処方法は無いのでしょうか?

278 :デフォルトの名無しさん:2010/02/05(金) 00:55:38
半透明でなければアルファテストというのもあるよ

279 :デフォルトの名無しさん:2010/02/05(金) 01:10:28
推察通り。半透明な物体は、自分でソートして下から順に書いていくのが基本。

280 :デフォルトの名無しさん:2010/02/05(金) 01:36:15
俺もソートなんて重そうな処理使っていいのかな、とか思ってたけど
フレームごとに毎回ソートするわけでもないし全然問題なしだった。


281 :デフォルトの名無しさん:2010/02/05(金) 13:26:13
1000個とかでもなければソートなんて全然重くないから大丈夫だよ。

282 :デフォルトの名無しさん:2010/02/05(金) 18:18:26
>>278-281
ありがとうございます。
アルファテストは魅力的ですが、対応してるかの問題が有るのですね。
今回はソートを組んでみようと思います。
ご助言、ありがとうございました

283 :デフォルトの名無しさん:2010/02/05(金) 21:20:33
D3DXFontをカスタマイズして使ってたらだんだん重く感じるようになったので、
一週間ほどかけて独自のフォントレンダラーを作って差し替えた。
10倍以上早くなった。
さようなら、先週までのオレ。

284 :デフォルトの名無しさん:2010/02/05(金) 23:18:36
アルファテストに対応してない環境って10年以上前の環境だろw

285 :デフォルトの名無しさん:2010/02/05(金) 23:59:34
2年くらい前にαテストとソートで速度比較したことあるけど
びっくりするくらい差がなくてしょんぼりした記憶あるわ
ソートはなんの最適かもしてないクイックソートだったからさすがに枚数増えると辛かったけど。
いまのCPU、GPUだとどうなのかなー

286 :デフォルトの名無しさん:2010/02/06(土) 00:02:37
つーかソートしようがしまいがアルファテストはONにしろよ。
特定の用途でOFFにするんじゃない限りはフィルレートの無駄遣い。

287 :デフォルトの名無しさん:2010/02/06(土) 00:11:54
つーか、半透明を扱い始めると、アルファテスト無しでは話にならんのだが。

288 :デフォルトの名無しさん:2010/02/06(土) 00:52:08
といいますか、半透明は使わないのがベストな選択だよね

289 :デフォルトの名無しさん:2010/02/06(土) 01:55:27
すべての状況においてαテストかけると
抜き色が1色とかならいいけど
最初からα値が入ってるテクスチャを描画しようとするときにおかしくならないか?

290 :デフォルトの名無しさん:2010/02/06(土) 02:02:11
亀だけど>>266の誤爆具合と、何イっちゃってるのかわからんすぎてワロタ

291 :デフォルトの名無しさん:2010/02/06(土) 02:03:59
>>289
いや、全然。

292 :デフォルトの名無しさん:2010/02/06(土) 07:47:53
>>289
おまえさんは半透明描画するときにα=0まで描画するのかよって話。

293 :デフォルトの名無しさん:2010/02/06(土) 08:02:10
α=0でもz値は書き込みたいときってあるじゃん

294 :デフォルトの名無しさん:2010/02/06(土) 10:24:45
それは

> 特定の用途でOFFにする

ってことになるんじゃね

295 :デフォルトの名無しさん:2010/02/07(日) 01:21:22
HLSLについて学ぼうかと思っているのですが、SDKの中にあるサンプルなどを見て初っ端から躓きました。
頂点シェーダやピクセルシェーダの関数のようなものの引数や戻り値はどういった仕様なのでしょうか?
描画しようとしている情報が引数に入ってきて、戻り値に変換した値を返すのは分かるのですが、
そもそも取得したり返すことが出来る値がどれだけあるのかや
それらの値を正しく入出力するためにはどのようにすればいいのかが分かりません。
HLSLを解説しているサイトや本は中身の処理の説明はあるのですが上記についてほとんど触れられていませんでした。



296 :デフォルトの名無しさん:2010/02/07(日) 02:01:51
>>295
その質問じゃお前が何が解かってないかすら分かってないということしかわからん
もう少し具体的に聞いてくれ

http://msdn.microsoft.com/ja-jp/library/bb944006(VS.85).aspx

297 :デフォルトの名無しさん:2010/02/07(日) 02:20:57
でもこれがこうであれがああでってなかなか書いてないのは事実だな
http://msdn.microsoft.com/ja-jp/library/cc373165.aspx

俺も
やってみる→あれ?だめ?→やってみる→おお、いけた!→やってみる→あれ?ダメじゃん
の繰り返しでなんとか組んでるや

298 :デフォルトの名無しさん:2010/02/07(日) 02:33:01
>>295が知りたいのはHLSLシェーダのセマンティックの話じゃないのか?
http://msdn.microsoft.com/ja-jp/library/bb509647(VS.85).aspx

299 :295:2010/02/07(日) 02:49:19
レスありがとうございます。
>>296にレスしようと色々書いてたら>>298がずばりな答えでした。
マルチテクスチャのときにはDevice.SetTextureの第一引数に数値をTEXCOORD[n]のnの部分に入れて操作
・・・みたいな形になるんですよね。
じゃあPOSITION1ってどの頂点なんだろ などと調べることが増えたので楽しくなってきました。

300 :295:2010/02/07(日) 03:06:05
個人的なメモレス
>>299
ttp://www.mokehehe.com/assari/index.php?HLSL

サンプルの見方が変わったのであれこれ理解出来だしたのはいいものの、
>>297のような状態になりそうでちょっと怖いですね。
でもHLSLはそれでも良さそうな感じもしますし、うーん。

301 :デフォルトの名無しさん:2010/02/07(日) 04:40:05
3dcgもやったら理解深まったよ

302 :デフォルトの名無しさん:2010/02/07(日) 11:22:25
すみません
現在、120x40のテクスチャを50枚Create〜Set〜描画してしまっています。
マテリアルの切り替えは非常に重いと聞きますから、これは論外なんだろうと思い
この際、種別に全てのテクスチャを1枚に押し込んでしまおうと思いました。

しかし大きすぎると非対応の場合、動作すらしないと聞き不安なのですが、
テクスチャのサイズの上限はみなさんお幾つ位にしてらっしゃるでしょうか?
1024x1024くらいは全然平気だったりするでしょうか。

303 :デフォルトの名無しさん:2010/02/07(日) 11:26:12
2,3年前のGPUが8192対応してんのに1024がダメってVoodoo2とかの時代の話だぞ。

304 :デフォルトの名無しさん:2010/02/07(日) 12:16:42
>>302
dxinfoで調べろ。
でも最終的に、制限は体で覚えるんだ!

305 :デフォルトの名無しさん:2010/02/07(日) 12:20:51
>>295
試行錯誤をやっていいのは、十分に資料がある時と、逆に資料を入手しようがない場合。
確かにHLSLには文法や型や仕様についてちゃんと説明されたサイトがMSDN含めて存在しない。
これ買っとけ。
DirectX9 DirectX Graphics (I・O BOOKS)

306 :デフォルトの名無しさん:2010/02/07(日) 14:41:33
試行錯誤も何も
頂点定義がちゃんと分かってるなら悩むとこでもなんでもない気がするが

307 :デフォルトの名無しさん:2010/02/07(日) 15:45:40
基本を疎かにしていきなりシェーダーから入ろうとするからそうなんじゃね?

308 :デフォルトの名無しさん:2010/02/07(日) 17:29:28
基本とか基礎とか言っても初めてやることはどこが基本なのか分からないと言うのもあるかも。
プログラミングの基礎としてDirectXが、DirectXの入門としてHLSLが使われている時代ですしね。

309 :デフォルトの名無しさん:2010/02/07(日) 18:06:54
>>306
それは固定シェーダー時代の経験があるから言えること。
いきなりゼロからやったらHLSL上の変数と親プログラム上で
その変数の値を設定してあげるところひとつとっても分かりにくいし、
techniqueの設定変更に関しては固定シェーダー時代の変更用のAPIと区別がつかないし、
まあ迷いどころは沢山あると思うよ。

ネット上で検索してすぐにひかかる日本語のサイトは
あまりに基本的なレベルの説明で終わってて
実用のレベルには届かないことが多いしね。

310 :デフォルトの名無しさん:2010/02/07(日) 18:14:56
>>303-304
ありがとうございます。
dxinfo こんなありがたいサイト様が有ったんですね。紹介感謝っ orz
2048x2048で開発を進めて行こうと思います。

311 :デフォルトの名無しさん:2010/02/07(日) 18:44:26
>>309
マジで?検索かけてt-potが見つからなかったとはいわせねー

312 :デフォルトの名無しさん:2010/02/07(日) 20:06:44
309じゃないけどt-potも当時としては実用的かもしれないけど今となってはなんとも言いがたいね。
基礎ともいえることなので覚えて損はないが、
説明するにも今の時代に合った方法があるんじゃないかと思ってしまう。
C++の時代にアセンブラから説明しているような感覚なのかな。

313 :デフォルトの名無しさん:2010/02/07(日) 20:39:40
AutoGenerateMipmapが使えないGPU(Intel GMA 950)に対して、
手動で高速にミップマップを生成するのはどうやるのがいいんだろう?

314 :デフォルトの名無しさん:2010/02/07(日) 20:45:11
あらかじめ生成済みのデータを読み込む

315 :デフォルトの名無しさん:2010/02/07(日) 20:57:55
D3DXFilterTexture

316 :デフォルトの名無しさん:2010/02/07(日) 21:03:15
HLSLの詳細な仕様なんてMSDNに全部のってるだろ・・・
アレ見て分らなかったら何見てもわかんねぇだろ。

317 :デフォルトの名無しさん:2010/02/07(日) 21:24:02
>>316
そうか?
techniqueに指定できる属性や与えられる値の種類とか、
TextureSampleの属性とか、MSDN調べても載ってないと思うが。

318 :デフォルトの名無しさん:2010/02/07(日) 21:28:31
>>317
この一覧で何が足りないんだ?
http://msdn.microsoft.com/en-us/library/ee418548(VS.85).aspx

techniqueは厳密にはHLSLではなくエフェクトの範疇だな

319 :デフォルトの名無しさん:2010/02/07(日) 21:37:43
>>315
それは既に試したが、遅すぎて使い物にならんかった。

320 :デフォルトの名無しさん:2010/02/07(日) 21:40:53
そう、MSDNはエフェクトとHLSLを分けて記述しているから分かり難い。
そこに気づかないと、情報が足りていないように感じるのかもしれない。
あとHLSLは、コンパイル先のasmシェーダの知識があることを前提としているんで
(例えば、oDepthの仕様など)
やはりこれも気づかないと、躓く原因になるかもしれない。

321 :デフォルトの名無しさん:2010/02/07(日) 21:44:40
>>319
D3DXで遅すぎるんなら、どの道CPUじゃ駄目だろう。
HDRのトーンマッピングの工程が、
GPUでガウスフィルタを使ってミッブマップを作る内容なんで
参考にしてみては?


322 :デフォルトの名無しさん:2010/02/07(日) 23:32:43
>>312
マジで?
HLSLの仕様が変わりすぎて書いてある内容実行できないとかそんなのだったらわかるけど

323 :デフォルトの名無しさん:2010/02/08(月) 00:32:54
実際今から始めるとなると覚えることが多いから、時間的に何か切る事になる。
もちろん1から全て学ぶのに越したことはないけど、それは努力とか根性など精神論が通じる状態じゃないよね。
いかに多くの技術に出会い、それを身に付けることが出来るかを考えたらt-potは悩むところ。
前衛的なサイトではないので、あくまで物事に詰まったら見る程度のサポート的存在に感じる。

324 :デフォルトの名無しさん:2010/02/08(月) 06:46:43
directx11の解説サイトがあればなぁ

325 :デフォルトの名無しさん:2010/02/08(月) 13:28:00
初歩的な質問すみません。
現在板ポリ1枚1枚をCreateVertexBuffer 〜 DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
としているのですが、DrawPrimitiveは重い処理と聞き削減しようと
D3DPT_TRIANGLELISTを使って板ポリを纏めてしまおうと思いました。

しかしこれを纏めてしまうと、透過テクスチャを描画する場合などに描画順序を操れず、
後ろに有るポリゴンが潰れる気がするのですが・・。潰れるのを避ける手立ては有るでしょうか?
特にエフェクト等、瞬間的に結構な数を描画する場合の負担が気になり、
纏められるなら纏めた方が良いと思うのですが、これは間違っているのでしょうか?

326 :デフォルトの名無しさん:2010/02/08(月) 14:31:48
>>325
DrawIndexedPrimiteveを使って実行直前に並べ替えたら?

327 :デフォルトの名無しさん:2010/02/08(月) 14:48:56
>>326
こんな関数が有ったのですね。早速テストしてみようと思います。
ありがとうございましたっ orz

328 :デフォルトの名無しさん:2010/02/08(月) 16:00:50
質問です。
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です。

330 :デフォルトの名無しさん:2010/02/08(月) 16:27:20
おまえは11のどの機能を使いたいのだ?

331 :328:2010/02/08(月) 16:38:17
>>330
うーん知識不足で申し訳ない。
どの機能を使いたいというのはないのですが(というよりまだよく知らない)
出来れば、開発したゲームがXP(や2000)・Vista・Windows7上で問題なく動作するようにしたいのです。

そのためにはSDKのバージョンをどう選べばいいか悩んでいるところです。

332 :デフォルトの名無しさん:2010/02/08(月) 16:52:31
アホかおまえは

333 :デフォルトの名無しさん:2010/02/08(月) 16:54:12
DirectX SDK (February 2010) インストールして Direct3D 9.0c 使えよ

334 :デフォルトの名無しさん:2010/02/08(月) 16:59:00
>>328
後方互換を取りたいなら下位バージョンに拘束される。
Dx11は下位互換があるのでXPだったら9.0cを使えばそれ以上のバージョンでも動かないことも無い。

335 :328:2010/02/08(月) 17:24:14
レスどもです。
最新版のSDKで9.0c使えばVistaとWindows7上でも動くということですね。
というかXP上で開発するならそれしか選択肢がないということですかね?
ともかく助かりました。

336 :デフォルトの名無しさん:2010/02/08(月) 17:35:30
そういうこと。

337 :デフォルトの名無しさん:2010/02/08(月) 17:42:31
9.0のソフトがVistaなどで動かなかったら、今まで出たソフトは全滅になるわな
ちょっと考えればわかりそうなものなのに

338 :328:2010/02/08(月) 17:49:27
>>337
確かにそうなのですが動作保障しないものや
Vista対応とわざわざ書いてあるゲームも結構見たので・・。

よく見るとwikiにも書いてありますね。。
SDKはXP上だと10や11は使えない→9.0cを使うしかない。ということですね。
下位互換があるなら7.0はどうなんでしょう。やはり最新版が無難かな。
スレ汚しすみませんでした。ありがとうございました。

339 :デフォルトの名無しさん:2010/02/08(月) 17:57:23
Vista対応はDXだけの問題じゃねえよ
7.0?なぜ使いたいんだ?理由を言えって
あと下位互換?わかってて言ってんの?ふざけてんの?

340 :328:2010/02/08(月) 18:06:17
>>339
なるほど。
理由は最初に書きましたが、2Dゲームを作りたいのでDirectDrawのある7.0までの方が製作しやすいとかあるのかなと(おそらく最新版の方がいいとは思いますが)。
ある程度調べたりはしましたが・・まだ分かってないこともあると思うので勘違いしてそうなら指摘してほしいです。
うーん自分はなにか色々勘違いしているようですが、断じてふざけてはないw 迷惑かけます。すみません。

341 :デフォルトの名無しさん:2010/02/08(月) 18:09:40
>断じてふざけてはないw 断じてふざけてはないw 断じてふざけてはないw 断じてふざけてはないw

おまえは俺を不快にする事しかできないのか

342 :328:2010/02/08(月) 18:13:00
>>341
ごめんなさい。まさかふざけてると言われるとは思わなかったので
ただの照れ隠しです・・。
色々教えてくれてるのに申し訳ない。

343 :デフォルトの名無しさん:2010/02/08(月) 18:17:43
二点リーダーや三点リーダーの後に句点をつけるな

344 :デフォルトの名無しさん:2010/02/08(月) 18:22:26
日本語の校正もしてくれる、良いスレだ。

345 :328:2010/02/08(月) 18:22:47
>>343
以後気をつけます・・。

346 :デフォルトの名無しさん:2010/02/08(月) 18:24:30
なんだこの流れ

347 :デフォルトの名無しさん:2010/02/08(月) 18:34:20
クラス設計のスレは無いですか??

348 :デフォルトの名無しさん:2010/02/08(月) 18:46:19
ゲーム製作技術板にある・・。・・
DirectX使うならまずゲームだろうから覗いて見ては・・どうだろうか・。?
ゲーム用とじゃないとしても、いかにもゲームに使うっぽく聞けばよろし。・・・

349 :デフォルトの名無しさん:2010/02/08(月) 19:28:13
・・。・・。・・。・・

350 :デフォルトの名無しさん:2010/02/08(月) 19:45:39
>>348-349
何か文字化けしてるだけに見えてきた。

351 :デフォルトの名無しさん:2010/02/08(月) 20:01:23
フフフ醂フ辟辟辟醂フ

352 :デフォルトの名無しさん:2010/02/08(月) 20:24:44
さっそく つかっているな
そうやって ひとびとのこえに みみをかたむけるのだ

353 :デフォルトの名無しさん:2010/02/08(月) 20:42:52
ネット世紀末覇者がいるスレはここですか?

354 :デフォルトの名無しさん:2010/02/08(月) 21:40:55
>>352
分かち書きをしてる奴はキチガイ
これは譲れない

355 :デフォルトの名無しさん:2010/02/09(火) 00:01:36
>>348
ありがとう。でも書き込み余り無いからここで質問してみます。



356 :デフォルトの名無しさん:2010/02/09(火) 01:02:15
やあ俺はパチンコをやめて最新PCを買う金を貯めることにするゾ!!
DX9ともおさらばさ!!みんな応援してね!!

357 :デフォルトの名無しさん:2010/02/09(火) 01:18:06
パチンコをやるプログラマなんているわけないだろ

358 :デフォルトの名無しさん:2010/02/09(火) 01:31:26
だってあれ操○され○る○で○るようにしてあ○もんねw(ここだけの話)
絶対勝てない勝負をする奴は馬鹿

359 :デフォルトの名無しさん:2010/02/09(火) 02:47:37
ある3Dソフト用のファイルをD3DXLoadMeshFromXみたいに読み込みたいんですけど、どうやって実装すればよいですかね、、、
パーサーは提供されているんでシーンルートからどんどん読んでいくだけなんですけど。
最終的にほしいのは頂点バッファとインデックスバッファとマテリアルがメンバの構造体。

LoadMeshFromFile(ファイル名, メッシュ*) {
メッシュ* pMesh = new Mesh();
マテリアル *pMaterial = new Material();
LoadMesh(pMesh){}
LoadMaterial(*pMaterial){}

}
こんなんでいいんですかね??俺は馬鹿ですね

360 :デフォルトの名無しさん:2010/02/09(火) 05:41:31
DXUTの使い方が詳しく乗ってるサイトありませんか?

361 :デフォルトの名無しさん:2010/02/09(火) 05:51:06
MSDNのヘルプが一番詳しいんじゃない?


今まで見た中で
DXUTとか↑の方ででてたシェーダー初歩とか一番初心者向けの本は
DirectX9実践プログラミング(WindowsVista対応版)だと思うなぁ

ただしこの本読んでもゲームやらアプリやらが作れるようになるわけではないのであしからず

362 :デフォルトの名無しさん:2010/02/09(火) 06:21:44
DirectXを知るには結構良い本だとは思うけど
情報量が多すぎてある取捨選程度択できる人じゃないと
いっぱいいっぱいになっちゃうか「ふーん」で終わりになってしまうことが多そう
あと、今俺の持ってるのだと
DXUTの仕様が古くてコールバック関数のパラメーターとかが現行バージョンと違ってた気がする
たいした違いじゃないから修正は容易だけど

363 :デフォルトの名無しさん:2010/02/10(水) 00:32:53
シェーダー(描画を担当するもの)とメッシュ情報って分けてる?


364 :デフォルトの名無しさん:2010/02/10(水) 02:54:03
同じもの、特にアニメーションするものを複数同時に描画したい時に
どっちが便利か考えれば分かるだろ?

365 :デフォルトの名無しさん:2010/02/10(水) 03:13:49
>>364
じゃあ例えば
シェーダークラスのrender関数の引数にメッシュデータを渡して描画するという感じのほうが便利ですよね

366 :デフォルトの名無しさん:2010/02/10(水) 03:17:05
>>358
普通に審査通ってる機械はまともだよ。まぁ儲かるかどうかは知らんが。
演出が始まった時点で当たり外れは確定してるからボタン操作は無意味だけどね

367 :デフォルトの名無しさん:2010/02/10(水) 06:15:08
何年か前に7号作ってたけどそんなに酷くはなかったけどなぁ
最近の事情はしらんけど
チームの他のメンバーは結構好きな人多かった

368 :デフォルトの名無しさん:2010/02/10(水) 07:53:01
DXSDK Feb2010来てるよ

369 :デフォルトの名無しさん:2010/02/10(水) 13:45:29
このスレでも>>333で出てる

370 :デフォルトの名無しさん:2010/02/10(水) 14:56:46
またSlimDXが後方非互換になるな……。
軽く欝だ。

371 :デフォルトの名無しさん:2010/02/10(水) 15:42:37
そこらへんはSlimDXの使いにくいとこだわなw

372 :デフォルトの名無しさん:2010/02/11(木) 04:01:37
DirectX11はじめてみようとしてるけど、エフェクトでBeginPathとかやらない方向性なの?
頂点シェーダ矢ピクセルシェーダを直接使うの?

373 :デフォルトの名無しさん:2010/02/11(木) 06:35:46
右手座標系で作られたデータを表示したらテクスチャ座標が正しく表示されません
どうやって変換すればいいでしょうか?

374 :デフォルトの名無しさん:2010/02/11(木) 06:42:25
>>373
http://marupeke296.com/DXG_No15_AttentionCoordinate.html

375 :デフォルトの名無しさん:2010/02/11(木) 06:46:49
>>374
ありがとう
解決しました 1から引けばいいんですね

376 :デフォルトの名無しさん:2010/02/11(木) 11:06:29
>>372
ttp://www.twin-tail.jp/wiki/index.php?%E3%83%9D%E3%83%AA%E3%82%B4%E3%83%B3%E3%81%B8%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86
このへん見とけばわかるんじゃね

377 :デフォルトの名無しさん:2010/02/11(木) 20:04:27
DirectXを使ってお絵かきソフトでやるように点や線を描くにはどうすれば良いんでしょうか?

378 :デフォルトの名無しさん:2010/02/11(木) 20:49:39
>>377
テクスチャに色情報を書き込む

379 :デフォルトの名無しさん:2010/02/11(木) 21:16:19
まともな詳しい回答をお願いしますm(__)m
378は無視します。

380 :デフォルトの名無しさん:2010/02/11(木) 21:19:35
テクスチャをロックする
色情報を書き込む
以上

アンドゥーとかしたいなら使えないけど
そんなこと書かれてない1行質問じゃこれ以上答えようがないなぁ

381 :デフォルトの名無しさん:2010/02/11(木) 21:24:51
なんかものすごいお手軽簡単関数があるとか期待しちゃってるんじゃない?

382 :デフォルトの名無しさん:2010/02/11(木) 21:35:37
すみません>>379>>377じゃありません。
回答ありがとうございます。テクスチャに書き込むっていう方法はなんとなくわかっていたのですが
>>381の人がいうようにもっとお手軽な方法があるのではと気になって質問しました。
ただ点を描画するのがやたら面倒な気がしたので。

もしかして、幅×高さ分の四角いポリゴンを貼り付けるなんていうことをやるんじゃないかとか。

383 :デフォルトの名無しさん:2010/02/11(木) 21:40:56
DirectXに曲線を引く方法はない
どうしてもやりたいなら
マウスの位置から逆算してテクスチャに直接色を書き込むか
これだとマウスの移動速度がフレーム更新より速い場合、間が途切れてしまうので
一定間隔ごとにマウス座標を記録して
間をCatmull-Romスプライン曲線とかで自前で計算して間を補完してドットを打つしかない

384 :デフォルトの名無しさん:2010/02/11(木) 21:50:58
お絵かきソフトはどっちかって言うとDirectXよりOpenGL向きだな

385 :デフォルトの名無しさん:2010/02/11(木) 22:15:24
そう・・・か?
DirectX11ならComputeShaderもあるしかなり色々いけると思うが。

386 :デフォルトの名無しさん:2010/02/11(木) 22:25:21
どっちも向いてない

387 :デフォルトの名無しさん:2010/02/11(木) 22:30:03
それ以前にDirectX11ならDirect2Dを使うべきところだと思うが。


388 :デフォルトの名無しさん:2010/02/11(木) 22:36:41
フォトショはCS4から一部機能にOpenGLを組み込んだね

389 :デフォルトの名無しさん:2010/02/12(金) 22:05:40
で?

390 :デフォルトの名無しさん:2010/02/12(金) 22:44:40
頭の悪いやつに限って、短絡的な返事しかできないよなw

391 :デフォルトの名無しさん:2010/02/13(土) 00:06:36
なんだと

392 :デフォルトの名無しさん:2010/02/13(土) 02:02:00
>>388を知らずに>>386で煽っちゃって悔しまぎれに>>389なんじゃないのか?

393 :デフォルトの名無しさん:2010/02/13(土) 08:38:47
ha?

394 :386:2010/02/13(土) 11:57:24
言葉が足りなかったのは認める
>386で自分が言いたかったのは、
曲線を描く場合はDirectX、OpenGL、どちらも向いてない
ということ
OpenGL+曲線 でググると何か引っかかるみたいだが…

>>388,392
CS4でOpenGLを取り込んだ事と
ペイントソフトでやるような点や線の描き方の話
この二つに何か関係あるの?

一応言っとくけど389、391、393は自分じゃない

395 :デフォルトの名無しさん:2010/02/13(土) 12:58:00
煽り返されるのが嫌なら煽らなければいいのに

396 :デフォルトの名無しさん:2010/02/13(土) 13:18:36
なんでお前らそんなにピリピリしてるの?

397 :デフォルトの名無しさん:2010/02/13(土) 13:41:37
ん?

398 :デフォルトの名無しさん:2010/02/13(土) 13:59:48
だからDirect2D使えって。

399 :デフォルトの名無しさん:2010/02/13(土) 15:28:53
新しい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)でいい気がしますが、回転、移動操作に対応した行列
乗算の順序が右側にかけていくか、左側にかけていくかの違いが生じるのでは
ないか? という気もします。

402 :デフォルトの名無しさん:2010/02/13(土) 20:20:51
解釈などない。固定機能の描画時の行列 D3DTS_PROJECTION x D3DTS_VIEW x D3DTS_WORLD の三番目というだけ。
前二つに単位行列を入れておき、D3DTS_WORLDに全部自前で計算した結果だけ入れる使い方もあった。

403 :デフォルトの名無しさん:2010/02/13(土) 20:32:15
はあ

404 :デフォルトの名無しさん:2010/02/13(土) 21:31:10
>>401
結局なにが聞きたいのかよくわからないな

そもそも3Dモデルを回転させるための行列と考えてるのが良くないんじゃ?
全ての頂点座標がワールド原点を中心に回転してるから
結果としてモデルが回転してるように見えてるだけ

当然回転行列をかける前の行列に移動オフセット値が入ってれば結果が変わる

405 :デフォルトの名無しさん:2010/02/13(土) 22:14:54
>>401
本題とはちょっとずれるけど
ココ見るとワールド行列とは何ぞやという理解が深まるよ
行列の中身が何を示してるのか分かればそんな質問でなくなるはず

http://marupeke296.com/DXG_No39_WorldMatrixInformation.html

406 :デフォルトの名無しさん:2010/02/13(土) 22:21:25
質問が理解できないのですか?
回答者として失格ですね。
ああ質問して損したなあ

407 :デフォルトの名無しさん:2010/02/13(土) 22:31:12
貴方が損しようと得しようと、俺らには何の関係もないですからな
赤の他人なわけですし
ダメモトで質問し、もし良回答が得られれば儲けもの、くらいの気持ちでいなされ

408 :デフォルトの名無しさん:2010/02/13(土) 22:32:16
いままでの流れからして本人じゃないでしょ

409 :デフォルトの名無しさん:2010/02/13(土) 22:34:26
スルー推奨
なんでム板ってIDでないの?

410 :デフォルトの名無しさん:2010/02/13(土) 22:44:07
>>401
仕様に関してはドキュメントを見れば?
解釈がどうのこうの書いてあるのか
俺は知らないけどね

411 :デフォルトの名無しさん:2010/02/13(土) 23:24:07
この程度か… まぁ、平日になれば質問の意味がわかる人がいるかもしれない。

>>405

ありがとう。でも、その程度のことはわかった上で質問してます。

412 :デフォルトの名無しさん:2010/02/13(土) 23:34:56
>ベクトルの回転変換行列であろうと座標変換行列であろうと

>行列乗算の順序が右側にかけていくか、左側にかけていくかの違い

どうも、単純に行列積の理解が足りていないだけのような。


413 :デフォルトの名無しさん:2010/02/13(土) 23:36:29
>>411
ここはクズの集まりだから質問内容さえ理解できないということだろう
あきらめて他へ行った方が手っ取り早く的確な回答を得られる

414 :デフォルトの名無しさん:2010/02/13(土) 23:46:44
釣り針がでかいというか
かなり痛い子がいるというか
>>411とか文章読んでてかなり恥ずかしいわw

これはまさしく厨二病

415 :デフォルトの名無しさん:2010/02/13(土) 23:49:33
クズ呼ばわりも癪なので
とりあえず、アイちゃんの脳に
テレパシーで回答すると、

>>401
(3)でいい。

>回転、移動操作に対応した行列 
>乗算の順序が右側にかけていくか、左側にかけていくかの違いが生じるのでは 
>ないか? という気もします。 
これは、いまいち意味不明だが
右から掛けるか、左から掛けるかは、
転置行列か否かによる。
OpenGLは右から左、
Direct3Dは転置なんで左から右

416 :デフォルトの名無しさん:2010/02/13(土) 23:54:09
あれ、これって適当に「(3)でいいよ」って答えれば
勝手に納得してお引き取り願えるパターンじゃね?

417 :デフォルトの名無しさん:2010/02/13(土) 23:56:10
だなw

418 :デフォルトの名無しさん:2010/02/14(日) 00:06:43
今、ゲームのBGMを鳴らすのは何が主流なの?
色々規格があってよくわからん・・・・

419 :デフォルトの名無しさん:2010/02/14(日) 00:16:42
oggがベター

420 :デフォルトの名無しさん:2010/02/14(日) 00:21:18
midi

421 :デフォルトの名無しさん:2010/02/14(日) 00:22:12
beep

422 :デフォルトの名無しさん:2010/02/14(日) 00:43:24
モールス信号が主流

423 :デフォルトの名無しさん:2010/02/14(日) 01:19:07
頂点宣言ってメッシュの種類によって動的に作れますけど、
それに対応するシェーダー(エフェクト)ってあらかじめ用意していく必要がありますよね?
そこらへんのクラス設計ってどうすべきか知りたいです。
lambertシェーダー(スキンなし)、lambertシェーダー(スキンあり)、lambertシェーダー(法線マップ有り)
こんな感じで何個も用意しておくんですかね?

424 :デフォルトの名無しさん:2010/02/14(日) 01:27:51
>>423
・エフェクトファイルを複数用意する
・一つのエフェクトファイルに複数のテクニックを詰め込んで切りかえる
・一つのテクニックでパスで効果を分けて切り替える

状況に応じて使いやすいほうで

425 :デフォルトの名無しさん:2010/02/14(日) 01:48:00
今、DirectX9のサンプルを触ってるんですが
TutorialやText3Dでは50fpsくらいしか出ないのにPIXGameDebuggingだと120fpsくらい出ます。
(何もしないプログラムの方が早いと思ってましたがそうではないんですね^^
同じbeginnerなんですが、次に学ぶサンプルとしてはハードルが高い気がします。
早いDirectXプログラムを作るためのキーワード、参考書など教えていただけないでしょうか

426 :デフォルトの名無しさん:2010/02/14(日) 02:08:10
>>418
ファイルフォーマットとAPIどっちを聞いてるの?

427 :デフォルトの名無しさん:2010/02/14(日) 02:45:26
DirectX10の最新版をダウンロードしようとして
三日探し回ったんですが、Runtimeとか9以外はまったく見つかりませんでした。
だれか直接ダウンロードできるページのURLを貼ってください。
どうかよろしくお願いしますm(__)m

428 :デフォルトの名無しさん:2010/02/14(日) 02:54:47
>>401
文章からみるに座標系が全く理解できてない
ローカル座標とワールド座標ってのを知らないとダメ
後はキーワードで勝手にググレ

429 :デフォルトの名無しさん:2010/02/14(日) 03:26:42
>>427
"10の最新版"が必要ってのなら判らないけど
http://msdn.microsoft.com/ja-jp/directx/aa937788.aspx
ここの最新版なら9,10,11のサンプルがあったよ
vistaでないと動かない気もするけど…

430 :デフォルトの名無しさん:2010/02/14(日) 03:53:23
>>429
ありがとうございます・・・?
次はもっとはやくお願いしますm(__)m

431 :デフォルトの名無しさん:2010/02/14(日) 04:39:46
24時間スレを監視してくださいのコピペ思い出した

432 :デフォルトの名無しさん:2010/02/14(日) 09:42:17
荒らしが居ついたのかこのスレ

433 :デフォルトの名無しさん:2010/02/14(日) 10:09:54
>>415

回答ありがとう。
directXは(行列*列ベクトル)の演算と違って(行ベクトル*行列)の演算
だから行列を転置にしなければならない。したがって、行列の積ではかける
順序が逆になる、というのはあなたの指摘どおりだ。

ところがベクトルを回転させる回転変換行列か、座標軸(もの指し)を
回転させた座標系間の座標変換行列かによっても乗算の順序は違う。

>>412 >> 414 >> 428
わかりもしないくせに偉そうなこと言うな雑魚! ひっこんでろ

>>416
お前も黙ってろ。

(1)の解釈で納得していたんだが、(2)の解釈でないと説明できない
問題が発生したんで(と、その時は思ってた)。

DirectXでは回転、移動の操作順ごとに行列を右側にかけていくよう
だから(そして転置行列の積だから)、(1)の解釈でいいようだ。

ただ、DirectXの関数が(1)(2)のどちらの考えにたって実装されているのか
確認したかったから聞いたのに >>410 の馬鹿が仕様を調べれば、とアホな
回答をしているのには閉口した。そんな事しか言えないなら黙ってろや。


わかっている人からのアドバイスには感謝するが、アホ相手するのも
面倒だからもう書かない。

アホはまた何か書くだろが、相手しない。

434 :デフォルトの名無しさん:2010/02/14(日) 10:17:47
>>433
もう少し言い方を考えなよ。
そんなんじゃ敵を増やすだけじゃん。

行列に関しては「DirectXだから」というわけではない。
別にOpenGLだってそういう風に行列ライブラリ作ればそうなるし。
Vector4本で表現できて扱いやすいから行列があの形になってるんだよ。

右から左って直感的にも逆になって分りづらいし。
シェーダーに渡すときは高速化の都合上転置が必要になるけど。
dotじゃなくmul/madで同じ命令数できるからまぁ気分の問題だろうな。

435 :デフォルトの名無しさん:2010/02/14(日) 10:20:09
ね? 本当に勝手に納得して帰っていったでしょw

436 :デフォルトの名無しさん:2010/02/14(日) 10:20:18
>>433
わかってないのお前だけだと思うよw
入門書の一冊でも買えばいいのにごたごたごたごたこんなところで
恥かいてえらそうにしてる人間みるのはさすがに見苦しいな
ナニがアホの相手だ
SDKについてくる単純なモデルも表示できねぇくせに(爆笑w)えらそうなこというなw

ていうかお前、人のいうこと素直に聞けないならPGなんてさっさとやめろよ
まったく見込みねぇからw

座標系も理解できない奴にナニをどう教えろってんだ
このすっとこどっこい

437 :デフォルトの名無しさん:2010/02/14(日) 10:24:13
>>425
TutorialやText3Dがfps低いのは垂直同期がオンになっているから

438 :デフォルトの名無しさん:2010/02/14(日) 10:32:20
ドキュメント等で使用を確認しろよw
まじでドキュメント見ろw

439 :デフォルトの名無しさん:2010/02/14(日) 10:38:42
ドキュメントはみない
これは譲れない

440 :デフォルトの名無しさん:2010/02/14(日) 10:42:50
まずドキュメントを見てすべて確認するのが先だろ・・・。
その上でアレが分らないコレが分らないつーのが順番として正しいんだが・・・。

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

443 :デフォルトの名無しさん:2010/02/14(日) 14:51:56
>>441
何を探しているの?
プログラム板で聞いてるんだし、SDKだよね?

444 :デフォルトの名無しさん:2010/02/14(日) 15:22:22
>>441
何を探しているの!?

445 :デフォルトの名無しさん:2010/02/14(日) 15:32:22
>>441
最新版に9、10、11のサンプルがあるってことは
最新版に9、10、11のライブラリがあるってこと

DirectX 9、10が最後に更新されたバージョンとかはしらね

446 :デフォルトの名無しさん:2010/02/14(日) 18:47:31
>>426
APIです。
以前はDirectShowにmp3突っ込んで鳴らしてました。
一応、鳴ってるのでこれで良いのかもしれませんが・・・。

447 :デフォルトの名無しさん:2010/02/14(日) 19:31:26
DirectX11からDirect2Dは使えないよ。
DirectX10からでないと利用できない。

448 :デフォルトの名無しさん:2010/02/15(月) 08:13:52
ボーン付きメッシュファイルでtiny.xより小さいデータってあります?公式の。

449 :デフォルトの名無しさん:2010/02/15(月) 08:25:24
あ、やっぱいらないです

450 :427 ◆BnFNx9vEUQRt :2010/02/15(月) 23:36:57
>>423
>>424
あ、いや、開発用のSDKではなく普通にゲームをプレイするようの
Directx10です。よろしくお願いします。

451 :デフォルトの名無しさん:2010/02/15(月) 23:51:02
>>450
ごめん意味わかんない。
何がしたいの?

452 :デフォルトの名無しさん:2010/02/16(火) 00:19:48
>>443>>444にレスしたかったんじゃない?

453 :デフォルトの名無しさん:2010/02/16(火) 00:24:27
DirectX エンド ユーザー ランタイム Web インストーラ
http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&DisplayLang=ja

February 2010

454 :デフォルトの名無しさん:2010/02/16(火) 00:33:31
今、自分でライブラリ的なのを作ってるのですが
どうも板ポリを描画するのが上手く行かないです。
症状としては、
マウスを動かしたりキーを押したりすると消える。
データをアップしたので、
誰かアドバイスをいただけると助かります。

http://uproda55.2ch-library.com/004942.zip.shtml
pass:dx9


455 :デフォルトの名無しさん:2010/02/16(火) 01:06:32
自己解決しました

456 :デフォルトの名無しさん:2010/02/16(火) 04:08:01
なんかほんとに自己解決したのか
荒らしが即レスつけてるのか分からんな

457 :454 ◆8VxhNQQKaU :2010/02/16(火) 06:04:45
454ですが、まだ解決してません。

自己解決したようにとられてるっぽいので念のため。

458 :デフォルトの名無しさん:2010/02/16(火) 06:15:11
デバッグを人に頼るな

459 :デフォルトの名無しさん:2010/02/16(火) 06:42:58
>>457
コンパイル通らん
entry.h(37) : fatal error C1083: include ファイルを開けません。'M3D.h': No such file or directory

460 :デフォルトの名無しさん:2010/02/16(火) 06:44:01
FF13ぽいゲームを作ろうとしていますが、自己解決しました

461 :デフォルトの名無しさん:2010/02/16(火) 07:17:38
>>457
喧嘩売ってんだろ

462 :デフォルトの名無しさん:2010/02/16(火) 08:09:29
>>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;
}

463 : ◆BfLJHkvw9E :2010/02/16(火) 08:40:38
>>458
確かに、自分でデバッグはするものだと思います。
アップしたデータの"VertexRaster.h"と同じ方法で描画する形式なのに
正しく動かなくて、
自分なりにソースを読み返して怪しいところは書き換えてみたり、
調べてみたつもりなんですが何がいけないのかわからずじまいで、
頼ってしまいました。すいません。

>>459
entry.h 37行目 削除でお願いします。
協力してくださったのに、不手際があってすいません。
よろしければお願いします。

>>461
気に触れてすいませんでした。

464 : ◆BfLJHkvw9E :2010/02/16(火) 08:48:22
>>462
レスありがとうございます。
以後気をつけます。ご指摘ありがとうございます。

465 :デフォルトの名無しさん:2010/02/16(火) 16:46:08
ほんと宿題を2chに投げる奴多すぎ。
最近のゆとりは自分で解決する努力をほんとしないよな。

466 :デフォルトの名無しさん:2010/02/16(火) 19:08:52
古いグラボだと2のn乗のテクスチャ以外読み込めないということがありましたが
バックバッファは320x240や640x480などといったサイズで問題があったとは聞いたことがありません。
メモリ上は2のn乗に収まる四角形になっているのかは分かりませんが
そうだとすればCreateTextureが融通が利かなかっただけなのでしょうか?
ブラーをかけようとしてレンダリングターゲット(テクスチャ)を用意したのはいいものの、
バックバッファは16:9でテクスチャは1:1で自分で設定してたからえらいことに(´・ω・`)

467 :デフォルトの名無しさん:2010/02/16(火) 19:41:57
今から晩御飯食べます。
その間に回答よろしくです(´・ω・`)

468 :デフォルトの名無しさん:2010/02/16(火) 19:50:26
食べ終わりました。
回答まだでしょうか(´・ω・`)

469 :デフォルトの名無しさん:2010/02/16(火) 19:54:43
日本語でおk

470 :デフォルトの名無しさん:2010/02/16(火) 20:06:42
四角と思い込んでるところが勘違いの元

471 :466:2010/02/16(火) 20:39:49
>>470
ん?テクスチャは四角形だけどもヘッダー情報があるから見た目以上にメモリを食っているという話でしょうか。
ということはバックバッファを確保する際のヘッダーとテクスチャのヘッダーが違うため
バックバッファは自由にサイズを決めれてもテクスチャが2のn乗のサイズ出ないとだめ・・・ということに?

472 :デフォルトの名無しさん:2010/02/16(火) 20:44:18
いいから質問の要点を言えよ
なにが聞きたいのかわからねぇよ

473 :デフォルトの名無しさん:2010/02/16(火) 20:46:45
>>471
"2のn乗"は二次元じゃないぞっと。

474 :デフォルトの名無しさん:2010/02/16(火) 20:53:01
エスパーすると
テクスチャのレンダリングターゲットに描画するときに
バックバッファと同じ射影行列を使ったから本体とブラーが一致しなかったってことじゃね?
テクスチャに描画するときはアス比を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乗のサイズでなくても大丈夫なのでは?と思ってしまい、質問させていただきました。

476 :デフォルトの名無しさん:2010/02/16(火) 21:32:22
>>419
の話で、oggがベターというのを聞いて
ライブラリでデコード→メモリ上に展開→セカンダリバッファに入れて再生
というのは出来たのですが、

ゲームつくろー!
ttp://marupeke296.com/GameMain.html
というサイトで紹介しているような、
スレッドをもう一つ生成→ストリーム再生
という方法が難しく、理解できていません

こういうストリーム再生のコードは自分で書くのが普通ですか?
それともなにか便利なライブラリをつかってるのが主流なのですか?


477 :デフォルトの名無しさん:2010/02/16(火) 21:47:35
>>475
>320x240や640x480など

このサイズが2のn乗に反してると思う理由はなんなのよ。

478 :デフォルトの名無しさん:2010/02/16(火) 21:52:29
そもそも2のn乗が使えない環境が現存する環境ではまずないから気にするだけ無駄。
なぜ2のn乗が効率的に優れていたのかは自分でラスタライザーからエンジンを書けば分る。

479 :デフォルトの名無しさん:2010/02/16(火) 21:53:35
>>475
そういうことが聞きたいならここで聞くよりググったほうが速いだろ

・テクスチャが2のn乗の四角形
ハードの仕様
メモリの帯域幅の都合上2のn乗でしかブロック転送できなかった
現在は制限が無いとはいえ一番高速に動作するのは2のn乗
いまだって見かけ上は2のn乗でなくても内部的には余分に2のn乗で確保されてるビデオカードもある


・バックバッファはそういった制限がなかった
制限がなかったわけではなくむしろ逆
ハードのドライバ能力で許可されたサイズのバッファしか作れなかった
つまり320x240*8itや640x480*8bit等のサイズでしか作れなかったというのが正しい
いまみたいに任意に作れるようになったのも最近だ

480 :デフォルトの名無しさん:2010/02/16(火) 22:16:57
すみません
LPDIRECT3DTEXTURE9 型で作ったテクスチャを今まではそのまま名前指定で作っていました。
そこでテクスチャの生成は1つの関数を作って纏めようと思いました。

外部に関数を作り、そこにLPDIRECT3DTEXTURE9 型のポインタを送り
CreateTextureの第7引数に送る所までは良かったのですが、
いざLockRectして書き込もうとすると、ピリオドでもアロー演算子でも
「左側はクラス、構造体、共用体でなければなりません or ジェネリック型へのポインタではありません。」
等エラーが出てしまいます。

これはテクスチャを扱うイロハを理解してないからなのでしょうか?
それとも私のC++の理解が曖昧なのが原因なのでしょうか。
何かご指摘を頂けると幸いです。

481 :466:2010/02/16(火) 22:16:59
レスありがとうございます。
バックバッファとテクスチャってそこまで大きな違いがあったんですね。
テクスチャのほうばかり気にしていましたが、いつの間にかそこまで気にする必要のない時代になっていたり
バックバッファのほうが制限がきつかったなど知らなかった情報を得られて良かったです。


482 :デフォルトの名無しさん:2010/02/16(火) 22:26:01
>>480
C++どころかC言語の知識すら怪しい
その外部とやらはLPDIRECT3DTEXTURE9型が何であるのがちゃんと定義されてるのか?

483 :デフォルトの名無しさん:2010/02/16(火) 22:28:28
>>481
いずれにしろ気にしなくていいし知ったところで今となっては使い道のない知識だけどな。

ここ数年のハードウェアならINTEL製でもない限り
サイズが変だからってそれが原因で速度が落ちるような事はない。
処理速度をきにする状況ならもっと他にやるべき事がある。

484 :デフォルトの名無しさん:2010/02/16(火) 22:44:18
>>482
ありがとうございます。
むむ・・・。LPDIRECT3DTEXTURE9型で作ったテクスチャを、名前で普通に指定すれば正しく動作するのですが、
アンバサンドを付けて参照送りし、LPDIRECT3DTEXTURE9*で受け取って扱うとLockRectでエラーが出るので・・
扱う部分をポインタに変える以外は一切手を加えてないのですが・・うーん orz
とりあえずポインタを使うのを恐がり過ぎて何か勘違いも有りそうですし、再勉強が必要そうですね;

485 :デフォルトの名無しさん:2010/02/16(火) 23:13:09
>>484
そゆことか
LPDIRECT3DTEXTURE9はそれ自体がポインタ型なので
これを参照渡しした場合はダブルポインタ扱いになる
つまり参照先であつかうには

LPDIRECT3DTEXTURE9* texなら
(*tex)->LockRect

486 :デフォルトの名無しさん:2010/02/16(火) 23:14:33
>>484

MyCreateTexture(LPDIRECT3DTEXTURE9* texture) {
  CreateTexture(256,256,0,0,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,texture,NULL);
  *texture->LockRect(); //これ?
}

こういうこと?

487 :デフォルトの名無しさん:2010/02/16(火) 23:20:17
コンパイルエラーも消せない馬鹿はここに来るな

488 :デフォルトの名無しさん:2010/02/16(火) 23:22:56
>>1が読めない人もこのスレには不要ですよ

489 :デフォルトの名無しさん:2010/02/17(水) 00:24:25
>>476俺は自作。
再生までできてるならあともうチョイ!
ようはDirectSoundにイベントを設定してイベントがシグナルになったらデータの続きを読めばいいだけ
うまく設計しとけばogg以外のフォーマットも読み込み処理だけ多態で変えればストリーミングの仕組みが使えるから便利よ

490 :デフォルトの名無しさん:2010/02/17(水) 00:39:05
>>489
そっかぁ・・・
自作してる人もいるってことで励みにもなった、ありがとう
もし作るときに参考にしたサイトがあれば教えてほしいです
難しいけど自作するとやっぱ勉強になりそうなんでがんばってみまする



491 :デフォルトの名無しさん:2010/02/17(水) 01:17:22
>>490
イイヨ〜
「Ogg Vorbisを楽しむ」でググりなされ

492 :デフォルトの名無しさん:2010/02/17(水) 10:06:45
DirectSoundはもう古いと思うが。
XAudio使えばストリームの機構も簡単に作れるよ。

493 :デフォルトの名無しさん:2010/02/17(水) 12:06:25
>>491
サンクス!
参考にしますぜ!
ストリーミングについてはゲームつくろー!
を参考にしたんですか?


494 :デフォルトの名無しさん:2010/02/17(水) 12:08:40
>>492
なるほど!
こういう方法は楽そうでいいですね!
これも検討してみまする
ありがとう

495 :デフォルトの名無しさん:2010/02/17(水) 12:24:54
DirectXを使ったピアーツーピアーの通信ゲームを作ろうと思ったのですが、
DirectPlayが廃止されていることを知りました。
この場合Winsockを使用するのがベストなのでしょうか?

それとこの本がWinsockを学ぶのに良いと思ったのですがどうでしょうか?
結構古い本でDirectPlayのことが書いてあるのが引っかかりますが。
ttp://store.shopping.yahoo.co.jp/7andy/31608673.html

496 :デフォルトの名無しさん:2010/02/17(水) 12:32:20
ウンコした後答えるねえ

497 :デフォルトの名無しさん:2010/02/17(水) 13:51:50
お待ちしております。

498 :デフォルトの名無しさん:2010/02/17(水) 16:49:27
ゲームで解像度を選べるのってあるじゃないですか。
あれってどういう仕組でやってるんでしょう?

1 描画するものを一つ一つ解像度に合わせて位置や大きさを調整する
2 テクスチャにレンダリングして、解像度に合わせてテクスチャを拡大表示する
3 その他

499 :デフォルトの名無しさん:2010/02/17(水) 17:48:52
>>498
どんなゲームを想定してるのか知らないが
1はどんだけ手間だよだし
2は解像度上げる意味がない
2Dにしろ3Dにしろ普通は解像度あげるとより外側まで描画されるように作るんじゃねーの?

500 :デフォルトの名無しさん:2010/02/17(水) 18:36:33
>>498
基本的に1だね。
サイズより位置、特に配置の仕方さえ注意していれば特に問題ないはず。
面倒なら最悪表示座標を倍掛けするだけで、当たり判定とかそのままで使える。
3Dなら何の問題もないけどね。
高解像度設定で文字が読みづらいというゲームもあるけど、これも対応が面倒なら放置。

501 :デフォルトの名無しさん:2010/02/17(水) 18:36:45
普通は1だよ

502 :デフォルトの名無しさん:2010/02/17(水) 18:37:27
>>498
なにか根本的な勘違いしてる

3Dだったら
同じ射影行列で描画してる限り、いくらビューポートが広がっても
描画するピクセル数が増えるだけで描画される範囲は一緒だ

2Dでも正射影で基本のサイズに固定しておけばビューポートのサイズを気にする必要はない
画面サイズにあわせて自動で拡大縮小される

2Dで座標変換済み頂点で書いてたらちょっと面倒かもね
画面サイズによって再配置や大きさ調整のしくみを仕込んどく必要がある

503 :498:2010/02/17(水) 20:03:27
2Dと3Dの両方で考えてましたが、勉強になりました。
ありがとうございます。

504 :デフォルトの名無しさん:2010/02/18(木) 03:53:17
>>485-486
ありがとうございます。
なるほど、ダブルポインタになってたんですね。勉強すべきはそこ と。
感謝っ orz

505 :デフォルトの名無しさん:2010/02/18(木) 11:28:35
四角いポリゴンにテクスチャを貼りつける方法で画像を表示させようとしています。
ポリゴン作成には各々の頂点の座標・色・テクスチャの座標が必要ですよね。
普通、最初に作成しておいたポリゴンを行列で変換する事で画像の移動等を行う、と
どこかで読んだのですがいわゆるテクスチャアニメーションをさせたい場合は
やはり毎回頂点作成を行わなければならないのでしょうか。

506 :デフォルトの名無しさん:2010/02/18(木) 11:34:59
UVをトランスフォームしてもいいし、頂点を書き換えてもいい。
やりたいようにやれ。

507 :デフォルトの名無しさん:2010/02/18(木) 11:51:12
レスありがとうございます。
2Dでそんな事に悩むのはあほかもしれませんが、
取り合えずUVトランスフォームを調べてきます。

508 :デフォルトの名無しさん:2010/02/18(木) 12:17:59
>>454
ローカル変数はちゃんと初期化しないとダメだよ
ZeroMemory(&mViewPort, sizeof(D3DXMATRIX));

509 :デフォルトの名無しさん:2010/02/18(木) 13:27:45
マトリックスを0クリアっておかしくねぇか・・・
単位化するのが普通じゃね。

510 :デフォルトの名無しさん:2010/02/18(木) 13:33:08
ZeroMemoryで初期化していいのは構造体だけじゃなかった?

511 :デフォルトの名無しさん:2010/02/18(木) 14:09:53
typedef struct D3DXMATRIX : public D3DMATRIX

512 :デフォルトの名無しさん:2010/02/18(木) 14:22:12
仮想関数持ってたら死ねるね

513 :デフォルトの名無しさん:2010/02/18(木) 21:46:15
素直にD3DXMatrixIdentity使えよ

514 :デフォルトの名無しさん:2010/02/18(木) 23:52:28
すみません、テクスチャの生成モードの
D3DFMT_A8R8G8B8 と D3DFMT_X8R8G8B8 にはどういう差が有るのでしょうか。
透過色を作りたいのですが、予期しない透過が起きたりで混乱しています。

515 :デフォルトの名無しさん:2010/02/19(金) 01:03:35
>>514
If the source texture contains fewer than four components, defaults are placed in the missing components.

とある
D3DFMT_X8R8G8B8ではα値は無視される

516 :デフォルトの名無しさん:2010/02/19(金) 01:10:18
何もしないワールド変換行列って要素が全部0ではなくて
1000
0100
0010
0001
だから
D3DXMatrixIdentity()
で初期化がいんでねぇの?



517 :デフォルトの名無しさん:2010/02/19(金) 01:16:43
>>515
ありがとうございます。 X8R8G8B8はそもそも透過が無理だったんですね。
ついでにピクセル毎に転送するビット数の記述も3と4でミスってた所為で可笑しな事になってた様です。
解決できました。ありがとうございましたー orz

518 :デフォルトの名無しさん:2010/02/19(金) 02:10:42
ZeroMemory(&俺の脳みそ, 0.1);

519 :デフォルトの名無しさん:2010/02/19(金) 02:53:42
サイズちっさww

520 :デフォルトの名無しさん:2010/02/19(金) 12:58:19
SecureZeroMemoryだと最適化でも落とされないし
WinMainCRTStartupでもサイズ全然増えないぞ

521 :デフォルトの名無しさん:2010/02/19(金) 13:04:49
で?

522 :デフォルトの名無しさん:2010/02/19(金) 13:23:33
知っておいて損はないだろ

523 :デフォルトの名無しさん:2010/02/19(金) 15:50:03
勝手にD3DXMATRIXをゼロフィルする無神経さが問題なの
ゼロで埋めていいのか保障ないでしょ
こんなの常識だよ、いまどき保育園児だって知ってるよ


524 :デフォルトの名無しさん:2010/02/19(金) 16:05:56
天才幼稚園児現る。

525 :デフォルトの名無しさん:2010/02/19(金) 16:38:14
はあ?

526 :デフォルトの名無しさん:2010/02/19(金) 16:44:40
まとめ

D3DXMATRIXは構造体で仮想関数も持っていない。
ゼロで埋めることは問題ないが、意味がない。
幼稚園児とか言っている奴は、自分の意見の補強に実情のない例を出す馬鹿。
以上。

527 :デフォルトの名無しさん:2010/02/19(金) 16:49:07
幼稚園児は冗談だろww
スルーしろって

528 :デフォルトの名無しさん:2010/02/19(金) 16:58:21
D3DXMATRIXって関数持ってるからクラスなんじゃないの?あれ

529 :デフォルトの名無しさん:2010/02/19(金) 17:00:53
構造体もメンバ関数は持てるぞ。
C++の基礎中の基礎。

530 :デフォルトの名無しさん:2010/02/19(金) 17:07:24
>>528
>>511

531 :デフォルトの名無しさん:2010/02/19(金) 17:50:01
というより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()〜 { } はどういう意味ですか?
名称も分からないのでググりようも無いです。

533 :デフォルトの名無しさん:2010/02/19(金) 18:54:22
>>532
コンストラクタ初期化子じゃないの?

534 :デフォルトの名無しさん:2010/02/19(金) 21:23:10
ただのコンストラクタでの初期化だな。
C++の入門書を読むのが良いと思う。

535 :デフォルトの名無しさん:2010/02/19(金) 21:49:43
私はそういう知ったかぶりのようなコーディングが嫌いなのでC言語で書きます

536 :デフォルトの名無しさん:2010/02/19(金) 21:49:57
>>491
いろいろ試行錯誤して悩みましたが、
おかげでoggストリーム再生ができました!
いろいろまだ整えないといけない部分がありますが、がんばった甲斐がありました
改めて、
ありがとう
マルチスレッドはいろいろ考えなければならないことが多いようなので
しっかり調べて整えていきまする

537 :デフォルトの名無しさん:2010/02/20(土) 04:37:40
>>532
デフォルトコンストラクタなら書かなくても同じなのに、
何か中途半端な言語ヲタっぽい気持ち悪いコードだな。

538 :デフォルトの名無しさん:2010/02/20(土) 05:22:11
>>532の例では初期化子を書かないと初期化されないわけだが

539 :デフォルトの名無しさん:2010/02/20(土) 05:42:39
スーパー言語ヲタの>>538が手本を見せてやってくれ。

540 :デフォルトの名無しさん:2010/02/20(土) 06:17:08
>>538
>>537は、id(), firstChild(), sibling() のように
引数なしでデフォルトコンストラクタを明示的に呼んでも無意味だろっていう意味ね。
初期化子を書かなくてもデフォルトコンストラクタは勝手に呼ばれるんだから。
(つうか、この3つは整数とポインタだからデフォルトコンストラクタも存在しないか。)

541 :デフォルトの名無しさん:2010/02/20(土) 06:55:35
コンニャクラピュタ

542 :デフォルトの名無しさん:2010/02/20(土) 08:39:02
POD型は明示しないと初期化されないんじゃなかったっけ
id(), firstChild(), sibling() を省くと変数が初期化されない旨の警告が出る

543 :デフォルトの名無しさん:2010/02/20(土) 09:08:09
規格上初期化されないことになってるし
普通のコンパイラならそうなってる

544 :542:2010/02/20(土) 09:27:47
>>543
だよね レスありがとう

545 :デフォルトの名無しさん:2010/02/20(土) 09:50:01
いいよ、お礼は

546 :デフォルトの名無しさん:2010/02/20(土) 09:50:56
>>542
逆に id() と書くと id はどう初期化されるの?

547 :デフォルトの名無しさん:2010/02/20(土) 10:21:33
組み込み型の初期化だがあんまり知られてないのかもな
id()、firstChild()、sibling()は0で初期化される
もしbool型がならfalseになる
テンプレートで役に立つ場面がある

548 :デフォルトの名無しさん:2010/02/20(土) 10:56:20
そうなんだ知らなかった

549 :デフォルトの名無しさん:2010/02/20(土) 11:01:32
C++の入門書に普通に載ってるよ

550 :デフォルトの名無しさん:2010/02/20(土) 11:07:23
入門書に普通に載ってるのか、すごいな

551 :デフォルトの名無しさん:2010/02/20(土) 11:37:01
>>454のソースを今更ながら見たんだがエラーチェック全然してないじゃないか
そんなんじゃバグ取りなんて出来ないよ

#pragma comment( lib, "dxerr9.lib" )
#include <dxerr9.h>

HRESULT hr = device->CreateVertexBuffer( /* 省略 */ );
if( FAILED( hr ) )
{
DXTRACE_ERR( TEXT("IDirect3DDevice9::CreateVertexBuffer"), hr );
/* 省略 */
}

こう書いておけばデバッグ時に何処で何がどういう理由で失敗したのかが
デバッグウィンドウに出力されるぞ

552 :デフォルトの名無しさん:2010/02/20(土) 11:37:26
クラスと違って基本型は int i; と int i(); では挙動が違うのね。
勉強になったわ。

553 :デフォルトの名無しさん:2010/02/20(土) 11:41:16
でも int i(); だと関数の宣言になるから注意

554 :デフォルトの名無しさん:2010/02/20(土) 21:52:18
リソースからxファイル読み込んでD3DXLoadMeshFromXに渡したいんだけど、
リソースの部分は「XFILE DISCARDABLE "test.x"」っていう書き方で特に問題ないですよね?
どうしてもD3DXLoadMeshFromXでエラーが出てしまう…

555 :デフォルトの名無しさん:2010/02/20(土) 22:10:26
ファイルから読み出す関数なんだからエラーが出て当たり前だろ。
何故問題がないと思えるのか、全く理解できない。

556 :デフォルトの名無しさん:2010/02/20(土) 22:32:00
FindResource関数 +
SizeofResource関数 +
LoadResource関数 +
LockResource関数 +
D3DXLoadMeshFromXInMemory関数

もしくは
D3DXLoadMeshFromXResource関数
を使えばいいよ

557 :デフォルトの名無しさん:2010/02/20(土) 22:53:18
まだやっていないのですが、JPEGやDDSなどのテクスチャにヘッダ情報を付加したいと思っています。
ファイルの先頭からnバイト進んだところからは元のJPEGやDDSのデータです。
D3DXCreateTextureFromFileExではファイル名の指定ですが
画像の先頭部分(=ヘッダの終端)のアドレスを渡して読み込ませることは出来ますか?
もしかして圧縮データを解析して1ピクセルずつ設定していくことになるのですか?
開発環境はWindowsXPでDirectX9です。

558 :デフォルトの名無しさん:2010/02/20(土) 22:57:06
ddsの構造なんて簡単なんだぜ

559 :デフォルトの名無しさん:2010/02/20(土) 23:10:11
>>557
ここ参考になるかも
ttp://marupeke296.com/DXCLS_MemoryMappedFile.html

560 :デフォルトの名無しさん:2010/02/20(土) 23:35:01
ありがとうございます。
>>558
よくよく考えたら結局展開して使うので全てDDSにして解析すればできそうですね。
>>559
このアプローチは初めて知りました。
テクスチャ以外にも使えそうなので身につけようかと思います。

561 :デフォルトの名無しさん:2010/02/21(日) 00:04:22
リソースから読み込む関数が別にあったんですか…
リソースも読めると思ってました。
ありがとうございます。

562 :デフォルトの名無しさん:2010/02/21(日) 02:44:32
Direct3D9から、10すっとばして11に移行しようとしてるのですが
IDirect3D9::GetAdapterDisplayMode()と同じような機能が見つかりませんでした。
DXGIになってだいぶ変わった部分だとは思うのですが、
何故消えてるのかよくわかりません・・・
理由をご存知の方いましたら教えてください。

563 :デフォルトの名無しさん:2010/02/21(日) 04:08:22
>>562
デバイスの管理部と実際の描画部がきっちり仕分けられたので
アダプタが持ってる情報はアダプタインターフェースに問い合わせる形になったっぽい
IDXGIAdapter:EnumOutputs -> IDXGIOutput::GetDisplayModeListあたり? 自分もいまいち勉強中

564 :デフォルトの名無しさん:2010/02/21(日) 07:16:35
>>562
このへんかね
ttp://www.twin-tail.jp/wiki/index.php?%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%A8%E7%94%BB%E9%9D%A2%E3%81%AE%E3%82%AF%E3%83%AA%E3%82%A2

565 :デフォルトの名無しさん:2010/02/21(日) 18:44:03
最新のDirectX SDKでDirectX Audioを使いたいと思い,過去のSDKバージョンから
必要なヘッダファイルを取ってきたのですが、
GUID_DirectMusicAllTypes
CLSID_DirectMusicLoader
IID_IDirectMusicLoader8



等が未解決エラーがでてしまいます
これらはどこのlibファイルに記述されているのでしょうか?
探しても見当たらなくて困っています。


566 :デフォルトの名無しさん:2010/02/21(日) 18:53:16
>>565
Direct SDKはそのまま全体を参照するように設定しないとダメ。

567 :デフォルトの名無しさん:2010/02/21(日) 19:06:31
>>563 >>564
ありがとうございます、GetDisplayModeListは既に見てたんですが列挙するということで
現在の画面モードとは関係ないと思って無視してました。
そもそも現在の画面モードはどうでもよくなってるのでしょうか(256色モードとかもう無くなってるし
フルスクリーンの場合、既定で現在のデスクトップ解像度を使うとかあったので
Windowモードでも同様なのかもしれませんね。
まだ実際に動作を見るところまで行ってないのでなんともですが;;
TwinTailのを参考にしてWindowモードで動かそうと思うので、何かわかったら報告します。
どうもありがとうございました。

568 :デフォルトの名無しさん:2010/02/21(日) 20:44:37
>>566
libファイルすべて参照したらいけました。
ありがとうございました。

569 :デフォルトの名無しさん:2010/02/22(月) 02:11:31
見えないポリゴンを表示しないって処理はどうやってるんでしょうか(Occlusion Cullingっていう技術?)



570 :デフォルトの名無しさん:2010/02/22(月) 04:02:37
見えないポリゴンの定義が曖昧です

透明なポリゴン?
ポリゴンの裏側?
手前にすでになんらかのオブジェクトがあるポリゴン?
カメラの範囲外のポリゴン?

571 :デフォルトの名無しさん:2010/02/22(月) 04:06:00
>>570
すみません。曖昧でしたね。。。

>手前にすでになんらかのオブジェクトがあるポリゴン?
これのことです。

572 :デフォルトの名無しさん:2010/02/22(月) 09:12:12
Occlusion Cullingって言ったらわかる気もするが?
DrawPredicatedってサンプルがまさにそれ
サンプルだけ見ても使い方は分かりにくいからリファレンスマニュアル読め
DirectX9以前でできるかは知らない

573 :デフォルトの名無しさん:2010/02/22(月) 09:26:17
オクルージョンで処理するのが一番手っ取り早いけど。
なんの為にそうしたいのかによる。
たんに高速になるって勘違いしてるならソートして手前から書くほうが速い。

574 :デフォルトの名無しさん:2010/02/22(月) 09:49:18
>>572
>>573

ありがとうございます
LPDIRECT3DQUERY9とかでできそうですね・・・
ちょっとやってみます

575 :デフォルトの名無しさん:2010/02/22(月) 22:26:44
単にZバッファ使えって話じゃないのか

576 :デフォルトの名無しさん:2010/02/22(月) 22:51:58
素朴な質問なんだが、同じプロセスがテクスチャやバーテックスバッファを
確保・開放を繰り返すとしまいに失敗したりするようなことって出てくる?

577 :デフォルトの名無しさん:2010/02/23(火) 01:01:40
すみません
SetTextureで手前と完全に同じポインタのテクスチャを設定した場合でも
やはりテクスチャ切替の負担はかかるのでしょうか?


578 :デフォルトの名無しさん:2010/02/23(火) 01:54:40
DrawPrimitiveした瞬間にすべてが動いてる希ガス

579 :デフォルトの名無しさん:2010/02/23(火) 05:47:26
>576
フレーム毎にテクスチャ生成、開放するだけのプログラム書いて放置してみればいい

580 :デフォルトの名無しさん:2010/02/23(火) 08:18:11
解放〜確保の間に別のメモリ確保が入ると穴だらけになりそうで怖いけどな。
PCは大丈夫だろうけど360ではメモリをブロック単位で管理するとか常時保持出きるよう組み直すことも必要になるかも。


581 :デフォルトの名無しさん:2010/02/23(火) 08:54:27
>>577
オーバーヘッドはAPIの呼び出し回数だからなぁ

582 :デフォルトの名無しさん:2010/02/23(火) 09:40:15
>>577
ドキュメントに記載がない以上、環境やドライバに依存する可能性があるとしか言いようがない。

583 :デフォルトの名無しさん:2010/02/23(火) 15:32:23
質問です。

D3DXMATRIXにある、
friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& );

というオペレータは、どういう効果を持っているのでしょうか?
値を渡して少し試してはみたのですが、どうにも何をやっているのかわからなくて…。
ドキュメントなどもオペレータ周りの解説は省かれているようです

使う、使わないはわかりませんが、知っておきたいのでよろしくお願いします。


584 :デフォルトの名無しさん:2010/02/23(火) 15:38:40
まんま行列の乗算になるだけ。

585 :デフォルトの名無しさん:2010/02/23(火) 15:40:43
ありがとうがぜいました。

586 :デフォルトの名無しさん:2010/02/23(火) 15:40:59
>>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見れば書いてあるよ。

587 :デフォルトの名無しさん:2010/02/23(火) 15:46:40
>>585は偽物です。


あ、なるほど。
MATRIX * floatを逆に書いた場合用ですね。
どうもありがとうございます

あと、d3dx9math.inlの存在を初めて知りました。
これ、とても勉強になりそうなので読んでみます。
ありがとうございました

588 :デフォルトの名無しさん:2010/02/23(火) 17:04:32
知りたいところは殆ど見えないd3dx9math.inl
最適化があるから仕方ないけどさ

589 :デフォルトの名無しさん:2010/02/23(火) 17:44:21
ええ・・・。
実際に詳しく見てみたら、関数関連は全て闇の中ですね。
MSDNに式自体は載っているのでいいといえばいいのですが…


590 :デフォルトの名無しさん:2010/02/23(火) 17:53:57
以前ここでも話題をふりました
「D3DXによる最適化のせいで、PC環境の違いが実際に計算結果の違いに現れる問題」
について、みなさんどう対処していますか?

当時「D3DXなんて使うなボケ」という煽りにも似た指摘をいただきましたが、
確かに今となってはD3DXは(ゲームロジックに対しては)使わないべきだと強く思っています。

次回作のために、D3DXの算術関数を全て自前で書くかなぁ…。と思っているのですが
みなさんはどうしてるんでしょうか?

591 :デフォルトの名無しさん:2010/02/23(火) 18:37:46
>>590
そんなの、用途によるだろ。

592 :デフォルトの名無しさん:2010/02/23(火) 18:42:32
そんなのゲーム会社に入ってから考えたほうがいいんじゃないの?

593 :デフォルトの名無しさん:2010/02/23(火) 21:10:52
他に考えるべきことがいくらでもある

594 :デフォルトの名無しさん:2010/02/23(火) 22:03:07
リプレイの配布以外に、そんなに実害出ないしなぁ

595 :577:2010/02/24(水) 01:11:54
>>578 >>581-582
成る程、環境やドライバに依存する可能性が有るんですね・・
ありがとうございました。


596 :デフォルトの名無しさん:2010/02/24(水) 09:21:20
>>594
3D格闘ゲームで、通信対戦をキー情報のみやりとりする方式で作って公開したんですけど
計算誤差でガンガンずれて大変でしたw
結局D3DXをソフトウェア処理デバッグモードに強制的に変更してすませたんですけど、正規のやり方ではないですしなんとかしたいところ

昔ここで相談した時は「D3DXなんて使うなボケ」という意見が大勢でしたので、
何か有名なライブラリでもあるのかな?と思ったのですが・・・

597 :デフォルトの名無しさん:2010/02/24(水) 09:31:55
どうでもいいが、>>590の「ゲームロジックに対しては」という書き方は範囲が広すぎだボケ

598 :デフォルトの名無しさん:2010/02/24(水) 09:42:17
D3DX使うなは暴論だけどな。
算術関連に限り自前で用意した方がいい場合があるってだけだ。

599 :デフォルトの名無しさん:2010/02/24(水) 09:51:02
>>596
メッシュの描画位置とキャラクターの位置情報を別に計算すりゃあいいじゃん。
前者はDirect3Dの管轄で、後者はゲームエンジン側。固定小数点ででも持ってればいい。
これで何か問題あるのかね。

600 :デフォルトの名無しさん:2010/02/24(水) 10:00:25
お前ら本当に口だけだなw

601 :デフォルトの名無しさん:2010/02/24(水) 10:05:34
そもそもVCの標準ライブラリですらデフォルトで浮動小数点は環境依存だぞ。
浮動小数を信用する方が悪い。

602 :デフォルトの名無しさん:2010/02/24(水) 10:05:48
>>599
キャラの拳の位置に攻撃判定をもたせるなど、アニメーションと密接に絡んでいたもので。

・AnimationControllerを使っている段階で誤差発生
・攻撃判定とくらい判定との衝突計算にD3DXを使い誤差発生
でした。

とりあえずAnimationControllerは二度と使わないですね。
そもそもバグ多すぎですあれ。
見つけたバグについて、海外フォーラムからも指摘入ってるのに最後まで直さず終わったみたいですし。
単に再生するだけなら良いものの、キーなどを動的に書き換えるとひどいことになります

幸いスキンアニメーションプログラム自体は難易度低いし、OpenGLの時には自前でやってましたからそれ使ってしまいますが…。

603 :デフォルトの名無しさん:2010/02/24(水) 10:08:43
>>601
お、ほんとですかそれ。
情報ありがとうございます。

float a = 何か;
float b = 何か;
a *= b;

これも、環境によって若干誤差がでてしまったりします?
コンシューマにどっぷりつかってた甘ちゃんなものですいません。

604 :デフォルトの名無しさん:2010/02/24(水) 10:12:53
単純な計算はコンパイルオプション次第。
数学関数等は設定を変更する関数を利用する。

605 :デフォルトの名無しさん:2010/02/24(水) 10:25:20
行列の計算って重いの?

606 :デフォルトの名無しさん:2010/02/24(水) 10:28:10
http://msdn.microsoft.com/ja-jp/library/e7s85ffb%28VS.80%29.aspx
このあたりですかね?

precise が規定値で(自分のもこれになっています)
> これは、ANSI 基準に厳密に従う場合に要求されます。
と書かれているので、単純な計算は大丈夫そう?ですね。

数学関数っていうのは、math.hのsqrtとかのことですかね?
ちょっとこれの誤差を設定する関数というのが見当たらないのですが、教えていただけますでしょうか。
よろしくお願いします。

607 :デフォルトの名無しさん:2010/02/24(水) 10:34:10
コンパイラの使い方はスレ違い

608 :デフォルトの名無しさん:2010/02/24(水) 10:40:47
D3DXの話から派生してるし、役立ってるから問題ないと思われ
俺も興味ある

609 :デフォルトの名無しさん:2010/02/24(水) 12:06:11
_controlfp_sとかじゃね
まあスレ違いだとは思うけど

610 :デフォルトの名無しさん:2010/02/24(水) 12:55:59
DirectXスレ住民が、D3Dの初期化内部で_controlfp_sが呼ばれていることを知らないとは思えない

611 :デフォルトの名無しさん:2010/02/24(水) 12:57:42
ここは初心者スレですよ

612 :デフォルトの名無しさん:2010/02/24(水) 14:48:16
>>610
初心者ではない方はご退場願います。

613 :デフォルトの名無しさん:2010/02/24(水) 14:49:01
_controlfp_sなんて始めて知った

614 :デフォルトの名無しさん:2010/02/24(水) 16:29:59
教える側まで初心者になってどーする
浮動小数点の互換性問題はDirect3Dでゲームを使っていればぶちあたる問題のわりに、スタンダードな対処法が確立されていない
丁度いいのでここで存分に語り合ったらどうだろう?

615 :デフォルトの名無しさん:2010/02/24(水) 16:34:21
やりたければ話を続けたい奴が適切なスレに移動すればいいだけ。
なんで内容が脱線しているのに自分勝手に強行しようとするのか意味不明。


616 :デフォルトの名無しさん:2010/02/24(水) 16:47:24
内容が脱線してるとか言ってる人は放っておいて、とりあえずD3DXを使うと浮動小数点の計算が環境依存になってしまうのは確か。
一応防ぐ方法として
http://d.hatena.ne.jp/NyaRuRu/20040819#p1
PSGPの無効化 については読んでおいて損は無い

でもこれをやると、DLLの遅延読み込みなどができなくなるなど副作用もある

(しかしこの話のどこが脱線しているのやら…。自分に関係ない話題でも、知識は得ておいて損無いと思うぞ)

617 :デフォルトの名無しさん:2010/02/24(水) 16:51:51
そこまではD3DXの話でも、代替LIB制作時の浮動小数点計算をどうすればいいかはスレ違いだろ
バーカバーカバーカバーカバーカバーカ

618 :デフォルトの名無しさん:2010/02/24(水) 16:56:09
そこまで厳密にならなくても・・・
・D3DXの欠陥(互換性という意味ではね)の話
・その代替品を作るべき場合とは
・代替品を作る場合の注意

って感じでいいじゃないか

619 :デフォルトの名無しさん:2010/02/24(水) 17:31:13
浮動小数点の計算ってそんな差が出るもんなの?

620 :デフォルトの名無しさん:2010/02/24(水) 17:36:10
if (f < 1.00000f)

の時、環境によって0.99999f になったり 1.00000fになったりしたら、ゲームにならないだろ
差の大きさは問題じゃないさ

621 :デフォルトの名無しさん:2010/02/24(水) 17:37:28
>>620
ああ精度の問題かぁ。ありがと

622 :デフォルトの名無しさん:2010/02/24(水) 20:52:22
将来、独自形式ファイルのメッシュを読みこませるための練習として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 );
(以下略)
}

623 :デフォルトの名無しさん:2010/02/24(水) 21:23:31
エラーコードは?

624 :デフォルトの名無しさん:2010/02/24(水) 22:19:22
>>622
C++で書いてるなら、全てのDirectXのAPIの呼び出して戻り値をチェックして、失敗してたら例外を吐くように書いておこう。

625 :622:2010/02/24(水) 22:33:22
>>622 m_pMyIBに値が帰ってくるらしいがどうすればいいかわからん

626 :デフォルトの名無しさん:2010/02/24(水) 23:23:58
うまくいかないってのは
動くけど実行動作がおかしいのか
そもそもコンパイルエラーが出るのかどっちなんだよ

627 :622:2010/02/24(水) 23:34:23
>うまくいかないってのは
>動くけど実行動作がおかしいのか
>そもそもコンパイルエラーが出るのかどっちなんだよ
ゴメンちゃんと書かなかった・・・
「動くけど実行動作がおかしい」状態。インデックスバッファのとこ
コメントアウトとしても結果はかわらず。
if(FAILED(pDevice->CreateIndexBuffer(略){
(略)
} else MessageBox(NULL,"エラー","エラー",MB_OK);
でメッセージボックスが出てくる。こんな感じ。
他にも説明で足りないとこあったら言って。

628 :デフォルトの名無しさん:2010/02/24(水) 23:36:51
>>627
当然、分かってるとは思うけど、APIのエラーコードとそれによる文字列化されたエラーメッセージを
デバッグ出力なりに書き出させる例外を吐かせるんだぞ?

いや、それくらい分かってたよな。スマン。

629 :デフォルトの名無しさん:2010/02/24(水) 23:37:16
>>593
他にいくらでもあるから何なの?
お前さあ、回答する資格ないよ


630 :デフォルトの名無しさん:2010/02/25(木) 00:02:01
>>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);
}

632 :デフォルトの名無しさん:2010/02/25(木) 00:36:34
ひどいソースだ・・・

633 :デフォルトの名無しさん:2010/02/25(木) 00:40:27
DXTRACE_ERR_MSGBOX これつかえばいいんじゃ

634 :デフォルトの名無しさん:2010/02/25(木) 01:10:08
メッセージボックスでエラー表示するのも大事なことではあるが
VSで開発してるならデバッカの使い方を多少は知っといた方が後々の役に立つんじゃないか?
開発中なら直後にブレイクポイント置いて値の中身みるだけで済むじゃないか

635 :デフォルトの名無しさん:2010/02/25(木) 01:54:52
>>619
IntelのFPUは内部で80bitで計算してるのよ。
だから32bitで計算するSSEとかと比べると、微妙に結果が変わってくる。

最下位ビットが1ビット変わる程度の差だから一回の計算では全く問題ないが、
リプレイなんかだと誤差が蓄積されるので影響が出てくる。

636 :デフォルトの名無しさん:2010/02/25(木) 02:21:19
>>622
>>if(FAILED(pDevice->CreateIndexBuffer(略){
>>(略)
>>} else MessageBox(NULL,"エラー","エラー",MB_OK);
>>メッセージボックスが出てくる。こんな感じ。
とりあえず素数でも数えておちつけ
これじゃ「CreateIndexBufferが失敗しなかったらメッセージボックス」だ

637 :デフォルトの名無しさん:2010/02/25(木) 08:45:45
>>635
Intelのっつーかx87系はすべて、だな。
INTELで作ったリプレイデータもAMDのCPUでもちゃんと全く同じ結果になる。
SSEみたいに演算機自体が違う場合は当然別だけど。

638 :622:2010/02/25(木) 11:30:58
ごめ
pDevice->SetIndices( m_pMyIB);を書き忘れてただけだった!
夜だし睡眠薬飲んだ後だったから少しぼーっとしてて、見落としたみたい。
でも、ここのおかげで自分が基本的なこともわかってないことが分かった。
本当に夜遅くに騒がせてすいませんでした。

639 :デフォルトの名無しさん:2010/02/25(木) 11:55:52
CreateIndexBufferとかんけいねーじゃん

640 :デフォルトの名無しさん:2010/02/25(木) 13:33:15
それってコンパイルオプションで指定出来なかったっけか?
規格に準じた浮動小数は計算速度が遅かったような・・・

641 :デフォルトの名無しさん:2010/02/25(木) 14:09:44
精度に由来する規格外の問題と、特殊ケース(DENとかINFとか)に関係する規格外の問題もあるからごっちゃにすると面倒臭い。
精度落とすだけならx86アーキテクチャでも速度は変わらなかったような記憶があるが……

642 :デフォルトの名無しさん:2010/02/25(木) 14:47:47
すみません
幾つかの3D作品で、離れたキャラクターが軽量の別モデルになるのではなく
何やら穴ボコの、描画されない面の多いモデルになるのを見かけるのですが、
あれは何という名前の機能・技術なのでしょうか?


643 :デフォルトの名無しさん:2010/02/25(木) 15:02:03
LOD

644 :デフォルトの名無しさん:2010/02/25(木) 16:16:33
離れたキャラクターが軽量の別モデルになるのがLODじゃねーの?

645 :デフォルトの名無しさん:2010/02/25(木) 17:11:00
俺には「バグ」としか思えないんだがw
一体どんな現象なのかさっぱりわからん

646 :デフォルトの名無しさん:2010/02/25(木) 19:38:27
ファークリッピングとかZファイティングじゃないのか

647 :デフォルトの名無しさん:2010/02/25(木) 19:43:26
>>642は肯定的な「機能・技術」として聞いているんだよな

648 :デフォルトの名無しさん:2010/02/25(木) 20:43:23
D3DXは、作成者の意思に関わらず
CPUによって、x87やSSEを切り替えるのが問題なのか?
つーか、これ狂ってると言われても仕方ないレベルww

649 :デフォルトの名無しさん:2010/02/25(木) 20:47:29
プログレメッシュは別に穴ボコには
ならんしなぁ 何だろ?

650 :デフォルトの名無しさん:2010/02/25(木) 20:55:19
ゲッダン?

651 :デフォルトの名無しさん:2010/02/25(木) 21:10:04
節子!それ技術やない!ネタや!


652 :デフォルトの名無しさん:2010/02/25(木) 21:27:46
見てみたいからゲーム名を教えてくれ>遠くで穴ボコになるゲーム

653 :デフォルトの名無しさん:2010/02/26(金) 03:05:18
LODってどうやんの?
カメラからの距離を毎フレームもとめてメッシュを切り替えるの?

654 :デフォルトの名無しさん:2010/02/26(金) 03:58:40
>>653
そんなのゲーム次第だろ
モデルの切り替え(ポッピング)をいかに目立たなくするかは
ゲームごとにチューニングしていくしかない


LODはカメラ距離にしたがってモデルの精度を変更する技術の総称で
別モデルに切り替えるのはLODの一つであって全てじゃない
プログレッシブメッシュもそうだし
ディスプレースメントマッピングとか
DirectX11で注目されるシェーダーによる無段階のテッセレーションも全部LOD

655 :デフォルトの名無しさん:2010/02/26(金) 09:52:02
なんかもうLODってシェーダの切り替え程度でよくね

656 :デフォルトの名無しさん:2010/02/26(金) 10:20:41
そもそも距離で描画面積が減るからピクセルシェーダーの
切り替えは大して効果がないという。

657 :デフォルトの名無しさん:2010/02/26(金) 11:17:31
減らすべきは頂点数・ボーン数

658 :デフォルトの名無しさん:2010/02/26(金) 11:25:56
キャラが大量にわらわらでてくる無双系だと役立つけど、格闘ゲームとかには意味の無い技術だよね
いや、前者で役立てば十分すぎるんだけど

659 :デフォルトの名無しさん:2010/02/26(金) 17:58:14
HLSLのデバッグってできるんですか?シェーダーに渡された引数の値を知れれば良いです。
PIXって最新のSDKインストールしなきゃいけないんですか?

660 :659:2010/02/26(金) 18:17:20
すみません。最新のSDK入れます。無視してください

661 :デフォルトの名無しさん:2010/02/27(土) 04:33:32
だが断る

662 :デフォルトの名無しさん:2010/02/27(土) 05:20:52
directx9 2003 →directx9 2008

結構変更されてるんだね。。。知らなかった
PIX使えました

663 :デフォルトの名無しさん:2010/02/27(土) 09:43:44
なんで2008なんだよ・・・2010を入れろよ・・・

664 :デフォルトの名無しさん:2010/02/27(土) 10:12:20
DirectXは2004octで完結した
異論は認めない

665 :デフォルトの名無しさん:2010/02/27(土) 10:17:56
XInputとXAudio2が2004octで使えるなら異論はねぇよ

666 :デフォルトの名無しさん:2010/02/27(土) 10:33:46
XInputに関しては全く使い道がないんだが、本当に使っているのか?

667 :デフォルトの名無しさん:2010/02/27(土) 10:35:47
XInput対応のパッドがDirectInputだとL2R2を同時に取れないのは致命的。
対応自体は簡単に出来るんだから両対応しないのはありえないだろ。

668 :デフォルトの名無しさん:2010/02/27(土) 11:01:38
>>667
X軸右傾きと、X軸左傾きが別にとれるようになったとかなの?
(DirectInputだと、両方押されてると差引0として認識)

669 :デフォルトの名無しさん:2010/02/27(土) 12:25:37
>>667
それについてはSDKだったかMSのサイトに説明があるけど
過去のゲームとの互換性のためにそうしたとのこと。

ドライバ側でボタンや軸の入れ替えができるのは俺は反対。
それはアプリケーション側で解決すべき問題。

670 :デフォルトの名無しさん:2010/02/27(土) 14:24:03
>>669
>それはアプリケーション側で解決すべき問題。
2つ以上の軸をDirectInputで読み取れないところが問題だったわけだが?

671 :デフォルトの名無しさん:2010/02/27(土) 14:34:39
ドライバが変なことしてるせいでDirectInputで期待通りに取れないだけで別にDirectInputは悪くないんじゃ

672 :デフォルトの名無しさん:2010/02/27(土) 15:19:34
最初にXInputで取りにいって駄目ならDirectInputに切り替えれば良い話に見えるが

673 :デフォルトの名無しさん:2010/02/27(土) 15:35:41
>>672
パッドがXInput対応の物が問題であって
例えばPS2のコントローラをUSBに変換して繋いでいるようなものは問題なかったり。



674 :デフォルトの名無しさん:2010/02/27(土) 19:57:57
XInputが出て何年経ってるんだよ。
新規プロジェクトでいまだに対応しようとしない方が悪いだろう。

675 :デフォルトの名無しさん:2010/02/27(土) 20:41:42
対応しなきゃいけないという法があるわけでなし

676 :デフォルトの名無しさん:2010/02/27(土) 22:55:32
XInput対応のパッドの時にXInputを使って、
そうじゃなけりゃDirectInputで取るようにすればいいだけ。

排他的にどちらか片方だけ使わないといけないわけではないから悩むこと自体おかしい。

677 :デフォルトの名無しさん:2010/02/27(土) 23:51:05
RawInputってどうなんだろう
DirectInputからこれに置き換えていくべきなのかな?

678 :デフォルトの名無しさん:2010/02/28(日) 01:37:20
RawInputを使えば、DirectInputのキーボードとマウスに関してはすべて自前で実装できるよ。
つまり効果だけでいえば、車輪の再発明に等しい。

679 :デフォルトの名無しさん:2010/02/28(日) 01:48:22
>>678
入力関係に関してはOSの想定を超えた解像度の入力が欲しい場合もあるから、
敢えて車の再発明もやらないといけない場合がある。
特にマウス関係がそうらしい。

680 :デフォルトの名無しさん:2010/02/28(日) 19:13:37
Direct3Dでマウスを使用した極座標でのカメラの回転までは出来たんですが、
カメラの平行移動はどうすればいいんでしょうか?
例えばマウスを左に動かしたら、カメラとターゲットをビューに対して右に平行移動させたいです。

681 :デフォルトの名無しさん:2010/02/28(日) 19:22:04
ん?
「自分が前に前に歩いているのではなく、世界が後ろに動いている」みたいなことを実装したいの?
現実世界だとカメラの位置と注視点が50センチ前に移動する・・・みたいな考えだから、問題なければそれでいいんだけどね。

682 :680:2010/02/28(日) 19:31:39
右でも左でもいいんですが、「マウス中ドラッグで掴んで動かす」的な動作をイメージしていたので

683 :デフォルトの名無しさん:2010/02/28(日) 19:33:27
カメラのビュー行列からXYZの直行ベクトルが取れるから、それを移動量にかける

684 :デフォルトの名無しさん:2010/02/28(日) 20:03:10
>>682
>右でも左でもいいんですが
カメラが動くか、カメラ以外が動くかの違いだよ。
地動説と天動説に置き換えたほうが分かりやすいかな。

685 :デフォルトの名無しさん:2010/02/28(日) 20:09:05
>>680
>Direct3Dでマウスを使用した極座標でのカメラの回転までは出来たんですが
俺にはここからナニをいってるのか理解できないけどな
極座標だからなんだっていうのかさっぱりわからない

686 :デフォルトの名無しさん:2010/02/28(日) 21:23:01
中高数学の勉強をやり直したほうがいい

687 :デフォルトの名無しさん:2010/02/28(日) 22:50:41
いやいや、それ以前にカメラとターゲットが同時に移動したら
背景が動くだけでターゲットはスクリーン座標的には動かないだろw

688 :デフォルトの名無しさん:2010/02/28(日) 23:05:06
ttp://marupeke296.com/DXG_No39_WorldMatrixInformation.html
ttp://marupeke296.com/DXG_No56_CameraBaseTrans.html
ここを見れば
行列の
_11、_12、_13 が右方向ベクトル
_21、_22、_23 が上方向ベクトル
_31、_32、_33 が前方向ベクトル
だということがわかるよ!

カメラ行列(ビュー行列の逆行列)の右方向ベクトルを使えば

689 :デフォルトの名無しさん:2010/02/28(日) 23:34:17
そもそも質問者はワールド空間にカメラがあって
描画するときはオブジェクトをカメラ空間に移すっていう概念を知っているの?
回転って表現があやしいなぁ・・・って感じるんだけど?

俺はそこから問い詰めたい

690 :デフォルトの名無しさん:2010/02/28(日) 23:40:22
>>683,688
なんで行列をかけるという回答が出ないんだろ
別に間違いじゃないからどうでもいいことではあるけど、
カメラに関しては回転もするんだからまとめて行列でしちゃえばいいのに

691 :642:2010/03/01(月) 00:12:39
返答が遅れましたが
>>643-646 ありがとうございます。
>>652 Master of Epicでクマを遠くに見るとよくなります。
>>653-658 参考になりました。
沢山の情報、ありがとうございました。


692 :688:2010/03/01(月) 00:35:01
>>690
そういえばその手があったねorz

昔、速度とか気にしてたときの名残でそう書いてしまった

693 :デフォルトの名無しさん:2010/03/01(月) 01:31:15
>>692
意味不明すぎてレスできません
入門書でも買ったらどうですか?

694 :デフォルトの名無しさん:2010/03/01(月) 01:42:35
>>680はかなり迷走してるなw

695 :デフォルトの名無しさん:2010/03/01(月) 09:34:32
2Dスプライトベースのアニメーション作成ツールって無いんでしょうか?
リソース登録して、画像やキーフレーム、姿勢を指定できるようなやつ。
3Dツールみたいにスタンダードフォーマットがあれば対応したいんだけど・・・

696 :デフォルトの名無しさん:2010/03/01(月) 09:49:30
>>695
Flash

697 :デフォルトの名無しさん:2010/03/01(月) 10:40:43
>>674
XInputはおろか、Win32APIのパッド関数で十分なもんで^^;

698 :デフォルトの名無しさん:2010/03/01(月) 12:01:11
行列を使うと無駄に処理が遅くなっちゃう時代・プラットフォームがあったとか
例えば8bitPC時代は、手作業で命令のクロック数えて最適化してたらしいし…
式に展開?したほうが速い場面もあったのかもしれない
その頃の癖でうっかり考えちゃうというのはありそう

699 :デフォルトの名無しさん:2010/03/01(月) 12:07:12
>>695
スタンダードフォーマットなんて無いよ

とりあえず受け皿となる独自フォーマットを作っといて
それから適当なアニメーショ作成ツールを探してきて
(できれば単なるテクスチャーシフトじゃなくてフォームが組めるやつ)
そのソフトが吐き出すフョームデータやシーケンスデータを
最初の独自フォーマットのコンバートするツールを作る練習をしとくといい

会社どころかチーム単位で使ってるソフトが違ってることがあるので
そのたんびにプログラムをいじるのは非常に面倒
ソフトに合わせてコンバートツールを作るのが普通

700 :デフォルトの名無しさん:2010/03/01(月) 12:40:23
>>695
君のレスから「2Dスプライトベースのアニメーション作成ツール」だけ抽出してググると最初に引っかかるんだが
そのまんま"2Dスプライトアニメーションデータ作成ツール「SpriteStudio」"ってのがある
どうにも宣伝乙だな

使ってるところもあるんだろうけどスタンダードとは言いがたい

701 :デフォルトの名無しさん:2010/03/01(月) 20:02:03
>>700
サンクスだぽ(`・ω・´)

702 :デフォルトの名無しさん:2010/03/02(火) 20:56:32
VRMLみたいな、3D向けに作られたモデリング言語を2D空間で記述した方が、
なまじ2D専用の言語を作って記述するよりも汎用性や拡張性が出るんじゃなかろうか。

703 :デフォルトの名無しさん:2010/03/02(火) 21:05:59
14万8000円か。趣味の個人向け用じゃないよね。

うちの社内ツールとできること変わらん感じ。ちなみにPS2時代から生き残ってる奴で、
プログラムはカオスで触りたくもないクソツール。

704 :デフォルトの名無しさん:2010/03/02(火) 21:11:58
ツールのシェアだけ言えばFlashが圧倒的に普及しているけどゲーム内で使うとなると工夫が必要になるね。
ScaleformGFxみたいなミドルウェアもあるけど、SpriteStudioにしても商用限定だからなあ。
3Dにしてもスタンダードと言えるようなフォーマットは無いような気がするし・・・
スプライトエディタをフリーソフトとして公開すれば結構需要あるんじゃないだろうか。

705 :デフォルトの名無しさん:2010/03/02(火) 23:04:14
>>683 >>688
レスありがとうございました。
結局普通に計算して出しました。
行列演算はワールド座標変換で少し使った程度なので、これから詳しく調べてみます。

706 :デフォルトの名無しさん:2010/03/03(水) 00:15:17
XAudio2のSourceVoice->GetStateで取得できる、サンプル数の合計をリセットする方法はありますか?

707 :デフォルトの名無しさん:2010/03/03(水) 00:21:36
おっ。XAudio2か。じゃあ俺も便乗質問。
XAudio2でフェードインをやりたいんですが、
SourceVoiceにSetVolumeを細かく刻んで与えると音がぶつ切りに聞こえます。
フェードアウトだとなぜか問題ないんですが。
どうやったら回避できますか?

708 :デフォルトの名無しさん:2010/03/03(水) 01:43:50
ららーらーんらーんららーん

709 :デフォルトの名無しさん:2010/03/03(水) 08:58:05
XAudio2ならフェードアウトするための便利な機能があるぞ
あれ、XActの方だったか?

質問の答えは知らん

710 :デフォルトの名無しさん:2010/03/03(水) 11:54:04
D3DPOOL_SYSTEMMEMのサーフェイスをUpdateSurfaceでバックバッファに毎フレーム描くと、
メモリの破損を疑うようなガタついた画面になるんだけど
原因分かる人います?

ちなみにD3DPOOL_DEFAULT + StretctRectは問題なしでした

memtest86でシステムメモリは問題なし
グラボはGeForce6600GTでデュアルビュー環境です
D3DデバイスはHALでD3DCREATE_HARDWARE_VERTEXPROCESSINGです

711 :デフォルトの名無しさん:2010/03/03(水) 13:02:51
転送待機が発生しているだけかと。
UpdateSurface後に1 Presentしたあとバックバッファにコピーするとか。テクスチャでレンダリングするとか。色々工夫してみよう。
フルスクリーンとウィンドウで待機動作が違うこともあるし、こういった挙動は環境依存。
システムメモリとVRAM間との転送でこういった現象はよくある。

712 :デフォルトの名無しさん:2010/03/03(水) 13:10:35
質問です。
メタセコイアLEを使って、自分で作ったXファイルをプログラムで読み込んで描画させると、
モデルはしっかり反映されるのですが、面に指定した材質が反映されません(色がメタセコイアのデフォルトカラーになってしまいます)。
テクスチャは使用していません。
素材サイトなどでとってきたモデルは色がちゃんとつくのですが、何がいけないのでしょうか。

プログラムではライティングモード、メタセコイアLEでXファイル保存する時はUVマッピングに法線を指定しています。
何がいけないか見当がつく方、教えてください。よろしくお願いします。

713 :デフォルトの名無しさん:2010/03/03(水) 13:11:06
D3DPOOL_SYSTEMMEMのサーフェイスからバックバッファに毎フレーム描くだって?
ご冗談を。

714 :デフォルトの名無しさん:2010/03/03(水) 14:20:08
>>712
そのXファイルをうp

715 :デフォルトの名無しさん:2010/03/03(水) 14:50:33
テキストファイルで保存して中身を開いてマテリアルの項目がどうなってるか確認するんだ

716 :デフォルトの名無しさん:2010/03/03(水) 15:27:13
フリー版のメタセコで吐き出した奴でも普通に読めるし
ファイル作成かプログラムになんか不備があるんじゃねぇの?

717 :デフォルトの名無しさん:2010/03/03(水) 16:00:29
>>712
SetRenderStateでD3DRS_AMBIENTを設定してる?
あとDXViewerでそのXファイルを見たら、きちんと見えている?

718 :デフォルトの名無しさん:2010/03/03(水) 22:27:17
みなさん、レスありがとうございます。遅くなってすみません。
>>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ファイルがだめなんですかね?

719 :デフォルトの名無しさん:2010/03/03(水) 22:34:26
連投すみません。これで大丈夫ですかね?
>>714
http://uploadr.net/file/79738fe4e5

720 :710:2010/03/03(水) 23:11:13
>711, 713
ありがとー
DEFAULTにします

721 :デフォルトの名無しさん:2010/03/03(水) 23:45:34
>>719
Xファイルに問題はないよ
描画部分の設定の問題だと思われ

722 :デフォルトの名無しさん:2010/03/04(木) 01:07:19
>>718
あれだろ
テクスチャないのにテクスチャカラーを参照してるから白に飛んでるだけじゃね?
メタセコで吐き出す時にUVマッピングのチェックをはずすか
プログラム側でテクスチャの有無を確認しろ

723 :デフォルトの名無しさん:2010/03/04(木) 01:18:13
>>719
頂点カラー(MeshVertexColors)情報が吐き出されているね
頂点カラーを描画している(バッファにD3DFVF_DIFFUSE)なら、
この場合白系で表示されているはず

まぁ、これを意図的にやっているなら気づくわけで、何かビューワで確認しているだけなら、
MeshVertexColorsのデータを削ってみるといい。或いはモデラ側で出力しないとかね。

724 :デフォルトの名無しさん:2010/03/04(木) 01:36:37
一部宣言載せてないですけど、このコードがだめなんでしょうか?
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をはじめて日が浅いので、訳のわからないことを言ってるかもしれませんが、間違っていたら指摘お願いします。


725 :デフォルトの名無しさん:2010/03/04(木) 02:47:17
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 );
}

726 :デフォルトの名無しさん:2010/03/04(木) 07:49:24
>>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
↑勉強している本のサンプルなんですが、これは色もちゃんと描画できます。

727 :デフォルトの名無しさん:2010/03/04(木) 08:01:09
いや、だからメタセコのファイル出力見直せって

728 :デフォルトの名無しさん:2010/03/04(木) 11:25:22
>>727
俺は普通に表示出来たが?

729 :デフォルトの名無しさん:2010/03/04(木) 11:39:32
メタセコで出力したファイルの内容を見直してみろって言ってるんでしょ?

730 :デフォルトの名無しさん:2010/03/04(木) 11:50:59
自作のシェーダーのビューワで見たら普通に表示できたけど
サンプルのチュートリアルのMeshにライトの設定を書き加えた奴では見れなかったよ
試しにメタセコで適当なオブジェクトを>>712の設定で書き出したらやっぱりだめぽ
>>722にあるようにUVのチェックはずしたら正常描画された
もう固定機能なんて触らなくなって久しいから理由は分からんけど

731 :デフォルトの名無しさん:2010/03/04(木) 12:14:05
UV消して動くならDECL?がちがうんでねーの?

固定触らないと忘れるな

732 :デフォルトの名無しさん:2010/03/04(木) 12:17:54
F!V!F!

733 :デフォルトの名無しさん:2010/03/04(木) 12:21:28
ああDeclは固定じゃなくても使うかw
もはやDirect3D9を忘れかけてるな

734 :デフォルトの名無しさん:2010/03/04(木) 12:25:19
>>733
当分はXPのサポートが捨てられない商用ゲーム書きからすると、羨ましい限りだな。
そいや、VistaでもDx11が使えるようになってるんだったっけ?

735 :デフォルトの名無しさん:2010/03/04(木) 13:32:37
>>727 >>730
UVマッピングをはずしたら描画されました!ありがとうございます。

ただ、色がメタセコのときよりだいぶ暗いんですが、これはコードの方でライトの設定をいじればいいんでしょうか。
今、ライトはディレクショナルでDiffuseが全て1.0f、ベクトルがYのみ1.0fで、他はいじってません。

736 :デフォルトの名無しさん:2010/03/04(木) 16:08:30
Yのみ1.0fってそら真下から光当ててたら暗くみえるがな

737 :デフォルトの名無しさん:2010/03/04(木) 19:36:42
SkinnedMeshサンプルのHLSLを見ると、頂点だけでなく、法線にもアニメーションの変換行列を掛けています。
この行列は平行移動も含んでいますが、法線は正しく変換され、ライティングもうまくいっています。
平行移動が反映されていないということは、w成分が0ということだと思いますが、
これは、float3型に行列をかける際に、ベクトル側のw成分を0として計算しているという解釈でよいのでしょうか?

ホストプログラム側では、こういった変換はwをどう扱うかで異なるAPIが用意されていますが、
HLSLでは単にmul関数だけなので、注意が必要だと感じたので、質問させていただきました。
よろしくお願いしますm(_ _)m

738 :デフォルトの名無しさん:2010/03/04(木) 20:27:42
>この行列は平行移動も含んでいますが、法線は正しく変換され、ライティングもうまくいっています。
うまくいかないのが普通なの?

ベクトルをローカル座標に移したりワールド座標に移したりすることを考えたら
何が疑問なのかさっぱりわかんねーけどどうよ?
拡大縮小入るとおかしくなるかもしれないけど

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として計算してくるということが考えられると思うのですが、その確認をしたかったんです。

もちろん、拡大縮小などが入ってきた場合は、逆転置行列が必要になってくるので、話は違ってきますが・・・


740 :デフォルトの名無しさん:2010/03/04(木) 21:32:37
SkinnedMeshサンプルは知らんが
float3にfloat4x4を掛けると言ってるが、本当か?
float3x3にキャストした行列を掛けているんじゃないの?
これならスジが通るだろ

741 :737:2010/03/04(木) 21:46:12
>>740
SkinnedMeshでは変換行列がfloat4x3、自作のシェーダでもfloat4x4で、
いずれも法線はfloat3で、明示的なキャスト記述等なく、mulでかけています。
もしかすると、暗黙的に、おっしゃるようなキャストが行われていると解釈することもできそうですね・・・

742 :デフォルトの名無しさん:2010/03/04(木) 22:02:14
>>741
確かにコンパイル通るねえ
静的型付け言語って、こういうのをはじく為に
あると思うんだがねえ
ザルだねー

743 :デフォルトの名無しさん:2010/03/04(木) 22:06:47
はいはい

744 :デフォルトの名無しさん:2010/03/04(木) 22:13:32
>>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を指定したぐらい


745 :デフォルトの名無しさん:2010/03/04(木) 22:18:10
>>744
おっ! 情報サンクス。
早速明日調べてみます。
ところで、SourceVoiceに突っ込んでいる音声バッファは1ブロック何ミリ秒、それを何個与えていますか?

746 :デフォルトの名無しさん:2010/03/04(木) 22:30:37
>>745
あ〜、バッファは全データをメモリに格納して1つとして、分割はしてないよ
ちょっとマルチバッファリングのときでやってみる

747 :デフォルトの名無しさん:2010/03/04(木) 22:43:33
>>738
さすがに、法線ベクトルと位置ベクトルの違いも知らない人が
737に噛み付くのはどうかと思う。

>>737
コンパイル結果を見ると、法線の方はm3x3になっていた。
ドキュメントのmulのとこにはdimensionは等しくないといけないように書いてあるけど、
行列が大きい分には余分な部分が無視されるだけっぽいね。

748 :デフォルトの名無しさん:2010/03/04(木) 22:51:44
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でした。
そろそろお世話になりすぎなので、後は自分で試行錯誤してみます。ありがとうございました。


751 :デフォルトの名無しさん:2010/03/04(木) 23:52:56
今更ですが、DirectX7の日本語版ヘルプを入手できる場所ってどこかあるでしょうか

752 :744:2010/03/05(金) 00:06:41
>>745
自分もXAudio2でGetStateがうまくいかないから調べついでに作ってみたw
http://testhp.ddo.jp/fadeinout.cpp

このプログラムで、正弦波のバッファ0.1秒 3分割がノイズ無しでいけたよ
簡単に言えば、フェードインの動作を別スレッドでさせたら成功したって事

753 :デフォルトの名無しさん:2010/03/05(金) 00:15:01
>>752
……なんかこのコードの書き方変なような気がするんだけど、気のせい?
XAudio2ってイベントハンドラを定義したインターフェイスを継承したオブジェクトを作って
そいつでストリームの継続処理をやらせるのが常道だと思ってたんだけど。

このコードの書き方だとDirectSoundの書き方と大差なくてXAudio2の恩恵があまりないんじゃない?

754 :744:2010/03/05(金) 00:15:36
ごめん>>752は別スレッドで動作させてないな
でもそのプログラムでノイズ無しでいけたから参考にどうぞ

755 :デフォルトの名無しさん:2010/03/05(金) 00:20:49
>>753
そうですか〜、C++のクラスについて本格的に触れたのも最近で
waveOutからXAudio2に急に切り替えたもので何分使い方がよく分かっていません・・。
もっと勉強してきます!

756 :デフォルトの名無しさん:2010/03/05(金) 00:22:25
>>755
8ビットサウンドなんて今時使わないし、
比較的低周波の単音ではノイズのテストにならないような気もするけど、
自分の書いてるコードが間違ってるかもしれないから
明日このコードと比較してみることにします。

757 :デフォルトの名無しさん:2010/03/05(金) 00:28:22
>>752
横槍だけども。何かひらめいたときの効果音みたくて面白かった。

758 :デフォルトの名無しさん:2010/03/05(金) 00:38:45
>>739
>3次元ベクトルV(x,y,z)に4x4の平行移動行列をかけるとします。
>V(x,y,z)を頂点のような「位置ベクトル」と見なした場合は、
>平行移動分だけ移動すればよいです。
なにいってるのかわからない
位置ベクトルだって回転すれば変わると思うんだけど・・・
平行移動分だけってどういう意味?

759 :デフォルトの名無しさん:2010/03/05(金) 00:48:43
解説で平行移動行列にわざわざ限定する意味がわからない
単純にモデル座標系上のベクトルAにワールド変換行列をかけても
ベクトルAがワールド座標上でのベクトルAになるだけでかわんねーと思うんだけどマジで
やってみそ

760 :デフォルトの名無しさん:2010/03/05(金) 01:05:51
>>739は同次座標行列による変換というテクニックの
説明をしている。
3次元ベクトルは、向きと大きさを表すものと
位置を表すもの、2つの量を表現出来る。
後者の位置を表すベクトルは、

〜第一部完〜

761 :デフォルトの名無しさん:2010/03/05(金) 01:28:47
つまり、法線ベクトルを(0,0,0)-(nx,ny,nz)のベクトルとして計算してないからワールドのxyzを捨てたいのか
っていっても俺のそんな変換してねぇな
ライトベクトルのほうをローカルにもってきてるシェーダが多いわ

762 :737:2010/03/05(金) 06:58:13
>>758
例では、着目してほしい平行移動だけを含んだ行列をかけていたので、
「平行移動分だけ」という書き方をしました。
もちろん、回転が入っていたら回転もします。
回転の成分は、位置ベクトル、法線ベクトルの両方に普通に作用させればよいだけですけどね。

>>759
いえ、そのベクトルAというのをどう見なすかで、ワールド変換行列をかけた結果と
望む結果とが異なることがあります。(>>739
このベクトル×行列も、行列の内容やそれぞれの次元をどう揃えてかけるかで違ってくるので、
ややこしいことになっていると思います。

HLSLはこのあたりを曖昧にした記述ができ、概念的な記述ができて高度かな、とも思いますが、
>>742さんも漏らしているように、厳密でないといえば厳密でないですね・・・

>>761
ライトベクトルをローカルや接空間に持ってこれば計算量を減らせるので、そうしていますが、
アニメーションを含んだ行列(ボーン合成行列っていうのかな?)はそのテクニックとは関係なく
法線に適用しないといけないです。

763 :デフォルトの名無しさん:2010/03/05(金) 08:46:45
>>734

なってる
ついでに知ってると思うがDirect3D9レベルのハードでもDirect3D11で書ける
XPさえ切り捨てられれば移行できるぞ

使いやすすぎてもう9には戻れんわ

764 :デフォルトの名無しさん:2010/03/05(金) 08:58:26
何がどう使いやすくなったのか書かないあたりが、
実は使っていないのがよく分かる。

765 :デフォルトの名無しさん:2010/03/05(金) 09:57:54
>>764
どう使いやすくなったんですか?

766 :デフォルトの名無しさん:2010/03/05(金) 14:33:41
11にすれば全てがシェーダに統一されていて、非常に一元的に書けるというのはよくわかる
だがXPを切り捨てられるほどなぁ・・・

767 :デフォルトの名無しさん:2010/03/05(金) 17:04:08
もっとわかりやすいライブラリ作って欲しいなあ。

768 :デフォルトの名無しさん:2010/03/05(金) 17:22:28
つ 自作ミドルウエア。

769 :デフォルトの名無しさん:2010/03/05(金) 18:45:42
これだからしろうとは

770 :デフォルトの名無しさん:2010/03/05(金) 18:47:33
一方、玄人は・・・。

771 :デフォルトの名無しさん:2010/03/05(金) 20:25:15
MSがせこい真似しないでXP版11出せばいいだけ。

772 :デフォルトの名無しさん:2010/03/05(金) 22:01:50
頂点シェーダーとピクセルシェーダーの切り分けっていうんですか、
どこまでの処理を頂点シェーダーでやれば良いのでしょうか?

773 :デフォルトの名無しさん:2010/03/05(金) 22:15:36
>>772
2つのシェーダーはHLSL中でよく似た書き方をするから最初は戸惑うが、
動く粒度が全く違うので同じ処理が出来ないことが実際に書けば分かるよ。

とりあえずシェーダー処理関数のin/outに注目してご覧。

774 :デフォルトの名無しさん:2010/03/05(金) 22:42:57
>>773
ありがとうございます。
Phoneシェーダー書くとしてハーフベクトルを求めるのにも結果は違くなるんですか?

775 :デフォルトの名無しさん:2010/03/06(土) 00:12:10
773じゃないけど
頂点シェーダからピクセルシェーダにデータが渡される時に
ラスタライザで頂点間の線形補完がされるのがポイント

フォンシェーダの場合
高ポリゴン時なら頂点間のハーフベクトルの差が少ないのでそれほど気にならないが
低ポリゴン時に想定外の補完がされてしまってボッコボコになってしまうはず

そういうときに頂点単位ではなくピクセル単位でハーフベクトルを計算することになるのだが
当然塗りの面積が大きくなればなるほど負荷が高くなる
その辺のバランス取りは状況に応じてチューニングしていくしかない

776 :デフォルトの名無しさん:2010/03/06(土) 00:31:36
>>775
ありがとうございます。なるほど、、、すっきりしました

777 :デフォルトの名無しさん:2010/03/06(土) 00:35:18
俺は、ハーフベクトルは
VSとPSでは差は無いと考えて
VSで計算するようにしているが。
他にシャドウマップ用のZ値なんかもそうだな。

778 :デフォルトの名無しさん:2010/03/06(土) 02:33:24
プログラマブルシェーダーの時代になったが、数学的な理解がある奴って少ないな…

いくら、ピクセル単位でハーフベクトルを計算したところで
ハーフベクトルを算出するのに必要な、法線、視線、ライトベクトルの内
法線は頂点間の線形補間されたものしかないわけじゃんw

なら頂点でハーフベクトルを求めて、それをピクセルに渡しても変わりない

大方、ピクセル側でベクトルの正規化をしてないのを
頂点側で計算したベクトルは駄目だ、とか思ってるんじゃないの?
線形補間されるって事は、ベクトルの大きさが1じゃなくなるって理解出来る?

779 :デフォルトの名無しさん:2010/03/06(土) 02:47:22
そんな自慢げに熱くなって語ることでもなかろうに

780 :デフォルトの名無しさん:2010/03/06(土) 02:50:09
>>778
58頂点くらいの球と1000頂点くらいの球で
頂点でハーフベクトルを計算したフォンシェーディングしてみれば分かる

781 :デフォルトの名無しさん:2010/03/06(土) 02:52:38
>>778
普通に考えて
こっちを向いてる頂点と反対側を向いてる頂点が隣り合ってる時に
ハーフベクトルを補完したら
角だけが光っちゃうのは自明ジャン
お前こそ頭使え

782 :デフォルトの名無しさん:2010/03/06(土) 02:54:58
>>778
必要に応じてピクセルシェーダでベクトルを正規化しなおすのは当然だろ。
どの段階でラスタライザの線形補間を挟むかによって誤差の出方は変わってくるんだから、
「変わりない」なんていう乱暴な議論は感心できないな。

783 :デフォルトの名無しさん:2010/03/06(土) 03:14:35
>>780
>>781
お前等って馬鹿だなw

>58頂点くらいの球と1000頂点くらいの球で
>頂点でハーフベクトルを計算したフォンシェーディングしてみれば分かる

で、それらを
ピクセルでフォンシェーディングした時に
58頂点のピクセル計算のと1000頂点のピクセル計算した奴を比べたら変わるか?

そもそも球なら、頂点間でハーフベクトルを補間しても変わらんだろw

>こっちを向いてる頂点と反対側を向いてる頂点が隣り合ってる時に
>ハーフベクトルを補完したら

おいおい、この場合は
どうやってピクセルに法線と視線とライトのベクトルを渡すんだ?
ピクセル単位で処理する場合でも破綻する例まで出して必死だなw

>>782
>必要に応じてピクセルシェーダでベクトルを正規化しなおすのは当然だろ。
当然なんだけど、それやってないような発言ばっかりだったから

>どの段階でラスタライザの線形補間を挟むかによって誤差の出方は変わってくるんだから、
>「変わりない」なんていう乱暴な議論は感心できないな。

フォンシェーディングのハーフベクトルについて、と限定されていると思っていたが?


784 :デフォルトの名無しさん:2010/03/06(土) 03:21:28
>>778
ココをよく読んだほうがいい
http://msdn.microsoft.com/ja-jp/library/dd148687.aspx

785 :デフォルトの名無しさん:2010/03/06(土) 03:22:20
普通に考えて理解出来ないのかな

頂点間でハーフベクトルが補間された値

頂点間で法線、視線、ライトベクトルが補間された値で、ハーフベクトルを算出

後者の方が精度が高いとか言っちゃう奴ってw

786 :デフォルトの名無しさん:2010/03/06(土) 03:22:23
うわっ
>>783が実際に試したことがないことが丸分かりだw

787 :デフォルトの名無しさん:2010/03/06(土) 03:25:42
>>784
出た出たwww
やっぱり勘違いしてるじゃんw

ピクセル単位の法線を、法線マップから拾ってる前提じゃん
フォンシェーディングの話をする時に、法線マップ使うなんて前提する奴はイねーw

788 :デフォルトの名無しさん:2010/03/06(土) 03:28:11
>>786
お前が勘違いしてるんだよ
頂点数が少ない事による差と、頂点計算とピクセル計算の差をごっちゃにしてるだけwww

試して動かしても、大本を勘違いしてるんじゃ話になんねーw

789 :デフォルトの名無しさん:2010/03/06(土) 03:30:21
>>785
どっちが精度が高いか低いかという話は置いておいて、
前者と後者はまったく同じ結果にはならないだろ?

790 :デフォルトの名無しさん:2010/03/06(土) 03:31:58
>>783
> 58頂点のピクセル計算のと1000頂点のピクセル計算した奴を比べたら変わるか?

明らかに変わる

791 :デフォルトの名無しさん:2010/03/06(土) 03:32:16
ようは、その58頂点くらいの球で
頂点でのハーフベクトルでフォンシェーディングするのと
同じ58頂点くらいの球で
ピクセルでハーフベクトルを求めてフォンシェーディングするのと
変わらねーだろってこった

なんで1000頂点と比べて綺麗とか言い出すんだ?w

792 :デフォルトの名無しさん:2010/03/06(土) 03:36:01
>>791
>変わらねーだろってこった

少し変わるよ

793 :デフォルトの名無しさん:2010/03/06(土) 03:36:34
>>789
あんただけだな、まともなのは
確かに同値にはならない

しかし、数学的な理解と、シェーダーの原理と、処理負荷を考えれば
フォンモデルのハーフベクトルを頂点で求めるのも、ピクセルで求めるのも大して変わらない

なんで、ピクセルで求めると良いなんて言い出す奴がいるのか?w
って事だ

794 :デフォルトの名無しさん:2010/03/06(土) 03:40:05
>>793
ここに来て「大して」という修飾語が入って安心した。
まあそう熱くなるなよ。

795 :デフォルトの名無しさん:2010/03/06(土) 03:42:32
specularで特に死ぬんじゃない?


796 :デフォルトの名無しさん:2010/03/06(土) 03:46:25
よほどのローポリじゃない限り、ハーフベクトルの正規化さえちゃんと行えば
>>793の言うとおり「大して変わらない」と思うよ。

797 :デフォルトの名無しさん:2010/03/06(土) 04:09:39
俺も大して変わらないに一票
なんか別の要素を拾って勘違いしてると思う

798 :デフォルトの名無しさん:2010/03/06(土) 04:12:09
誰かがレンダリング画像上げてくれたら解決するんじゃね?

799 :デフォルトの名無しさん:2010/03/06(土) 04:15:22
ここにてマトモな人間が増えて安心した
>>775に間違いを吹き込まれた>>772が不憫だ

800 :デフォルトの名無しさん:2010/03/06(土) 04:25:11
どうせそのうちノーマルマップを張りたくなるんだし、ピクセルシェーダーでやっておけばいい

801 :デフォルトの名無しさん:2010/03/06(土) 04:53:43
>>799
画像まだですか?

802 :デフォルトの名無しさん:2010/03/06(土) 05:02:11
勝手に画像を上げる事にしてしまっている、残念な人がいるなw
プログラマだと思ってたんだが…

これだけ説明して、勘違いも突っ込んでやってるのに
(口と態度が悪いのは認めるw)
画像を求める時点で、企画レベル認定(デザイナより劣る)

例えるなら、バグの原因を説明して、バグじゃないと勘違いしてる所も説明してやってるのに
デバッガでステップ実行をして実際の挙動と数値を見せろ、
と言いだす、プログラマに等しい(俺的にはプログラマじゃないと思うがw)

803 :デフォルトの名無しさん:2010/03/06(土) 06:14:27
DirextX9で回転縮小のある2Dゲームを作ろうと思っていますが
座標変換済みの頂点でいいのでしょうか?
行列計算をして3Dで作ればいいのですか?

804 :デフォルトの名無しさん:2010/03/06(土) 06:33:09
フォンシェーダ比較してみた
http://www5b.biglobe.ne.jp/~mya_a/directx/phong.wmv

法線マップなど使わないシェーダー計算のみです
殆ど変わらないとは言いがたいな
まぁ、どっち使えってことじゃなくて状況や不可を考えて最適な方法を使えって話だけど

805 :デフォルトの名無しさん:2010/03/06(土) 07:05:45
これは分かりやすい
802は口が悪いだけじゃなくて口だけってことが証明されちゃったってことでいいですか?

806 :デフォルトの名無しさん:2010/03/06(土) 07:25:38
>>804
>>805
完全に間違ってるだろw

フォンシェーディングする為に使用するハーフベクトルを、
頂点で作成してピクセルに渡して使用するのと
ピクセルで作成して使用するかの違いの話なのに

804は、完全にフォンとランバートを比べてるってーのw
もうね、全然シェーダー理解してないのが分った

807 :デフォルトの名無しさん:2010/03/06(土) 07:33:16
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) ;

どこがランバート?

809 :デフォルトの名無しさん:2010/03/06(土) 07:48:11
>>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();
}

810 :デフォルトの名無しさん:2010/03/06(土) 07:49:22
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;
}

811 :デフォルトの名無しさん:2010/03/06(土) 08:00:20
>>804
疑うわけじゃないが、一番最初の”VS計算100ポリ”は、明らかにおかしい

理由は、ハイライト部分が、他の場合は回ってないのに
球と一緒に回ってる挙句、点滅してるじゃんw

作為的とまでは言わないがw
明らかに間違ってる

812 :デフォルトの名無しさん:2010/03/06(土) 08:05:44
だからそれが上で散々言われてる低ポリ時の弊害だろ
ハイライト部分が回ってるんじゃなくて
視線側を向いてる頂点付近だけ急激に光ってるから回ってるように見えるだけ

813 :デフォルトの名無しさん:2010/03/06(土) 08:07:11
ランバートじゃなくてグローシェーディングなんじゃね
>>808のVSは版はカラーまで計算しちゃってるから。
今比較したいのはVSでハーフベクトルまでを計算してPSに渡すのと、PSで計算するかなのかと
VSで色まで計算するのとはまた話が違う

814 :デフォルトの名無しさん:2010/03/06(土) 08:12:01
俺には809の方がいわゆるフォンじゃない臭くみえるんだが

815 :デフォルトの名無しさん:2010/03/06(土) 08:13:10
>>812
>低ポリ時の弊害
>視線側を向いてる頂点付近だけ急激に光ってる

全然、理屈が分ってないじゃんw

だから俺の環境だと、もう球じゃなくて8角形にしか見えない低ポリにしても
ポリゴン内のシェーディングは、綺麗なままっだつーのw
しかも、ハイライト部分は動きもしねーしwww

816 :デフォルトの名無しさん:2010/03/06(土) 08:16:59
>>814
だからさ
発言した瞬間に分ってないのがバレるレベルの奴は黙ってればw

>フォンじゃない臭くみえる

いわえるフォンとは、ピクセル側でdot3ライティングをする事
違うと言うなら、ちゃんと理由を言って見ろよwww

817 :デフォルトの名無しさん:2010/03/06(土) 08:20:27
初心者スレで暴れるopenGL使い。なんでそんなにイラついてるの?景気わるいの?

818 :デフォルトの名無しさん:2010/03/06(土) 08:22:13
ところでGLとDirectXでラスタライズの方式が同じって保障あんの?

819 :デフォルトの名無しさん:2010/03/06(土) 10:17:52
面白いからもっとやれw

820 :デフォルトの名無しさん:2010/03/06(土) 10:18:26
すげえところまで巻き戻すんだな

821 :デフォルトの名無しさん:2010/03/06(土) 10:46:22
週末になった途端に臭いのが集まってきたな

822 :デフォルトの名無しさん:2010/03/06(土) 10:47:37
つかほとんど同一人物の自演に見えてしょうがない

823 :デフォルトの名無しさん:2010/03/06(土) 11:40:04
すべて自演だろ。
つうか初心者スレの話題じゃねーだろ。
余所にいけよ、臭いから。

824 :デフォルトの名無しさん:2010/03/06(土) 13:04:43
それほど凄い話題じゃないし、ディベート的で初心者にもためになるだろ
これじゃ議論に負けそうな方が、感情論に走っているだけに見えるぞ

825 :デフォルトの名無しさん:2010/03/06(土) 13:06:17
すみません。ポリゴンの上にキャラを立たせているのですが、
モデル制作ソフト上で、地形を作る時、
ポリゴンを1枚ずつ複製〜反転で繋げると綺麗に歩けるのですが、
ポリゴンを一括して生成(グリッド生成)すると平面ですら異常な事になったり、何もないのに高さが急に飛んだりします。

○×の ttp://marupeke296.com/COL_Basic_No2_ShortTec.html の「斜面に立つには?」を元にコードを書いたのですが、
それだけでは上手く行かず、「y軸の一番低い頂点を基準に計算する」としたら上手く行きました。
これは私が計算方法に、何か勘違いをしているのでしょうか?
もしくは地形モデルの頂点の並び方が問題なのでしょうか?

推測で構いませんのでご指摘頂けると幸いです。

826 :デフォルトの名無しさん:2010/03/06(土) 13:14:10
ここまでやられると初心者的にはどっちが正しいんだか判別がつかない…
ググったりWikiを読んだ限り「ピクセル単位で計算する」のがセオリーっぽい印象を受けたが
とりあえずそういう理解でいいのかな

827 :デフォルトの名無しさん:2010/03/06(土) 13:56:36
>>821-823
2ch技術系スレの膿が出ましたね
アンタらがここをクソスレに下げてるんだよ
自覚はあるか?

828 :デフォルトの名無しさん:2010/03/06(土) 13:57:48
もう蒸し返すなよ

829 :デフォルトの名無しさん:2010/03/06(土) 14:42:03
>>803
2Dポリゴンでやるかスプライトでやればいいよ

830 :デフォルトの名無しさん:2010/03/06(土) 14:47:06
俺も比較してみたよ
ペイントで切り貼りして大変だった
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を正規化した場合だが・・
これはどっちに転ぶのかねえ

831 :デフォルトの名無しさん:2010/03/06(土) 15:02:58
>>829
>2Dポリゴンでやるかスプライトでやればいいよ
ポリゴンには2Dもへったくれもないし、
スプライトにポリゴンを利用するのなら両者に違いがないということになる。
出直してこい。

832 :デフォルトの名無しさん:2010/03/06(土) 15:06:03
DirectShowでテクスチャに動画を書き込ませようと色々人に聞いたり調べまわったりして
断片的な情報が収集できただけで困ってたら、
SDKのサンプルソースが一番わかりやすかったよ……orz

ビルドしただけですぐ動いたし。

833 :デフォルトの名無しさん:2010/03/06(土) 16:15:58
サンプルも触らないうちから人に聞くなよ

834 :デフォルトの名無しさん:2010/03/06(土) 16:17:57
その通りですね。ごめんなさい。

835 :デフォルトの名無しさん:2010/03/06(土) 16:57:23
>>829
>>831
結局、どうすればいいのでしょうか
今このサイトの第12章 ポリゴンを行列で管理するを元に
http://rina.jpn.ph/~rance/directx8/
座標変換済みの頂点を使うスプライトを自作しているのですがそれだと効率が悪いですか?


836 :デフォルトの名無しさん:2010/03/06(土) 17:19:05
>>835
「座標変換済みの頂点にして使っている」のか「座標変換済みの頂点を使っている」のどっち?


837 :デフォルトの名無しさん:2010/03/06(土) 17:25:13
>>836
「座標変換済みの頂点を使っている」のですが
3Dで行列計算をした「座標変換済みの頂点にして使っている」の方が楽に作れる(回転・拡縮)かもしれないと思って聞きました

838 :デフォルトの名無しさん:2010/03/06(土) 17:26:17
>>353
どうせ計算量なんてたかがしれているんだから、好きな方法でかまわない。

839 :デフォルトの名無しさん:2010/03/06(土) 17:33:48
>>837
回転と拡縮は基本的にどちらも同じような処理が必要。
トランスフォーム済み頂点であればビュー行列を意識する必要が無いので
コードが若干少なくなるしデバッグもやりやすいよ。

840 :デフォルトの名無しさん:2010/03/06(土) 17:35:51
>>837
そもそも変換済みだろうとなかろうと、行列で計算は出来るし、
結局はきちんと計算そのものを理解しているかどうか。
変換済みでも中心を切り替える成分を混ぜておけば、好きなように再変換できる。
ぶっちゃけ計算そのものを理解していない奴は、
やり方が分かっていないんだから何をやろうと不便なのは当たり前。

841 :デフォルトの名無しさん:2010/03/06(土) 17:44:38
とりあえずこのまま座標変換済み頂点で作ろうと思います

842 :デフォルトの名無しさん:2010/03/06(土) 18:08:56
たいがいの場合利点がどうこう言う奴は、
根本的に自分で調べるのが面倒で、
現在のやり方に乗り換えなくていい理由を探すために質問する。

大した手間じゃないんだから両方やってみればいいだけなのに、
言い訳を探して永遠に成長しない人間なんだよね。

843 :デフォルトの名無しさん:2010/03/06(土) 18:15:58
>>842
>大した手間じゃない
そんなに簡単に出来たら質問しませんよ

844 :デフォルトの名無しさん:2010/03/06(土) 18:19:42
>>843
いや、こんなもんもできないんじゃゲームなんて作るの面倒臭くて面倒臭くてたまんないだろ

845 :デフォルトの名無しさん:2010/03/06(土) 18:24:26
普通は最初にDirect3Dの実験する過程で両方やるだろう。
チュートリアルすらやってないのか?
どれだけ怠け者なんだよ。

846 :デフォルトの名無しさん:2010/03/06(土) 18:25:40
日本人にヘルプを読まない文化を植えつけたのは実はMS。

847 :デフォルトの名無しさん:2010/03/06(土) 18:50:17
>>845
チュートリアルはやりましたよ
でないと座標変換済み頂点と未変換かなんて思いつかないでしょ?
でも特性を理解して使いこなすにはあれだけでは不十分だと思いますよ

848 :デフォルトの名無しさん:2010/03/06(土) 18:53:02
まーた説教レスとゆとり返しレスで埋まるのかよ。荒らしじゃなきゃ絶望すぐる。
>>825をスルーするしたのは見事だと思ってた矢先にこれだよ!

>>825
異常値が出るときの、面法線VとP0、cxcyは書けるかい?

849 :デフォルトの名無しさん:2010/03/06(土) 19:21:24
>>847
試せ。差は確かにある。

850 :デフォルトの名無しさん:2010/03/06(土) 19:26:13
なんというか>>843の内容が非常に残念。
初心者でもこの程度の処理を書くのが簡単ではないのであればプログラミングをしなければいいのに。

851 :チラ裏:2010/03/06(土) 19:40:15
ああああああああああああああああぁぁぁぁ
座標変換難しいようようょぅ
あたり判定とかレイとかデバッグしにくいようようょぅ

852 :デフォルトの名無しさん:2010/03/06(土) 20:36:54
>>846
それはわかるw
ヘルプが何言ってんだかさっぱりだったなww
イルカとかなw

853 :デフォルトの名無しさん:2010/03/06(土) 20:38:24
つうか初心者スレでこの対応はねーわな。
上から目線でしか喋らない奴はもうこのスレから消えればいいんじゃない?
そうやって初心者排除して何したいのだろうね。

854 :デフォルトの名無しさん:2010/03/06(土) 20:42:16
>>853
だが、どこで彼等を修正するんだ?
俺はいまぐらいで調度いいと思うんだが?

855 :デフォルトの名無しさん:2010/03/06(土) 20:44:02
会社に入って同じようなことしたら
同僚は問答無用で潰しにくる
ゲーPGに限らず、上司は自分では気軽に聞くくせに部下や他の人間にはそれを許さない

856 :デフォルトの名無しさん:2010/03/06(土) 20:45:52
人間は権力という力に魅了されてしまうからね・・・

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

858 :デフォルトの名無しさん:2010/03/06(土) 21:40:27
>>830はうそ臭いな
1ドットの狂いも無く一緒になるわけないがな

859 :デフォルトの名無しさん:2010/03/06(土) 21:57:33
シェーダーの数式を理解するのに必要なのは数学の知識?物理学?


860 :デフォルトの名無しさん:2010/03/06(土) 22:05:12
行列やベクトルの計算方法は数学だろうけど、
「なぜ」その計算を行うのか、その計算が「なに」を意味しているか、を理解するには物理の素養が必要だろうね。

861 :デフォルトの名無しさん:2010/03/06(土) 22:08:52
ところで同僚同士で潰し合う会社ってどこのこと?

862 :デフォルトの名無しさん:2010/03/06(土) 22:09:54
>>857
言わない俺が悪い時代かも知れんが、答えも書きんさいw
エスパーすると、yとz取り違えているんじゃね?下の式見て、コードの変数全て確認してみそ

高さ = P0[y] + (-Vx * ( cx - P0[x] ) - Vz * ( cz - P0[z] ) ) / Vy

863 :デフォルトの名無しさん:2010/03/06(土) 23:17:16
>>858
いやちゃんと式も書いてるでしょ
同じになるんだよ
16bitカラーなんで、細かい違いが吸収されてるかもしれんが

864 :デフォルトの名無しさん:2010/03/06(土) 23:50:31
頂点単位のスペキュラの問題点は、頂点の輝度を補間して各ピクセルの輝度を計算しているため、メッシュが粗い場合にはスペキュラに不自然なジャギーが出てしまうことです

865 :デフォルトの名無しさん:2010/03/07(日) 00:29:44
>>863
ソースごとうp

866 :デフォルトの名無しさん:2010/03/07(日) 00:32:28
昔は今ほど3Dの技術も多彩じゃなかったし
Bio100%とかBBXがちゃんと機能してたからなぁ・・・。

867 :デフォルトの名無しさん:2010/03/07(日) 00:51:58
>>830
前者のVS版(頂点シェーダ側でハーフベクトルを計算するケース)では、
H = L + V を正規化せずにそのままラスタライザの線形補間処理に渡してるんだね。
これなら確かにPS版と数式的に完全に一致する。

もしVS版で H = normalize(L + V) としてからラスタライザに渡したり、
あるいは>>830で言及しているようにPS版で H = normzlize(normalize(L) + normalize(V))
というようにLとVを個別に正規化してからハーフベクトルを計算したりすれば、
両者の数式が一致しなくなるから、ローポリなら目に見える程度のわずかな違いは出てくると思う。

868 :デフォルトの名無しさん:2010/03/07(日) 01:18:52
XInputとDirectInputってXInputの使用が推奨されてるの?
ゲーム的に

869 :デフォルトの名無しさん:2010/03/07(日) 02:53:37
XInputってXbox 360パッドしか使えないらしいから
両方使うのが推奨じゃないかと思うけど、どうなんだろうね

870 :825:2010/03/07(日) 10:44:36
>>862
ご助言ありがとうございます。式を確認させて頂いたのですが大丈夫なようで、
手前にご指摘頂いた面法線が下を向いている事から
どうやらエディタのバグで、背面非表示モードで作り安心していたものの
特定の操作をしたポリゴンは、出力時に法線方向が反転して書き出されている様でした orz
開発環境で背面カリングを有効にしてなかった自分も自分・・orz
お騒がせして申し訳ありません、解決に至らせて頂きありがとうございましたっ;

871 :デフォルトの名無しさん:2010/03/07(日) 12:04:22
>>869
いや最近はそうでもない。
各メーカーがXInput対応のパッドを順次リリースしてる。

872 :デフォルトの名無しさん:2010/03/07(日) 12:42:51
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()が実行された後なので、文字生成したときにデプス関係の設定が変わってしまうのかと予測を立てていますが、解決策が分かりません。
すべき設定や間違っていそうなところ、サンプルコード等ありましたら教えて下さい。よろしくお願いします。

873 :デフォルトの名無しさん:2010/03/07(日) 13:56:47
>>872
PIXで追ってみるっと分かるが
内部で勝手にOMSetDepthStencilState、OMSetDepthStencilStateが呼ばれてる
箱を書いてるシェーダーでステートをきちんと指定してやるか
うろ覚えだがSpriteのBegin辺りでEndでステートを復元するフラグがあったような気がする

874 :デフォルトの名無しさん:2010/03/07(日) 16:07:07
>>864
このタイミングで、お前見たいな知ったかが一番性質が悪い

今問題にしてるのは、スペキュラ計算はピクセル毎にするが、その為の係数を
頂点毎に求めてピクセルに渡すか、ピクセル毎に求めるかって話しなんだよ
ポリゴンが荒くとも結果は、ほとんど同じなんだよ

お前の話は、頂点でスペキュラ値を求めて、それをピクセル側で使う場合の話なの

この問題、始めか理解出来てない奴ばっかりだなw

875 :デフォルトの名無しさん:2010/03/07(日) 16:11:35
>>873
DepthStencilStateを設定することで表示することができるようになりました。
復元フラグは試していたのですが、どちらにせよ1回はステートをセットしてやらないと意味がなかったですね。

実はPIXがどういったものか知らず、デバッグの仕方がよく分からないという状況だったのですごく助かりました。
ありがとうございました。

876 :デフォルトの名無しさん:2010/03/07(日) 17:10:58
Direct3Dとはちょっと離れるのですが、FBXファイルを読み込み時に
トライアングルに変換してくれるメソッドってないのでしょうか?

877 :デフォルトの名無しさん:2010/03/07(日) 17:20:28
2009Augで開発していたプロジェクトを2010Febに差し替えたらコンパイル出来なくなってしまいました。
リンカの設定もFebに変えてあります。
他に何が原因でしょうか?
ちなみにコンパイルしようとしたプログラムはDrawTextでHello worldを表示するだけのもの(一般的なサンプルと同じく余計なコードはありません)です。

878 :デフォルトの名無しさん:2010/03/07(日) 17:22:47
コンパイルができないならコンパイルエラーの内容くらい書きましょう。

879 :デフォルトの名無しさん:2010/03/07(日) 18:05:22
>>831
いや、それくらいはわかるよ


880 :デフォルトの名無しさん:2010/03/07(日) 19:44:49
エスパーするなら、"Hello World"を_T("Hello World")に変えれば良いかと

881 :デフォルトの名無しさん:2010/03/07(日) 19:58:48
じゃあオレもエスパーしてみる
リビルドしてないとか

882 :デフォルトの名無しさん:2010/03/07(日) 22:35:25
>>876
ある

883 :デフォルトの名無しさん:2010/03/07(日) 23:41:16
>>876
ない

884 :デフォルトの名無しさん:2010/03/07(日) 23:47:35
メッシュクラスなるものを作ったんですけど、これが描画を担当するべきですか?
ちなみにメッシュクラスは頂点バッファとマテリアル情報を持っています。

885 :デフォルトの名無しさん:2010/03/08(月) 00:02:06
>>363-365

886 :デフォルトの名無しさん:2010/03/08(月) 00:04:35
>>884
同じものを同時に10個表示しようとした時に
10個メッシュクラスを作らないといけないような作りになってなければいいんじゃない?
特にそれぞれが違うアニメーションしてたり
違うシェーダーでレンダリングしたりする場合に特に問題がないかどうか

887 :デフォルトの名無しさん:2010/03/08(月) 00:49:32
KFbxGeometryConverter::TriangulateInPlace

888 :デフォルトの名無しさん:2010/03/08(月) 01:12:43
メッシュクラスに豪華機能の描画関数が条件分岐の塊になって、わけ分からなくなって破綻した経験がある。
DrawSubset程度の基礎機能しか持たないほうがいいよ。マテリアルをどう解釈するかは外部に出した。

889 :デフォルトの名無しさん:2010/03/08(月) 01:54:31
メッシュと描画クラスは分けた方がいい。
で、必要に応じて描画クラスを使い分けるようにすると、一つ一つの描画クラスは単純な実装にできる。

890 :デフォルトの名無しさん:2010/03/08(月) 06:32:15
今ちょうど自分もその部分で悩んでる。
モデル(メッシュ)とシェーダは分けて、それぞれを他と共有、組み合わせられるようにして、
おおよそよい感じになってるんだけど、
シェーダが必要とするシェーダ変数を持ってるのが、シェーダ自身、モデル、モデルに位置や向きを
あたえるキャラクタ等に分散していて、しかもそれらをSetするタイミングが違う
(例えば、アニメーションモデルなら、ボーン毎にDrawSubsetするタイミングで合成行列を
シェーダ変数にセットする)ので、どこか一つのクラスで一元的にシェーダ変数を管理できない・・・

あまり結合度を上げたくないが、現状ではうまく組み合わせたときに正しく動くことを期待した組み方
(例えば、モデル側で勝手にシェーダ変数をpEff->SetXXXでセットしようとするが、
それがシェーダにあるか保障されていない)になってしまっている。

何とか動いてるけど、もっとキレイな設計ないかな・・・

891 :デフォルトの名無しさん:2010/03/08(月) 12:15:40
えー、俺の所 Mesh.render() が全部やってるお。
もっとも単純な描画はメンバー変数の Material.render() に丸投げだが、
Mesh.animate()がもの凄いぐちゃぐちゃと書き換えるのが普通に死ねる。

892 :デフォルトの名無しさん:2010/03/08(月) 12:30:15
>>887
ありがとうございます。
メッシュにありそうな過去ログがあったので、そのあたり調べてました。

893 :デフォルトの名無しさん:2010/03/08(月) 17:37:49
ゲームに使うシェーダーを最初から決めて作れば簡単かな
べつに3DCGソフト作るわけじゃないし

894 :890:2010/03/08(月) 19:00:25
>>891
>>893
なるほど・・・。
やはりどこかで落とし所が必要だよね。
ちょっと拡張性にこだわりすぎてた気がするよ。
参考になった。
ありがとう。

895 :デフォルトの名無しさん:2010/03/08(月) 19:00:43
俺はMeshクラスはただのデータの塊でしかないな
Meshのインスタンスを描画クラスのメソッドに引数にぶち込むと描画されるようにしてる

896 :デフォルトの名無しさん:2010/03/09(火) 04:57:09
すみません
D3DXLoadMeshHierarchyFromXでのメッシュの頂点色についてなのですが、
・メッシュのファイル内には、ちゃんと頂点色のデータが存在している。
・描画時にHLSLへ頂点色を後付で送れば、その色が足されて描画される。
・何もしないとファイルに設定した頂点色が反映されず、モノクロテクスチャのまま。
こういう状態です。

読み込み部分であるはずの仮想関数のCreateMeshContainerを見ると
どうも頂点色(Diffuse)を読み込む記述が無いように見えるのですが、
やはり具体的に頂点色(Diffuse)を取得する記述が無いという事は
取得がされていないという事なのでしょうか?
何かご指摘を頂けると助かります。 よろしくお願いします。。

897 :デフォルトの名無しさん:2010/03/09(火) 06:58:52
マテリアルカラーと頂点カラーをごっちゃにしてないか?
良くあるサンプルで見かけるのはマテリアルカラーを
Diffuseとしてシェーダーとして送ってるけど

とりあえず読み込んだメッシュの頂点フォーマットを調べて
頂点カラーがあるかどうか確認する
あれば頂点シェーダーに入力されるCOLOR0で拾えるはずだけど

898 :デフォルトの名無しさん:2010/03/09(火) 15:32:16
>>896
進研模試の偏差値でいうと2ちゃんねるのニュース速報がおよそ45、民放地上波の報道ステーションが約40、
ニュース速報+は35程度の読者を想定しています。

899 :デフォルトの名無しさん:2010/03/09(火) 18:25:17
開発環境:XPSP3、VisualStudio2008
稼働環境:XPSP3、DirectX 9.0c ランタイム

今ならDirectXのSDKはどれを落とせばいいんでしょうか。

900 :デフォルトの名無しさん:2010/03/09(火) 18:29:23
February 2010

901 :デフォルトの名無しさん:2010/03/09(火) 19:55:06
>>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

903 :デフォルトの名無しさん:2010/03/09(火) 21:36:14
>>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


905 :デフォルトの名無しさん:2010/03/09(火) 23:41:55
>>904
頂点シェーダー入力情報に色情報を追加して
シェーダー内でブレンドするなりなんなりと

struct VS_INPUT
{
float4 Pos : POSITION;
float4 BlendWeights : BLENDWEIGHT;
float4 BlendIndices : BLENDINDICES;
float3 Normal : NORMAL;
float3 Tex0 : TEXCOORD0;

float4 Color : COLOR0;// これ
};

906 :デフォルトの名無しさん:2010/03/10(水) 00:37:09
クラス設計で参考になるかも。。。
http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter05.html


907 :904:2010/03/10(水) 19:10:31
>>905-906
ありがとうございます。色々とテストし続けた結果、頂点カラーの確認ができ、
RGB値が0か255以外の値は全て255になって読み込まれている事が解りました。
変に微調整した色を使うとなぜか全て255,255,255へ。。
何か読み込む段階で問題が有りそうな事に・・色々ご助言ありがとうございました。

英文・・苦手ですが、いつか目を通せればと思います。HLSLも勉強しなければ。。
ありがとうございました。


908 :デフォルトの名無しさん:2010/03/11(木) 14:14:57
0.0〜1.0じゃないのか?

909 :デフォルトの名無しさん:2010/03/11(木) 15:18:59
シェーダープログラム内でprintデバッグみたいなことって出来ないよね

910 :デフォルトの名無しさん:2010/03/11(木) 19:00:57
PIX使うとか、エフェクトファイルの呼び出し元から変数を与えてもらってそこに書くのも1つの手ではあるかも。

911 :デフォルトの名無しさん:2010/03/11(木) 19:31:43
>>910
レスありがとうございます

912 :デフォルトの名無しさん:2010/03/12(金) 10:34:08
directdrowはいずれ消える予定なのでしょうか?
2Dゲームを作ろうと思うのですが、3D関係を習得して2Dを作ったほうが良いのでしょうか

913 :デフォルトの名無しさん:2010/03/12(金) 10:38:21
>directdrow
消えるも何もそんなモノはない

914 :デフォルトの名無しさん:2010/03/12(金) 10:49:37
drawだろw
当分消えないと思うけど、バージョンアップの見込みが低いと思う
両方覚えた方がいい


915 :デフォルトの名無しさん:2010/03/12(金) 11:50:43
半透明処理がやりたいとか回転がやりたいとか要望に対応できないので
Direct3Dに慣れといた方がいいと思うの

916 :デフォルトの名無しさん:2010/03/12(金) 12:01:12
デバイスロストとか面倒くさいからDX11から始めるのお勧め

917 :デフォルトの名無しさん:2010/03/12(金) 12:03:39
10以降はメモリ使用量意識しなくていいのはすごく助かる
スワップしないように意識した方がいいのはもちろんだけど確保失敗しないところがいい

918 :デフォルトの名無しさん:2010/03/12(金) 12:11:28
2Dか3Dかという話の中でDirect3Dのバージョンの話を始める奴は、
リアルでも会話の流れを無理矢理自分の進めたい話に持って行こうとして、
空気の読めない奴だと周りから思われているんだろうね。

919 :デフォルトの名無しさん:2010/03/12(金) 12:29:32
別にその話はもう終わってるからいいだろ

920 :デフォルトの名無しさん:2010/03/12(金) 17:54:21
MSDNにDX11の資料が無いのは何故ですか?

921 :デフォルトの名無しさん:2010/03/12(金) 18:23:33
英語であるじゃん

922 :デフォルトの名無しさん:2010/03/12(金) 18:32:43
英語ではある。しかしながら、日本語では無い。

ということでよろしいのですね?

923 :デフォルトの名無しさん:2010/03/12(金) 19:10:10
August 2008の日本語訳が来たのがほぼ1年前
今の英語サイトがAugust 2009だからそろそろ来てもいい気がするが…
Direct2DやらDirectWriteやら項目が増えてるからまだ放置されるかもな

924 :デフォルトの名無しさん:2010/03/12(金) 21:31:55
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では回転が出来ていました。どなたかご教授願います。

925 :デフォルトの名無しさん:2010/03/12(金) 21:34:32
D3DFMT_A8R8G8B8で半透明にしてたテクスチャが、
デバイスロスト復帰後は透明じゃなくなりました。

D3DPOOL_MANAGEDは復元で元のフォーマットを考慮してくれないんでしょうか?

DirectX9です

926 :925:2010/03/12(金) 21:38:05
ごめんなさい原因が分かりました。
レンダリングステートの関係でした。

927 :デフォルトの名無しさん:2010/03/12(金) 21:44:53
>>924
何がやりたいのか良く分からんが
三角の面とカメラが同時に回ってるから
いくら回しても同じ面しか映らないぞ

928 :924:2010/03/12(金) 22:12:29
>>927
一人称視点・三人称視点が切り替え可能なガンシューティングを作ろうと思っていました。
自キャラを表示した後
D3DXMatrixTranslation(&matWorldm,0,0,0);
pDevice->SetTransform(D3DTS_WORLD,&matWorldm);
とさっきのコードの下に書き加え三角形を表示したところうまくいきました。
キャラ表示用の設定のまま三角形を描画していたのですね。
非常にお早い返答ありがとうございました。また、説明不足で申し訳ありませんでした。

929 :デフォルトの名無しさん:2010/03/12(金) 22:44:20
DirectXでゲーム開発を行うにはどの程度のPCがひつようですか?

930 :デフォルトの名無しさん:2010/03/12(金) 22:48:11
>>929
http://hardware-navi.com/gpu.php

931 :デフォルトの名無しさん:2010/03/12(金) 22:58:27
>>916
え!?DX11はデバイスロスト対策いらないの!?
これはでかい・・・!

932 :デフォルトの名無しさん:2010/03/12(金) 23:16:14
しかし奴らはXPを使っている

933 :デフォルトの名無しさん:2010/03/12(金) 23:28:56
質問させて頂きます。
オンラインゲームや一般のゲーム(DirectXで開発をしているもの)で
ゲーム内ウィンドウをどうやって実装しているのか分かりません。
WIN32APIなどの関数が使えるわけでもないので、どうすればいいでしょうか?

934 :デフォルトの名無しさん:2010/03/12(金) 23:40:25
一番単純なのはふち無しウインドウでやること。
手間かがかかるのは、APIでインプットを取ってきて自前実装すること。
当たり判定とかは得意でしょ?


935 :デフォルトの名無しさん:2010/03/12(金) 23:44:13
>>933
実際に作ってみれば分かるが、ゲームで使うウインドウシステムなんて
自分で作ってもそんなに難しくない。

936 :デフォルトの名無しさん:2010/03/12(金) 23:44:30
>>933
マウスで「つまむ」、「ドラッグする」という動作を実装するだけ。
あとはマウスの状態によって「ウィンドウ」の描画状態を変更するだけだからそれほど難しいことではない。

937 :デフォルトの名無しさん:2010/03/12(金) 23:48:28
ウィンドウに関しては、お決まりの書き方があって、訳が分からなくても、
とりあえず、こう書きゃ動くくらいに考えたら簡単だよ。

938 :デフォルトの名無しさん:2010/03/12(金) 23:53:14
SteamのオーバーレイのGUIだと、WindowsのGUIをそのまんまリダイレクトして実装しているみたいだけど、やり方は知らん。

939 :933:2010/03/13(土) 00:12:25
なるほどー
作り始めているんですけど、なかなか私の能力だけじゃ難しくて…
各イベントのメッセージなど、どうすればいいのか全く検討がつかないです。


940 :デフォルトの名無しさん:2010/03/13(土) 13:03:55
普通にそれぞれが独立して順次1フレームに一回処理をするオブジェクトを
複数走らせられるようなシステムにしとけばいい気がするけどな
変にマルチに動かれると複数のウィンドウから同時に同一の情報にアクセスしたときに起こる、
みたいな再現性の無い変なバグ引き起こすことあるし

941 :デフォルトの名無しさん:2010/03/13(土) 13:53:52
いまさらながらDirectX7で作りたいのですが
DX7の最新のsdk(ver7.1?)ってもう手に入らないのですかね?
せめてヘッダやライブラリがあればいいのですが、最新のDirectX SDKには含まれていませんでした

942 :デフォルトの名無しさん:2010/03/13(土) 14:15:48
古本なり専門書店で7時代の本買ってきて
付属のCD-ROMから入れるしかないんじゃないか?
もう公式はもちろんアングラな場所からも消えてから大分経つよ

943 :デフォルトの名無しさん:2010/03/13(土) 14:49:01
いや、そこまでさかのぼらなくても
8以前とかmusicとかの過去のコンポーネントが削除されたのはNovember2007だから
サンプルとか抜きにして作りたいだけならAugust2007でいける
August2007が今DL出来るかどうかは知らんが

944 :デフォルトの名無しさん:2010/03/13(土) 14:52:31
DX7というと、機種依存が入りそうな微妙なバージョンだな。
ヘッダは最新のSDKにも入ってるだろ。
消えたのはDX8関係。これは2007 August辺りが最後だと思う。

945 :デフォルトの名無しさん:2010/03/13(土) 14:56:39
質問おねがいします

拡張したマテリアル情報を含んだXファイルを保存しようとしているのですが

D3DXSaveMeshHierarchyToFile()関数に
ID3DXSaveUserDataに実装したものを渡して処理しているのですが

デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
登録して保存してみても、デフォルトテンプレートのMaterialと
カスタムテンプレートのMaterial情報が保存されてしまい思った用に処理できません

デフォルトテンプレートでの処理を上書き処理についてご教授おねがいします

946 :デフォルトの名無しさん:2010/03/13(土) 17:49:31
>>942
>>943
ありがとうございます
August2007探してみます

>>944
ddraw.hはあるのですが、d3d.hやd3dx〜.hが無いんです
同様にライブラリもddraw.libはあってもd3d関連のが…

947 :デフォルトの名無しさん:2010/03/13(土) 18:05:48
今更dx7やるくらいならGDI叩くかdx9以降を触った方がいい気がしなくも無い

948 :デフォルトの名無しさん:2010/03/13(土) 18:16:51
dx7やdx8世代のビデオカードでもdx9で固定機能パイプラインだけを使うなら動作するんでしょうか?
dx7のHwTnLもどういう扱いになるのか気になります

949 :デフォルトの名無しさん:2010/03/13(土) 18:24:26
動くよ

950 :デフォルトの名無しさん:2010/03/13(土) 18:55:10
>>945
テンプレートの登録はちゃんとカスタムのMaterialにしてるの?
RegisterTemplatesあたりだと思うが

>デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
デフォルトMaterialのGUIDは、デフォルトMaterialだけのものだから
こういうことはやっちゃいけない気がするが・・

951 :デフォルトの名無しさん:2010/03/13(土) 20:13:03
というか、今更「dx7やdx8世代のビデオカード」みたいなブツをどうやって入手するかの方が謎だぜ。

952 :デフォルトの名無しさん:2010/03/13(土) 20:15:27
俺のPCにささってるぜ

953 :デフォルトの名無しさん:2010/03/13(土) 20:22:43
ワールド座標のレイをワールド座標(回転拡大縮小平行移動後)のメッシュと交差判定させるにはどう変換したらいいんでしょうか?
無変換だとワールド座標の原点(メッシュのローカル座標?)を中心としたメッシュの空間にヒットします。
レイの座標やベクトルにワールド(逆)変換をかけても原点を中心とした空間にしかヒットしません。

954 :デフォルトの名無しさん:2010/03/13(土) 20:29:10
その後にヒットした座標を座標変換

955 :デフォルトの名無しさん:2010/03/13(土) 21:32:16
Aug09からFeb10に差し替えたところソフトウェアですら初期化できなくなりました。
2000年頃のRadeonです

956 :デフォルトの名無しさん:2010/03/13(土) 21:51:08
>>955
うむ、報告ごくろう

957 :953:2010/03/13(土) 22:03:29
>>954
レスありがとうございます。
距離情報等が欲しいのですが、
http://www.toymaker.info/Games/html/picking.html
のRay - Mesh Intersection testのようにレイを動かしての取得は出来ませんか?

958 :デフォルトの名無しさん:2010/03/13(土) 22:38:24
meshに適用してる行列の逆行列をrayに掛けて
rayをmeshのローカル空間にもってくる

交差判定、交点を求める

交点にmeshに適用してる行列を掛ける

959 :デフォルトの名無しさん:2010/03/13(土) 22:48:52
>>950
はい、ID3DXFile::RegisterTemplatesを使ってテンプレートを登録しています

マテリアル保存の処理を置き換えた処理をしたくて

カスタムマテリアルテンプレートをオリジナルのGUIDで登録

デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される

カスタムのマテリアルテンプレートをデフォルトのGUIDで登録

デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される

といった動作になってしまうので悩んでいます
ID3DXSaveUserDataは新たな要素を保存するメソッドを追加するだけで
既存の処理を置き換えるってことは出来ないんでしょうか?


960 :デフォルトの名無しさん:2010/03/14(日) 02:08:20
Feb10でd3dref9.dll削除されたんですか?

961 :デフォルトの名無しさん:2010/03/14(日) 03:07:15
お前は>>955
それグラボ関係無いじゃん

962 :953:2010/03/14(日) 10:16:09
>>958
なんとか出来ました。ありがとうございました。

963 :デフォルトの名無しさん:2010/03/15(月) 14:15:07
>>923
August 2008に更新される前は、April 2006のまま超長期放置されていた事を忘れていないか?

964 :デフォルトの名無しさん:2010/03/15(月) 14:16:38
April 2006どころじゃねーや、October 2004だった

965 :デフォルトの名無しさん:2010/03/15(月) 15:23:04
それは英語版も一緒だから

966 :デフォルトの名無しさん:2010/03/15(月) 15:35:08
英語版はSDK付属のヘルプが毎回更新されてるだろうが
前提条件が違う

967 :デフォルトの名無しさん:2010/03/15(月) 15:41:44
2008のヘルプファイルって無いの?WEBだと重くて、、、

968 :デフォルトの名無しさん:2010/03/15(月) 16:06:24
http://www.microsoft.com/downloads/en/default.aspx

969 :デフォルトの名無しさん:2010/03/15(月) 16:13:48
最新の機能を使う必要がある人は嫌でも英語読めるようになるし
使わない人はoct2004使っとけばいい

何も問題ないな

970 :デフォルトの名無しさん:2010/03/15(月) 17:10:51
マイクロソフトもソフトウェア業界もそーやって自助努力100%で放置した結果、
日本の開発力はガタガタに落ちたというか英語圏に引き離される一方

971 :デフォルトの名無しさん:2010/03/15(月) 17:18:47
日本のゲーム会社はなーんにもやらないのな

972 :デフォルトの名無しさん:2010/03/15(月) 17:19:49
単に英語読めるようになればいいだけの話では

973 :デフォルトの名無しさん:2010/03/15(月) 17:40:25
その単にが大多数の日本人には思いの他でかい壁になっていて、現実に深刻な影響が出ているってことだろ

974 :デフォルトの名無しさん:2010/03/15(月) 17:57:46
深刻な影響ねぇ

975 :デフォルトの名無しさん:2010/03/15(月) 18:02:36
英語読めなきゃ最新情報追えないのはDirectXに限らず当たり前の話だと思うが
ゲーム会社の英語力はそんなにズバ抜けてヤバいのか?

976 :デフォルトの名無しさん:2010/03/15(月) 18:25:10
ミドルウエアより上のレイヤーしか触たことないひとでも、ゲームは作れるんじゃね?
だから、英語力なんかつくわけない。

977 :デフォルトの名無しさん:2010/03/15(月) 18:34:15
英語読めなくても英語できる優秀な人が厳選された良質な情報だけを日本語に訳して提供してくれればOK

978 :デフォルトの名無しさん:2010/03/15(月) 18:56:13
ぶっちゃけ大手のゲーム会社のプログラマーの試験で英語が出て来た記憶が無い。
中学生レベルの一般常識+高卒レベルの数学と物理、
入社してから英語を学ぶ機会があるのはリーダー以上や社外の人と会うプランナーぐらい。

PS3なんかツールやライブラリがSCEE頼みで、SCEJは何もしてくれないから困る。
それに比べればMSはかなり親切なほうだと思う。


979 :デフォルトの名無しさん:2010/03/15(月) 19:17:29
ソニー系の開発環境がタコなのはもはや病気のレベルだよね……。

980 :デフォルトの名無しさん:2010/03/15(月) 19:47:45
VGA(4:3)で開発しているゲームをFWVGA(16:9)でフルスクリーン表示にした場合どの用に表示されるのでしょうか?
横に伸びてしまう?

981 :デフォルトの名無しさん:2010/03/15(月) 20:12:45
GeForceだとこんな設定がある
・ドットバイドット
・アス比保ったまま引き伸ばす
・保たず引き伸ばす
・モニターに任せる

982 :デフォルトの名無しさん:2010/03/15(月) 20:22:09
開発者側が気にすることはないということですかね?

983 :デフォルトの名無しさん:2010/03/15(月) 20:47:17
>>982
ビデオカードのスケーリング機能は、NVIDIAのドライバがポンコツなせいで
動かないことが多いので、気にする余裕があるならした方がいい。

とりあえず、ウインドウモードでウインドウサイズを変えれるようにしてあれば
苦情は来ないと思う。
ポインティングデバイスを使うソフトだと面倒だけどね。

984 :デフォルトの名無しさん:2010/03/15(月) 21:31:47
このスレにはプロが居るんですね
ありがたや

985 :デフォルトの名無しさん:2010/03/15(月) 21:37:24
失礼な奴だな。

986 :デフォルトの名無しさん:2010/03/16(火) 03:06:53
>>908
アクセス規制に巻き込まれて返事遅れましたが、その通りでした。ありがとうございます。

987 :デフォルトの名無しさん:2010/03/16(火) 17:09:40
SCEIのツール&ライブライに不満があるなら自分で作ってSCEIに
これをフリーで提供しますのでPS系の標準にしてくれませんか、
という提案をすべき。

988 :デフォルトの名無しさん:2010/03/16(火) 17:16:24
ナムコかよ

989 :デフォルトの名無しさん:2010/03/16(火) 17:17:01
ゲーム会社でもDirectXのヘルプファイル見るの?

990 :デフォルトの名無しさん:2010/03/16(火) 18:17:17
見てますん

991 :デフォルトの名無しさん:2010/03/16(火) 20:30:20
>>987
ツールやライブラリ以前に開発機材の管理からSCEE頼みだから提案するにも根本的にだな・・
>>989
むしろ全て頭に入っているプログラマがいたら教えてくれ、歩く辞書と名づけるわw

992 :デフォルトの名無しさん:2010/03/16(火) 20:53:13
次スレ立てようとしたら、いつの間にか立ってた

【C++】 DirectX初心者質問スレ Part28 【C】
http://pc12.2ch.net/test/read.cgi/tech/1268666208/

251 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)