トップページ⇒tech
1001コメント284KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/09/30(木) 21:45:21
※回答する人も、質問する人も必ず読んでください

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

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

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

前スレ
【C++】 DirectX初心者質問スレ Part30 【C】
http://hibari.2ch.net/test/read.cgi/tech/1278214135/
0505デフォルトの名無しさん2010/10/15(金) 17:13:04
勉強とおもっているうちはゲームを作れない。
0506デフォルトの名無しさん2010/10/15(金) 17:21:25
早くMMDが作れるようになりたいよぉ
0507デフォルトの名無しさん2010/10/15(金) 17:36:14
答えになってないんですが。

勉強と思わなくなるのにどれぐらいかかりましたか?
0508デフォルトの名無しさん2010/10/15(金) 17:38:36
>>507
10年
0509デフォルトの名無しさん2010/10/15(金) 17:40:24
ゲームを作るだけなら勉強と同時進行で出来たしそれなりのものも作れた
しかしDirectXを理解してきたなぁと実感できるようになるまでには5年かかった
0510デフォルトの名無しさん2010/10/15(金) 17:41:26
マジすか・・。

数ヶ月でマスターなんて無理なんですかね・・・・
0511デフォルトの名無しさん2010/10/15(金) 17:42:57
まぁ個人差あるだろうね。。。
俺みたいな馬鹿だと20年掛かるかもしれない
0512デフォルトの名無しさん2010/10/15(金) 17:44:54
まあいい。私は不可能を可能にする男だ。
0513デフォルトの名無しさん2010/10/15(金) 17:49:08
勉強してマスターしようなんて土台無理な話
とにかく手を動かして何度も失敗して試行錯誤していくうちに身につくもの

最初はどんなにショボくても何か形になるものを仕上げた方がいいよ
やりたい事が明確になれば自分に何が足りないのかが見えてくる
そうなれば「どんな本を読めばいいですか?」なんてアホな質問しなくても自分で選べるようになるし
ただ漠然と「覚えなきゃいけない事がたくさんある」なんて考えて立ち止まるのはむしろ時間の無駄
0514デフォルトの名無しさん2010/10/15(金) 17:52:17
>>513
すばらしいご意見ありがとうございます。
本当にその通りだと思います。
何事もたくさん経験して、失敗して覚えていくものですね。
これからはアホな質問はしないように頑張ります。
0515デフォルトの名無しさん2010/10/16(土) 16:30:05
前にここでパーティクル系のソースアップしてくれた人いますか?
あの画像って何のソフトで作ったんですか?

GIMPで同じようなもの作れますか?
0516デフォルトの名無しさん2010/10/16(土) 17:09:28
>>515
http://macototo.cool.ne.jp/junics/index.html
こんなんどうよ?
0517デフォルトの名無しさん2010/10/16(土) 17:12:51
>>516
おお!すごいです!
photoshopのようですが、参考にさせていただきます!
ありがとうございます!
0518デフォルトの名無しさん2010/10/16(土) 18:08:32
このレスは俺の日記帳の切れ端

こうやったらクオータニオンうまくいった
mQuaはXファイルのアニメーションキーの回転から取得した値

D3DXQUATERNION q1,q2;
q1.x =-mQua[key.index[1]].x;
q1.y =-mQua[key.index[1]].y;
q1.z =-mQua[key.index[1]].z;
q1.w =mQua[key.index[1]].w;

q2.x =-mQua[key.index[2]].x;
q2.y =-mQua[key.index[2]].y;
q2.z =-mQua[key.index[2]].z;
q2.w =mQua[key.index[2]].w;
D3DXQuaternionSlerp(&q,&q1,&q2,time);
0519デフォルトの名無しさん2010/10/17(日) 02:16:41
>>515
あれ、やっぱ気にしてる人まだいたか
描き方説明しようかと思ったけど微妙に言葉で説明するのが面倒で
どうしようかと思ってるうちに忘れてた

