【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/
0338デフォルトの名無しさん
2010/10/10(日) 10:28:05簡単に表示できない・・
0339デフォルトの名無しさん
2010/10/10(日) 11:34:42検索しても見つからないし困ってるんだよ
0340デフォルトの名無しさん
2010/10/10(日) 12:42:51どういう意図でアルファ値と画像を分離したいわけ?
単に抜きがやりたいだけなら最初からアルファチャンネル付の画像フォーマットを使えばいい
アルファ部分を動的に変化させたいとかなら
シェーダーを使うかテクスチャブレンドで対応できる
0341デフォルトの名無しさん
2010/10/10(日) 13:37:28回答ありがとうございます。
素直に画像用意します。
ただ、1つ疑問なのはギルティギアイスカ(PC/PS2版共に)はゲーム中に
カラーエディットが出来る仕様になっていますが、
あれは337の言うようにシェーダーで行っているんでしょうか?
0342デフォルトの名無しさん
2010/10/10(日) 13:44:11スマソorz
0343261
2010/10/10(日) 15:22:34使用する関数を教えていただきありがとうございます。
なんとかフェードアウトを実装することができました。
�@GetCurrentPositionにて再生カーソルを取得する
�A再生カーソル+60ミリ秒の位置からバッファをロックする
�B100ミリ秒のフェードアウトをさせる
(バッファの中のサンプル値をフェードアウトした値に書き直す)
�Cフェードアウト後の100ミリ秒のバッファを0(無音)に書き直す
�Dバッファのアンロック
�ESleep(60 + 100) ⇒ �A+�Bの時間
�F再生のStop命令
手順は上記の通りとなります。、
�Aは強引なような気がしますが、こういう方法をとるのが
一般的なのだろうかと思いました。
�Bは、音楽ソフトで波形をフェードアウトさせたとき視覚的に、
直線でサンプル値が0に向かっていたのでlogを使いませんでした。
とりあえず、問題はなさそうに動いています。
どうもありがとうございました。
0344デフォルトの名無しさん
2010/10/10(日) 16:07:12画像ファイルから直接テクスチャを作ってるんじゃなくて
インデックスデータとパレットデータを使って
生成した空テクスチャに色情報を書き込んでるんじゃないの?
動的に変化とかじゃなくて.palの上書きとかでしょ?
0345デフォルトの名無しさん
2010/10/10(日) 18:10:46そこまでして何故パレットが必要なのか理由がさっぱり分からない。
0346デフォルトの名無しさん
2010/10/10(日) 18:20:330347デフォルトの名無しさん
2010/10/10(日) 18:35:32>>動的に変化とかじゃなくて.palの上書き
俺がやりたいのはそれです。
PC版のGGイスカやGGXX#REには外部コンフィグには
「パレットエフェクト」って設定項目があるのでD3Dで出来るのかと
思ったんです。
>>345
カラーエディット的なことをやりたいんです。
それこそゲーム中にガンガンいじる気はないんですが、
プレイヤーが設定したカラーを反映したいんです。
0348デフォルトの名無しさん
2010/10/10(日) 18:39:40何故パレット云々が出てくるんだ?
0349デフォルトの名無しさん
2010/10/10(日) 19:15:04普通にテクスチャをロックして書き込んでるだけでしょ
0350デフォルトの名無しさん
2010/10/11(月) 03:07:22デバイスを作成した後 IDirect3DDevice9::GetBackBuffer() でバックバッファを一度だけ取得して
そのインターフェイスをずっと保持して使いまわすのは変?
デバイスロストとかはちゃんと処理するとして
0351デフォルトの名無しさん
2010/10/11(月) 08:47:30いちいち聞くことじゃない。
0352デフォルトの名無しさん
2010/10/11(月) 11:50:00毎フレームインデックス0のバックバッファを取得する方が
自然を思うな。
つーか、普通レンダーターゲットを使うよな。
バックバッファ直接描画ならD3D使う意味無いし。
0353デフォルトの名無しさん
2010/10/11(月) 19:44:23シェーダーの時は変換済み座標って使えるのしょうか?
初心者なのでお手柔らかにお願いします。
今まで固定機能パイプラインでやってきました。
そのときは変換済み座標を使ってました。
それをそっくりそのままシェーダーでの描画に変えたいのです。
すいません。
0354デフォルトの名無しさん
2010/10/11(月) 19:48:350355デフォルトの名無しさん
2010/10/11(月) 20:10:27頂点変換済み座標ってシェーダーでは使えないんですか?
0356デフォルトの名無しさん
2010/10/11(月) 20:13:240357デフォルトの名無しさん
2010/10/11(月) 20:26:07頂点シェーダで出力する頂点は
-1 < x < 1
-1 < y < 1
0 < z < 1
で、たとえば(-1,1,-)の頂点が画面左上にくる
同様に(1,-1,-)が右下にくる
この考え方でとりあえず3角形を描画してみたらどうだろう
0358デフォルトの名無しさん
2010/10/11(月) 20:30:31やってみます。
0359デフォルトの名無しさん
2010/10/11(月) 20:54:47移動行列や回転、拡大行列等の行列の計算についてお伺いしたいです。
これらの計算もCPU側で行わずにシェーダー側で行っていますか?
そのほうがはやいですか?
0360デフォルトの名無しさん
2010/10/11(月) 21:03:41その結果に疑問があるのならそれを聞けばいい。
0361デフォルトの名無しさん
2010/10/11(月) 21:06:420362デフォルトの名無しさん
2010/10/11(月) 21:17:430363デフォルトの名無しさん
2010/10/11(月) 22:50:34行列を作るのはCPU
適用するのはGPU
頂点トランスフォームは、GPUがその能力を発揮出来る
数少ない機会だからな、やらせなきゃ損
0364デフォルトの名無しさん
2010/10/11(月) 22:57:16CPU時間は余りまくりなんだからどっちにやらせてもトータルは変わらんよ
0365デフォルトの名無しさん
2010/10/11(月) 22:59:44まず頂点シェーダをGPUでやらないビデオカードがあるのが一点。
GPUとCPUの性能バランスが悪ければ、CPUにやらせた方がパフォーマンスが高いことがあるのが二点。
つまり速いかどうかは環境依存。
0366デフォルトの名無しさん
2010/10/11(月) 23:15:49で、レアケース持ち出して
「いろんなパターンがあるからわかりません」が
正しい認識だって?
笑える
0367デフォルトの名無しさん
2010/10/11(月) 23:17:310368デフォルトの名無しさん
2010/10/11(月) 23:31:490369デフォルトの名無しさん
2010/10/12(火) 06:39:41いま、色々考えてみるのははっきりいって無駄
信じられるのは実測値のみ
この考え方は徹底しておかないといつまでも無駄なことをしたり
おかしな発言を繰り返したりと現場を混乱させるばかりでちっとも開発は進まないとかいう状況になる
0370デフォルトの名無しさん
2010/10/12(火) 08:54:44内部で60ぐらいに制御するようにコード組まれてるの?
本当にbeginsceneとendsceneぐらいしかしてないんだが。
0371デフォルトの名無しさん
2010/10/12(火) 08:56:480372デフォルトの名無しさん
2010/10/12(火) 09:03:19D3DPRESENT_INTERVAL_IMMEDIATE
0373デフォルトの名無しさん
2010/10/12(火) 09:18:54oneにすると自動的にリフレッシュレートを超えないように制限されてしまうんですね!
環境に依存しないで、FPSを制御するにはIMMEDIATEを指定して、
自分でFPS制御を行わないとぴったり60FPSにはならないんですね!
めんどくさかったらONEに設定すれば、勝手にリフレッシュレートぐらいの
FPSに制御してくれるというわけですね。
でも環境によって、FPSが変わるとゲームにならないので、前者の方法が良いですね!
知らなかったら、環境によってFPSが変化してしまうところでした。
本当にありがとうございました!
0374デフォルトの名無しさん
2010/10/12(火) 10:50:04画面に描画されるときの最小単位はピクセルなんですよね?
0375デフォルトの名無しさん
2010/10/12(火) 10:59:130376デフォルトの名無しさん
2010/10/12(火) 11:17:070377デフォルトの名無しさん
2010/10/12(火) 11:24:54>DIRECTXってなんで座標指定するときにFLOAT型なんでしょう?
そもそもそんな規則はない
0378デフォルトの名無しさん
2010/10/12(火) 12:00:42(1,1)のところに描画されるんですよね?
考え方自体破綻してますか?
0379デフォルトの名無しさん
2010/10/12(火) 12:01:400380デフォルトの名無しさん
2010/10/12(火) 12:11:59>DIRECTXってなんで座標指定するときにFLOAT型なんでしょう?
は意味不明。
Direct3Dのことだったとしても整数型の入力はサポートされているし、
Direct3D10以降なら整数値のハードウエアサポートもある。
またラスター化されるときにどうなるかも設定次第。
0381デフォルトの名無しさん
2010/10/12(火) 15:01:36beginPass,Endpassの間でセットしても反映されない?
0382デフォルトの名無しさん
2010/10/12(火) 15:19:41>ID3DXEffect::BeginPass/ID3DXEffect::EndPass 対応ペア内部にある Effect::Setx メソッドのいずれかを使用して、
>アプリケーションがエフェクト ステートを変化させる場合、アプリケーションは ID3DXEffect::CommitChanges を呼び出して、
>ステート変化のあるデバイスに更新を設定する必要があります。
>ステート変化が ID3DXEffect::BeginPass および ID3DXEffect::EndPass 対応ペア内で発生していない場合、
>ID3DXEffect::CommitChanges を呼び出す必要はありません。
0383デフォルトの名無しさん
2010/10/12(火) 15:21:03ありがとう!
0384デフォルトの名無しさん
2010/10/12(火) 17:58:27シェーダーを使ったときの範囲指定描画の方法がわかりません。
頂点バッファを毎回いじればできそうですが、いじりたくないです。
いじらずにやる方法ないですか。
0385デフォルトの名無しさん
2010/10/12(火) 18:23:01ちょっとずつ分割して描画したいってことです。
0386デフォルトの名無しさん
2010/10/12(火) 18:27:190387デフォルトの名無しさん
2010/10/12(火) 18:29:37サイズが一定ならシェーダーにどれだけずらすか送るだけ
0388デフォルトの名無しさん
2010/10/12(火) 18:42:070389デフォルトの名無しさん
2010/10/12(火) 21:31:59描画される位置は一緒でも、参照されるテクスチャ座標が変わる。
0390デフォルトの名無しさん
2010/10/12(火) 22:17:30なんか有るぞこれは
0391デフォルトの名無しさん
2010/10/12(火) 22:23:100392デフォルトの名無しさん
2010/10/12(火) 22:28:25頂点バッファに全て書き込んどく方法はやめます。
サイズは等間隔の画像になります。
どれだけずらすかを送ってその後どうするんですか?
そもそも、頂点シェーダは書けるんですけど、どういった順序で計算されてるのかわからないんです。
例えば頂点が4つあったとしたら、頂点シェーダの関数は4回実行されてるんですか?
一回ごとに渡される頂点が違うってことですか。
その辺が詳しく解説されてるサイトがあれば教えていただきたいです><
0393デフォルトの名無しさん
2010/10/12(火) 23:09:17四隅が等しくずれるんだから順番なんて関係ない
頂点バッファには1つ分のuvを書き込んでおく
プログラム側からuvをどれくらいずらすかシェーダーに送る
シェーダーでずらす
OK?
.cpp
ID3DXEffect::SetVector ( "tex_offset", &D3DXVECTOR4(0.5f, 0.5f, 0.0f, 0.0f) ) ;
.fx
float2 tex_offset
void VertexShader(
in float4 inPos : POSITION,
in float4 inTexture : TEXCOORD0,
out float4 outPos : POSITION,
out float4 outTexture : TEXCOORD0)
outPos = mul(inPos, WorldViewProj);
outTexture = inTexture+tex_offset;// ←ずらす
}
0394デフォルトの名無しさん
2010/10/12(火) 23:17:23その認識で正しい
0395デフォルトの名無しさん
2010/10/12(火) 23:37:100396デフォルトの名無しさん
2010/10/12(火) 23:38:450397デフォルトの名無しさん
2010/10/12(火) 23:47:040398デフォルトの名無しさん
2010/10/12(火) 23:49:16http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%80
0399デフォルトの名無しさん
2010/10/13(水) 00:06:43どうもありがとう
0400デフォルトの名無しさん
2010/10/13(水) 00:10:41要するに描写の前にフィルタをかませてなんかいろいろ効果を出すってことか
まるで目の前にフィルムがあるかのような
0401デフォルトの名無しさん
2010/10/13(水) 02:48:550402デフォルトの名無しさん
2010/10/13(水) 03:00:40なるほど!
その手がありましたか!
すごい嬉しいです!ありがとうございました!
0403デフォルトの名無しさん
2010/10/13(水) 06:40:18物理的にはDrawPrimitiveUPなんかと似たようなもんだよねw
って思うんだけど違うの?
0404デフォルトの名無しさん
2010/10/13(水) 08:25:04は?じゃあ具体的に説明してみろ
0405デフォルトの名無しさん
2010/10/13(水) 16:32:360406デフォルトの名無しさん
2010/10/13(水) 16:39:46テストコードかけばいっぱつじゃない?
まあ環境依存のことを考えれば未初期化で使うなんてことは考えないはず。
0407デフォルトの名無しさん
2010/10/13(水) 16:56:08簡単なテストでしてみました。レジスタには同じ値が入っているみたいです。
0408デフォルトの名無しさん
2010/10/13(水) 17:55:211フレ当たりにグラボに送る情報量がさほど変わらないじゃん
例えばこんな風にまるで意味がない感じにしても頂点バッファに触らないってのはそれだけでメリットあるんかな?
ってことが言いたいわけよ
.cpp
ID3DXEffect::SetArray的な何か(名前忘れたw) ( "pos", pos4) ;//頂点4つ分
ID3DXEffect::SetVector ( "tex_offset", &D3DXVECTOR4(0.5f, 0.5f, 0.0f, 0.0f) ) ;
.fx
float4 pos[4];
float2 tex_offset;
void VertexShader(
in float4 inTexture : TEXCOORD0,
in int inIndex
out float4 outPos : POSITION,
out float4 outTexture : TEXCOORD0)
outPos = pos[inIndex];
outTexture = inTexture+tex_offset;
}
0409デフォルトの名無しさん
2010/10/13(水) 18:23:270410デフォルトの名無しさん
2010/10/13(水) 18:47:13だから>>408の例って頂点バッファ自体が無意味じゃん
0411デフォルトの名無しさん
2010/10/13(水) 18:57:250412デフォルトの名無しさん
2010/10/13(水) 19:02:26いや、SetVectorなどの関数から描画に必要なデータをすべて渡している状態(でも頂点バッファにはアクセスせず)
DrawPrimitiveUPで描画するのとどっちが速いの?的な話
この2つとも1フレ当たりにグラボに渡すデータ量はほとんど変わらないよね?
大して変わらないことしてるのか、大きな差があるのか?ってとこ
0413デフォルトの名無しさん
2010/10/13(水) 19:17:11頂点バッファは一度のDrawprimitiveで数千ポリを同時に描画するときに真価を発揮する
そもそも1矩形を1回のDrawprimitiveで描くような仕様ならUP系とコスト的には大差ない
UP系は使ってもいいけど使うときは
1000〜2000ポリくらいをバッファに溜め込んで一度のDrawprimitiveUPで描画したほうが効率は良い
それ以上になるとシステムメモリからの頂点情報の転送がボトルネックになって
頂点バッファを使った時ほどのパフォーマンスが出せなくなる
0414デフォルトの名無しさん
2010/10/13(水) 19:41:01DrawPrimitiveで数千ポリを一気に描画する方法があるんですか!?
メッシュとかの話じゃなくて?
0415デフォルトの名無しさん
2010/10/13(水) 19:55:54まちがえました。。。
0416デフォルトの名無しさん
2010/10/13(水) 20:19:160417デフォルトの名無しさん
2010/10/13(水) 20:31:160418デフォルトの名無しさん
2010/10/13(水) 21:02:080419デフォルトの名無しさん
2010/10/13(水) 21:05:120420デフォルトの名無しさん
2010/10/13(水) 21:21:24そもそもバカというのは基準が決まっていないじゃないですか
何が出来なかったらバカなんですか?それじゃあまだ何も出来ない幼児赤子はバカなんですか?
0421デフォルトの名無しさん
2010/10/13(水) 21:21:43お前みたいなクズこそ死ね
0422デフォルトの名無しさん
2010/10/13(水) 21:29:220423デフォルトの名無しさん
2010/10/13(水) 21:33:370424デフォルトの名無しさん
2010/10/13(水) 21:33:450425デフォルトの名無しさん
2010/10/13(水) 21:46:28メッシュは頂点データのかたまり。
これぐらしかわかりません。ごめんなさい。
0426デフォルトの名無しさん
2010/10/13(水) 21:47:36まずはポリゴンがなんなのかを調べるところから始めろ。
0427デフォルトの名無しさん
2010/10/13(水) 21:54:26独学っすか?学校の授業とかですか?
0428デフォルトの名無しさん
2010/10/13(水) 21:56:490429デフォルトの名無しさん
2010/10/13(水) 22:17:54そんなことだからバカとか言われるんじゃね
0430デフォルトの名無しさん
2010/10/13(水) 22:34:38仕方ないよ
0431デフォルトの名無しさん
2010/10/13(水) 22:40:213Dが全く分からなくて手を着けられない。
シェーダの仕組みもさっぱり分からない。
次に進む為のお勧めの書籍はありませんか?
0432デフォルトの名無しさん
2010/10/13(水) 22:41:370433デフォルトの名無しさん
2010/10/13(水) 22:48:410434431
2010/10/13(水) 23:13:580435デフォルトの名無しさん
2010/10/13(水) 23:19:22入門書買って1からやりなおせ。
0436デフォルトの名無しさん
2010/10/14(木) 00:39:09俺も分からないから知りたいんだけど何を信じていいのか分からん。
0437デフォルトの名無しさん
2010/10/14(木) 00:43:44■ このスレッドは過去ログ倉庫に格納されています