そんなたいしたことしてる訳じゃないんよ
>>516みたいにちゃんと描けるのが一番なんだろうけどもっと手抜きです
ネットに転がってるフョトショ用のブラシを落としてきて
描画モードを「スクリーン」にして何回か連打するだけ
ちょっとやってみたけどGIMPはフォトショのブラシファイルをそのままフォルダに突っ込めば使えるので
シェイプ機能とかはないけど大体同じようなことはできた


一発撮り未編集なのでぐだぐだだけど参考
http://www5b.biglobe.ne.jp/~mya_a/dx/light_effect.html

ブラシはこことか。後はググって
ttp://www.chethstudios.net/2010/05/1000-beautiful-abstract-light-photoshop.html
0520デフォルトの名無しさん2010/10/17(日) 02:16:50
一念発起してD3D11のサンプルをみているが
やっぱりいろいろ整理されててわかりやすい印象
移行すべきだろうなあ・・
0521デフォルトの名無しさん2010/10/17(日) 02:22:26
>>519
おもしれー
0522デフォルトの名無しさん2010/10/17(日) 04:04:26
マでもPhotoshopくらい扱えないとだめなのか
魔方陣色々使えそうで良いな
0523デフォルトの名無しさん2010/10/17(日) 09:36:15
>>519
どうやって書いてるのかと思ったら専用のブラシがあったんですね。
本当に助かりました。ありがとうございます。
0524デフォルトの名無しさん2010/10/17(日) 14:36:55
知ってみれば大したことじゃなくても
知らなければ手も足も出ないなんて良くあること
0525デフォルトの名無しさん2010/10/17(日) 15:28:22
じゃあ、そのブラシはどうやって作ってるんだよ
とか疑問もたないところが初心者だよねw
0526デフォルトの名無しさん2010/10/17(日) 15:37:05
ブラシなんて普通の画像と大差ないじゃん
何いっちゃってるの?
0527デフォルトの名無しさん2010/10/17(日) 15:38:12
ハイハイw
この話題はここでおしまい
0528デフォルトの名無しさん2010/10/17(日) 15:38:44
いままで真面目に描いてたのが悔しくてしょうがないんだろw
そっとしといてやれよ
0529デフォルトの名無しさん2010/10/17(日) 15:42:03
自分で新しいの作れない子がなにか言ってるよw
0530デフォルトの名無しさん2010/10/17(日) 16:11:19
自分で話題終了を宣言しといてちょっと煽られたくらいで反応しちゃう男のひとって
0531デフォルトの名無しさん2010/10/17(日) 16:25:07
上の方で顔を真っ赤にしてたやつと同じ臭いがするな
自分じゃロクな情報出さないくせにやけに他人に絡む奴
0532デフォルトの名無しさん2010/10/17(日) 16:46:49
でもこのやり方で毎回同じものしか作れないとかはちょっと困る
0533デフォルトの名無しさん2010/10/17(日) 16:57:59
初心者スレなのに初心者をバカにする風潮どうにかならんのかね
こちとらどんな情報でもありがたいのに
0534デフォルトの名無しさん2010/10/17(日) 17:03:07
>>533
どこにそんなレスがあるんだ?
0535デフォルトの名無しさん2010/10/17(日) 17:04:19
プログラマが自分で用意しなきゃいけないのってどうせ仮素材くらいなんだからこの程度でいいんじゃないの?
大事なのはどういう絵が実際の画面上でどう見えるかを知っておくことだと思う
プログラマ側からグラフィッカに指示を出す事だって結構あるしこんな感じって具体的に言えるだけでも大分違うと思われ
0536デフォルトの名無しさん2010/10/17(日) 17:05:10
>>534
>>525
0537デフォルトの名無しさん2010/10/17(日) 17:07:03
>>536
いいじゃん
必要ないんだから
0538デフォルトの名無しさん2010/10/17(日) 17:09:35
そういう形でブラシを使っちゃうならはじめからフリー素材貼り付けろと
0539デフォルトの名無しさん2010/10/17(日) 17:11:25
>>538
フリー素材のサイト教えてください
0540デフォルトの名無しさん2010/10/17(日) 17:13:17
プログラマらしく数式で求めるんだ
0541デフォルトの名無しさん2010/10/17(日) 17:13:26
>>519見る限り結構応用が利きそうだけどな
まぁ、Photoshop限定だろうが
0542デフォルトの名無しさん2010/10/17(日) 17:15:13
いつもサンプルを作ってくれる519さんってプロですか?
0543デフォルトの名無しさん2010/10/17(日) 17:37:57
GIMPでもできますー
0544デフォルトの名無しさん2010/10/17(日) 17:46:44
会社で使ってるのだとただ貼り付けるのって結構少ないな

ムービーっていうかテクスチャにもZやややこしいαが入ってたりしてわけわからん
http://www.cri-mw.co.jp/product/lineup/movie/crisofdec/demo.html

こんなん多いこんなん
上のじゃないんだけど・・・ちょっと仕組みは近いかも
0545デフォルトの名無しさん2010/10/17(日) 17:48:56
IMPO
0546デフォルトの名無しさん2010/10/18(月) 09:37:38
DirectX11のスレどっかにある?
0547デフォルトの名無しさん2010/10/18(月) 09:53:29
DirectX12っていつでるの?
0548デフォルトの名無しさん2010/10/18(月) 10:55:14
11の話もここでいいと思う

分かる範囲でなら教えるよー
0549デフォルトの名無しさん2010/10/18(月) 10:56:29
10のスレも死んでるしこっちでいいだろ
0550デフォルトの名無しさん2010/10/18(月) 15:50:46
それ以前に10のスレなんてあったのか
0551デフォルトの名無しさん2010/10/18(月) 16:00:07
でたばっかのころはそれなりに活発だった
0552デフォルトの名無しさん2010/10/18(月) 16:51:51
質問する人間は、捨てでいいからトリップつけるべきじゃないか?
最近ム板全般で、質問人を騙って話ひっかきまわす奴が目立っててな

前からID入れてくれって話はでてるんだが、運営はとりあえず入れる気ないみたいだし
0553デフォルトの名無しさん2010/10/18(月) 17:11:45
何をいまさら
0554デフォルトの名無しさん2010/10/18(月) 17:12:47
日本にはgamedevみたいなサイトは無いのか
0555デフォルトの名無しさん2010/10/18(月) 17:27:13
dxlibとかのライブラリ限定なら活発かもね
0556デフォルトの名無しさん2010/10/18(月) 17:30:41
>>554
つくってもあらされておわるでしょ。
あとジェムズのX巻にのってるから読めでおわったりとかね。

個人的にはTrueTypeFontのファイルフォーマット。
それをポリゴンで表示する為のメッシュ化アルゴリズムをしりたいな。
0557デフォルトの名無しさん2010/10/18(月) 17:31:10
メンバー制のところなら1つ大きいのがあるが
紹介が無いと入れないので一般人は無理だぜ
0558デフォルトの名無しさん2010/10/18(月) 17:32:51
日本人の体質かもしれんね
0559デフォルトの名無しさん2010/10/18(月) 17:36:30
別に海外のコミュだって荒らされたりしてっけど、日本人がそんな話までは知らないってだけ
成功した例しか聞いたことないだろ?
0560デフォルトの名無しさん2010/10/18(月) 18:31:58
BBXでいいじゃん
あそこで駄目ならここでも駄目だろ
0561デフォルトの名無しさん2010/10/18(月) 18:38:22
あそこもすでに終わっている。
0562デフォルトの名無しさん2010/10/18(月) 18:40:49
>>561
具体的になにが駄目だったの?
あそこで答えてもらえないならみんな知らないか
くだらないこと質問して相手にしてもらえないかのどっちかじゃね?

いまレスしてる面子みても結構できる人いるよ
0563デフォルトの名無しさん2010/10/18(月) 19:19:45
BBX見てきたけど加曾利杉
0564デフォルトの名無しさん2010/10/18(月) 20:23:10
>>556
Windows限定でよければ、GetGlyphOutlineでフォントの輪郭線とれるよ。
TrueTypeのフォーマットまでは知る必要ない。

最近はGGO_BITMAPの方の機能ばかり有名になってしまって、
曲線データの方の解説は見つけるのが大変だけど。
0565デフォルトの名無しさん2010/10/19(火) 00:08:38
そういやDirect2D/DirectWriteではアウトラインの
テッセレート化したメッシュデータまで取得できたなぁ
0566デフォルトの名無しさん2010/10/19(火) 00:33:39
DXSDK 2010 Octキター
0567デフォルトの名無しさん2010/10/19(火) 09:10:18
なに!?つい先日Febあてたばかりなのに・・・

BBX昔はよく利用したけど今はなぁ
0568デフォルトの名無しさん2010/10/19(火) 13:34:43
本当にDirectXって難しいね。君たちすごいよ。
0569デフォルトの名無しさん2010/10/19(火) 13:50:09
1000個のオブジェクトをDrawIndexedPrimitiveを使って、一気に全部描画しようとしてます。
その一つ一つに対して、別々のアルファ値を持たせる場合は、
頂点デクラレーションの作成の時にアルファ値用の値を設定しといて、
描画するときになったら、一気に頂点バッファをロックして、
個別に設定するしか方法ないですよね?

当然このオブジェクトはそれぞれ別々の方向に動くので、座標も一気に変える
つもりなんですが。

0570デフォルトの名無しさん2010/10/19(火) 14:13:14
動かし方による
ある程度規則的な動きなら書き換えずに済むかも知れない

どうしても書き換えなくてはいけない時でも
1000回Lockするのではなく1回で済むような仕組みを考えるべき
0571デフォルトの名無しさん2010/10/19(火) 14:21:35
>>570
ありがとうございます。
シューティングを作っているので、規則的な動きにはならないですね。
その座標は当たり判定とかの計算にも利用するつもりなので。


>1000回Lockするのではなく1回で済むような仕組みを考えるべき
5種類の弾があって、それぞれ100発ずつ撃たれている状況だとしたら、
テクスチャはそれぞれ変えなきゃならないので、
一種類ごとにテクスチャをセットして、100発まとめてlockして描画。
というのを5回繰り返すイメージですよね?
0572デフォルトの名無しさん2010/10/19(火) 14:24:13
5種類の弾を1枚のテクスチャに乗せとけば切り替えなし
0573デフォルトの名無しさん2010/10/19(火) 14:25:50
>>572
なるほど!そういえばそうですね。助かりました。
ありがとうございました。
0574デフォルトの名無しさん2010/10/19(火) 14:28:16
毎フレームLockするなら動的頂点バッファにするのも忘れないように
0575デフォルトの名無しさん2010/10/19(火) 14:41:28
>>574
D3DUSAGE_DYNAMICとD3DPOOL_DEFAULTにしておけば大丈夫ですよね?
0576デフォルトの名無しさん2010/10/19(火) 14:52:59
>>574-575
動的頂点バッファにしたほうが、D3DPOOL_MANAGEDで確保した静的頂点バッファより遅かったんだが・・・
1・俺のテストコードが悪い
2・ループが速すぎて、動的頂点バッファのロック待ちよりも、MANAGEDが確保しているシステムメモリーに書き込んだ(そしてMANAGEDがいっきにVRAMにUPDATEした)ほうが速かった
どっちだ!
0577デフォルトの名無しさん2010/10/19(火) 14:57:38
>>576
ちなみに静的頂点バッファっていうのは、頂点バッファの内容はいじらないってことですよね?
いじれないんだったら、それぞれのオブジェクトを好きな位置に移動するときに、
DrawIndexedPrimitiveで一気に描画することはできないですよね?
一つ一つ、DrawPrimitiveを連投する方法だったら、個々に移動行列を与えて移動できそうですけど。
0578デフォルトの名無しさん2010/10/19(火) 15:01:57
>>577
>ちなみに静的頂点バッファっていうのは、頂点バッファの内容はいじらないってことですよね?
「いじらない=いじれない」のではなく「いじらないつもりなので、そのつもりでバッファ確保してね」というのが静的頂点バッファ。

MSDN読めば書いてあるが、静的はVRAM上に。動的はAGPメモリー上に配置する傾向にあるとかなんとか。
俺も詳しくは知らん。
静的だからといって書き換え不可能ってわけではない。
0579デフォルトの名無しさん2010/10/19(火) 15:03:12
>>576
IDirect3DVertexBuffer9::Lockの実行するロックのタイプの指定フラグが正しくないんじゃない?
どういうLockの仕方してるのか分からんから何とも言えんが
0580デフォルトの名無しさん2010/10/19(火) 15:05:47
>>578
わかりました。詳しくありがとうございます。
0581デフォルトの名無しさん2010/10/19(火) 15:07:15
1回も書き換えないなら静的頂点バッファの方が速い
1回ですむならやや動的頂点バッファの方が上だがほぼ大差ない
2回以上Lockするなら動的頂点バッファの方が上になるが
Lockの仕方を間違うとめちゃくちゃなパフォーマンスダウンを起こす
0582デフォルトの名無しさん2010/10/19(火) 15:19:25
DirectX SDKの最新版では VisualC++2005 のサポートが打ち切られたと聞きました
テキストに買ってきた書籍が少し古くて 2005 基準で書かれたものなのですが
ここに書かれているソースコードが使えないということなのでしょうか
それともVisualC++2010 に DirectX SDK の最新版を入れて 同じ環境とみなせるでしょうか

サポートが打ち切られるというのがどういうことか分りません
0583デフォルトの名無しさん2010/10/19(火) 15:19:27
システムメモリとVRAMを共用してるようなビデオチップだとどっちでも変わらなかったり
0584デフォルトの名無しさん2010/10/19(火) 15:27:18
>>582
ソースコードが使えなくなるということではない
2010で動かすなら問題なく使える

とりあえず目立つところではたぶんサンプルから2005用のソリューションが消えたんじゃない?
あとは今後.libの互換性がなくなって
2005+2010Oct以降だとリンクができなくなる(かもしれない)
0585デフォルトの名無しさん2010/10/19(火) 15:34:31
SDKのOct 2010なんて何処にある?
MSDN探しても見当たらないぞ。
0586デフォルトの名無しさん2010/10/19(火) 15:39:58
探したけどOct 2010なんてないなw
0587デフォルトの名無しさん2010/10/19(火) 15:41:25
釣りだったのか?
0588デフォルトの名無しさん2010/10/19(火) 15:44:34
>>584
ありがとうございます とりあえず同じ環境とみなして進めていきます
.lib の互換性がなくなるというのは文法も変わってしまうということ?
サポートの打ち切りとはどういった背景(理由)で行われたかわかりますか
何か変えなくてはいけないことがあったんだと思うのですが
0589デフォルトの名無しさん2010/10/19(火) 15:47:58
M$の陰謀
0590デフォルトの名無しさん2010/10/19(火) 15:48:48
>>585
DirectX SDK は3,4か月に一度更新されているようですので 今後更新されるであろう
バージョンをさしてOct 2010(以降)と言ったのだと思います
0591デフォルトの名無しさん2010/10/19(火) 15:51:12
>>579
D3DLOCK_DISCARD使ってるから、使い方間違えてはいないと思うんだけどなぁ・・・

>>581の言う通り、1ループで1回しかLockしないから誤差の範囲内なのかもしれん。

>>583
GF9600だから、動的のほうが速いのを期待したんだけどなー
0592デフォルトの名無しさん2010/10/19(火) 16:00:05
>>581
そもそも1つのループで複数回ロックは論外。
0593デフォルトの名無しさん2010/10/19(火) 16:04:17
>>592
D3DLOCK_NOOVERWRITEでロックして追記や部分書き換えすればそれほどコストは掛からないんだぜ
これをD3DLOCK_DISCARDでロックするとアホみたいなことになる
0594デフォルトの名無しさん2010/10/19(火) 16:06:51
>>576
考えられる問題点

読み込みを伴うアクセスを行っている
全体を書き換えるのにDiscardを指定していない
Lockを複数回行っている
0595デフォルトの名無しさん2010/10/19(火) 16:08:41
>>593
そもそも何度もロックを繰り返すようなプログラムを組まなければならない時点で、
処理に無駄が多すぎる。
0596デフォルトの名無しさん2010/10/19(火) 16:17:41
>>594
んー、どれにも当てはまらないなぁ…。
とはいっても、さすがに俺のコードに問題があるんだろうし、ちょっと今再度計測してみるわ
0597デフォルトの名無しさん2010/10/19(火) 16:18:19
環境によって違う場合もあるしテストコードをうp
0598デフォルトの名無しさん2010/10/19(火) 16:19:50
ロックを繰り返さない方法って、ある程度は仕方ないと思うんだが、
どーすりゃいいんだ。
0599デフォルトの名無しさん2010/10/19(火) 16:26:50
1フレーム1回のDrawPrimitiveに対し複数回のLockは無駄でしかないが
1フレーム複数回のDrawPrimitiveに対し複数回Lockは当然あり得る
複数Lockする必要が無いなんていってる奴は単純な描画しかしたことがないんじゃね?
0600デフォルトの名無しさん2010/10/19(火) 16:29:35
>>599
やっぱりそうですよね。
0601デフォルトの名無しさん2010/10/19(火) 18:11:14
んー、やっぱり差が見られないなぁ

D3DPOOL_DEFAULT版
dev->CreateVertexBuffer(
desc.Size,
D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC,
desc.FVF,
D3DPOOL_DEFAULT
&buffer,
NULL
);
buffer->Lock(0, 0, &to, D3DLOCK_DISCARD);
::memcpy(to, from, desc.Size);
buffer->Unlock();

D3DPOOL_MANAGED版
dev->CreateVertexBuffer(
desc.Size,
0,
desc.FVF,
D3DPOOL_MANAGED
&buffer,
NULL
);
buffer->Lock(0, 0, &to, 0);
::memcpy(to, from, desc.Size);
buffer->Unlock();

こんな感じ。
もちろんCreateVertexBufferは最初の1回だけね。
モーフィングをやろうとして色々研究してたんだけど、D3DLOCK_DISCARDを使っても早くならねーなーと思ってたとこ。
後者のほうが微妙に速い上、D3DLOCK_DISCARDしないでモーフィング差分だけ書き変えればいい(memcpyいらね)から、ますます後者が速くなるんだ
0602デフォルトの名無しさん2010/10/19(火) 20:35:36
D3DPOOL_MANAGEDで作った頂点バッファは静的バッファってことでいいっすか?
0603デフォルトの名無しさん2010/10/20(水) 10:51:33
MANAGEDとD3DUSAGE_DYNAMICは共存できない

・・・いや、もしかしてMANAGEDの野郎、1度でも動的な使い方したら、内部で動的として確保しなおすとかしやがるのか・・・?
0604デフォルトの名無しさん2010/10/20(水) 12:22:51
下手に頂点バッファ使うくらいなら大人しくDrawXxxUP版にしておけば
すべての悩みから開放されます
■ このスレッドは過去ログ倉庫に格納されています