トップページ⇒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/
0191デフォルトの名無しさん2010/10/04(月) 20:45:07
なんだその話続いてたのか
0192デフォルトの名無しさん2010/10/04(月) 20:45:21
そういう特殊な環境で作りたいんだったら
自分で環境変数を増やせばいいじゃない
別に一個じゃなきゃいけない理由も無いんだし
0193デフォルトの名無しさん2010/10/04(月) 21:54:52
シェーダを使った場合、
SetRenderStateで設定してるものは全て無効になるんですよね?
すべてシェーダー側で設定しろってことですか?
カリングモードの設定もですか?

よろしくお願いします。
0194デフォルトの名無しさん2010/10/04(月) 22:07:24
まずは自分で試してみろ。
そうでないと話にならない。
0195デフォルトの名無しさん2010/10/04(月) 22:13:35
>>194
試しました。たぶんそうなんですが、念のための確認です。
スパルタ教育は好きです。
0196デフォルトの名無しさん2010/10/04(月) 22:15:57
もう一度やり直せ。
0197デフォルトの名無しさん2010/10/04(月) 22:19:34
>>196
やり直して確信に変わりました。ありがとうございました。
0198デフォルトの名無しさん2010/10/04(月) 22:39:44
>>179
同じアプリ内のEVR (DirectShow)です。
0199デフォルトの名無しさん2010/10/04(月) 23:17:10
>>197
αブレンドの設定は生きてるぞ
他にも生きてるもんあんだろ
0200デフォルトの名無しさん2010/10/05(火) 00:11:45
ひねくれたこと言わないでちゃんと回答してればこんなことにはならなかったのに
0201デフォルトの名無しさん2010/10/05(火) 00:17:34
固定シェーダの恐怖が減っただけでもありがたいことだな
0202デフォルトの名無しさん2010/10/05(火) 00:31:12
>>199
何が生きて何が生きてないんですか?
勉強不足でホントすみません。
0203デフォルトの名無しさん2010/10/05(火) 00:32:23
あ、生きてるやつだけでいいです。
0204デフォルトの名無しさん2010/10/05(火) 00:41:45
>>202
知らん
そのときどきで「おーこいつ生きてるじゃんoh!yeah!」って対処しろ
0205デフォルトの名無しさん2010/10/05(火) 00:46:58
>>204
もうしょうがないわね。わかったよ。
0206デフォルトの名無しさん2010/10/05(火) 01:10:11
なんか釣りっぽいけど
マジレスするとシェーダー使っててもSetRenderStateは全て無効にならない
基本事項はSetRenderStateで設定しといて
シェーダー内のみで変更したい項目をシェーダー側で変更する
ID3DXEffect::Beginでパラメーターを指定しなければEndの時に変更部分が復元される
0207デフォルトの名無しさん2010/10/05(火) 09:22:16
>>206
最高です!釣りじゃありません!
ちょっと前から厳しい人がいたんで反応を見てただけです!
スパルタ教育は好きなんですけどね!
ありがとうございました!
0208デフォルトの名無しさん2010/10/05(火) 09:33:01
>>206
追加で質問です。
Beginでパラメータを指定しないってことは第二引数を0にするってことですよね?
変更部分が復元されるというのは、シェーダ内での変更がそのまま維持されるということでしょうか?
それとも、シェーダ内で変更した項目は全てリセットされ、シェーダーで変更する前の状態に復元されるということでしょうか?

何度もすみません。よろしくお願いします。
02092072010/10/05(火) 09:52:12
もうわかったのでいいです。
シェーダ内の変更がそのまま復元され維持されるということですね。
復元されちゃったら、また元に戻さないといけないのでやめたほうが良さそうですね。
0210デフォルトの名無しさん2010/10/05(火) 11:49:07
話の流れが見えない
207=209じゃないよな?
0211デフォルトの名無しさん2010/10/05(火) 11:52:30
思い込みが激しい奴に何を言っても無駄。
0212デフォルトの名無しさん2010/10/05(火) 12:01:20
普通に同一人物に見えるが
0213デフォルトの名無しさん2010/10/05(火) 12:08:39
だから思い込みが激しい奴に何行っても無駄だって
0214デフォルトの名無しさん2010/10/05(火) 12:11:23
人の話も聞かずに勝手に頓珍漢な結論を出すんだから放っておけばいい。
0215デフォルトの名無しさん2010/10/05(火) 12:38:59
>>211-214が普通に同一人物に見えるんだが
0216デフォルトの名無しさん2010/10/05(火) 12:47:47
てか、昨日から上から目線で混乱させるようなことばかり言ってるやつでしょ
だろ。の人は回答する気がないならいい加減消えればいいのに
0217デフォルトの名無しさん2010/10/05(火) 12:59:42
なんだかんだ言って、誰も間違いに突っ込まないところが、
人が悪いなと思ってしまう。
0218デフォルトの名無しさん2010/10/05(火) 13:22:13
合ってるって言ってあげろよ
0219デフォルトの名無しさん2010/10/05(火) 13:29:03
てか勘違いしてるのか日本語が下手なだけなのゆとりなのか判断に悩む
0220デフォルトの名無しさん2010/10/05(火) 13:56:58
リソースをコンパイル中にこんなエラーが出ました。
対処法がわかりません。教えて下さい。

fatal error RC1011: compiler limit : 'XSKINEXP_TEMPLATES': macro definition too big
0221デフォルトの名無しさん2010/10/05(火) 14:00:50
>>219
日本語でおk
0222デフォルトの名無しさん2010/10/05(火) 14:08:52
誰もわからないの?バカなの?死ぬの?
0223デフォルトの名無しさん2010/10/05(火) 14:12:07
>>220
compiler limit : 'identifier' : macro definition "too big"

Try to split the definition into shorter definitions.
0224デフォルトの名無しさん2010/10/05(火) 14:21:35
LoadObjectFromFileでWAVは読み込めるんだけど
MP3が読み込めません。
どうすればいいんでしょうか。
0225デフォルトの名無しさん2010/10/05(火) 14:34:29
API調べるのめんどい。Direct何のどのクラス使ってるのさ
XAudioだかはWMA風データなら読めるがMP3は読めない
MP3を簡単に再生するならWin32APIかDirectShow
ちゃんとやりたかったらSDKなりでWAVに変換せよ
0226デフォルトの名無しさん2010/10/05(火) 14:36:30
>>224
自前でデコードするかDirectShowを使うしかない
0227デフォルトの名無しさん2010/10/05(火) 14:50:56
mp3はライセンス問題があるからoggにしとけ
oggなら展開用のライブラリもそのへんに転がってるし
0228デフォルトの名無しさん2010/10/05(火) 15:47:29
>>225-227
レスありがとうございます。
DirectShowやoggを検討してみます。
0229デフォルトの名無しさん2010/10/05(火) 22:53:52
勉強用とか音楽とかワンセグもOK 無線LAN接続なら無料
結構安いと思うんだけど?
お前ら的にはあり?


IS01 1円スタート 即決有
http://page9.auctions.yahoo.co.jp/jp/auction/k134019945
http://page8.auctions.yahoo.co.jp/jp/auction/h145981541
http://page11.auctions.yahoo.co.jp/jp/auction/n91104112
http://page10.auctions.yahoo.co.jp/jp/auction/m77370908
http://page2.auctions.yahoo.co.jp/jp/auction/b113651808

IS02 1円スタート 即決有
http://page11.auctions.yahoo.co.jp/jp/auction/n93102178
http://page2.auctions.yahoo.co.jp/jp/auction/b113622828
http://page11.auctions.yahoo.co.jp/jp/auction/n92987886
0230デフォルトの名無しさん2010/10/05(火) 22:59:49
>>229
こいつ宣伝しまくってるな。
0231デフォルトの名無しさん2010/10/05(火) 23:02:11
>>230
面倒だけど癖になるからアク禁依頼だしてくるか
0232デフォルトの名無しさん2010/10/06(水) 00:27:49
>>178もよろしくお願いしますよ〜
0233デフォルトの名無しさん2010/10/06(水) 02:09:23
こいつマ板でも宣伝してたわ。
0234デフォルトの名無しさん2010/10/06(水) 17:48:33
皆さんのテクスチャ管理方法をざっくりでいいんで簡単に教えてください。
読み込みから解放までを。

すみません。
0235デフォルトの名無しさん2010/10/06(水) 18:06:57
テクスチャ登録用のリストを作る
ファイル名や識別子などからリストを検索
未登録ならテクスチャを作成しリストに登録
登録済みならテクスチャへのポインタを返しAddRef(参照カウントを増やす)
必要なくなったら参照先でRelease
参照カウンタが0になったらリストから削除
0236デフォルトの名無しさん2010/10/06(水) 18:21:14
シェーダープログラムでのテクニックとパスの違いを教えてください

パスはレンダーステートとプログラムのセットですか?
0237デフォルトの名無しさん2010/10/06(水) 18:22:49
>>235
ありがとうございます。
描画する際もファイル名などからリストを検索して描画ルーチンに渡しているのでしょうか?
もしそうなら、その検索時間は気になりませんか?
0238デフォルトの名無しさん2010/10/06(水) 18:24:04
>>237
ハッシュマップとかIDでソートかけておくとか
0239デフォルトの名無しさん2010/10/06(水) 18:26:45
ちゃんと文章読んでるのかよ
0240デフォルトの名無しさん2010/10/06(水) 18:26:55
>>238
なるほど。ありがとうございます。
STLのコンテナを使わないのは何故ですか?
0241デフォルトの名無しさん2010/10/06(水) 18:36:44
>描画する際もファイル名などからリストを検索して描画ルーチンに渡しているのでしょうか?

しないよ
描画オブジェクトもテクスチャへのポインタを持たせておけば読み込み時の1回だけでいいだろう?
なんのための参照カウンタだ
0242デフォルトの名無しさん2010/10/06(水) 19:30:24
>>241
なるほど!本当にありがとうございます!
最高のシステムですね!参考にさせていただきます!
0243デフォルトの名無しさん2010/10/06(水) 19:32:35
すごいですね!
本当に本当にありがとうございました!
0244デフォルトの名無しさん2010/10/06(水) 20:44:49
float4 col = 1って全部1が入るんですか?
col.xyzw = 1と同じですか?
0245デフォルトの名無しさん2010/10/06(水) 21:03:34
yes
0246デフォルトの名無しさん2010/10/06(水) 21:08:49
thankyou
0247デフォルトの名無しさん2010/10/06(水) 22:35:30
>>235
自分は別な質問者ですが、
参照カウンタが0になったら、というので
内部参照カウンタの値を取得するにはどうすればよいですか?
それとも自分で数えておくのですか?
02482472010/10/06(水) 22:39:48
すみません普通にわかりました
ULONG = Hoge->addref() - 1;
Hoge->Relase();
ですね
0249デフォルトの名無しさん2010/10/06(水) 23:31:02
そのカウンタを使って処理をするな的なことがドキュメントのどっかに書いてなかったっけ
0250デフォルトの名無しさん2010/10/06(水) 23:41:09
D3DXCreateEffectFromFile()って素敵ですね。
02512472010/10/07(木) 07:23:57
>>249
あれ?そうなんですか?
もしよければ詳しくおねがいします
0252デフォルトの名無しさん2010/10/07(木) 09:24:14
>>251
Syntax
C++
ULONG Release()

Return Value
Returns the new reference count. This value is for diagnostic and testing purposes only.
02532472010/10/07(木) 09:30:05
>>252
まじすか ありがとうございます
じゃあ上の参照カウンタが0になったら、
っていうのは自分で数えておけということでしょうか?
それとももっとましな方法がありますか?
0254デフォルトの名無しさん2010/10/07(木) 10:00:58
>>253
自分で覚えておけばおk
02552472010/10/07(木) 10:54:31
>>254
まあ、たいした手間ではないですよね
ありがとうございました
0256デフォルトの名無しさん2010/10/07(木) 11:13:43
>>252
それって単にマルチスレッド環境での保証がされてないってだけじゃね?
0257デフォルトの名無しさん2010/10/07(木) 13:58:14
僕はテクスチャ型と座標を毎回関数に渡して描画してるんですが、
もっといい方法ないですか?
皆さんの描画システムを簡単に教えてほしいです。
0258デフォルトの名無しさん2010/10/07(木) 14:06:26
何をしたいのか目的も書かないで、方法だけ語ることに何の意味があるの?
前提条件も把握せずに答える馬鹿が出てくるかもしれないが、
頭の悪い内容しか返ってこないぞ。
0259デフォルトの名無しさん2010/10/07(木) 14:13:06
頭の悪い回答すると

テクスチャ型と座標を管理したクラス配列を持つクラスにやってもらう


てか、テクスチャ型と座標って何の話だ?www
0260デフォルトの名無しさん2010/10/07(木) 14:28:26
ごめんなさい。
具体的に言うと、LPDIRECTD3DTEXTURE9とそのキャラクターの位置座標を渡して
描画してもらうようにしています。

>>259
こんな回答でも参考になります。
0261デフォルトの名無しさん2010/10/07(木) 15:05:21
IDirectSoundBuffer8::SetVolume を使って音のフェードアウト中にノイズが乗ってしまいます。

【ソースコード】
  for(i=DSBVOLUME_MAX; i>DSBVOLUME_MIN; i-=25)
  {
    pDSData->SetVolume(i);
    Sleep(1);
  }
  pDSData->Stop();

フェードアウトの方法が間違っているのでしょうか。
よろしくお願いします。
0262デフォルトの名無しさん2010/10/07(木) 15:05:49
目的があって手段があるのに、未だに目的が不明。
手段の説明しかしていないのが分からないのか?
0263デフォルトの名無しさん2010/10/07(木) 15:08:46
>>261
まずはサウンドカードを別の物に交換して確認する。
02642612010/10/07(木) 15:30:21
>>263
DirectSound対応を堂々とうたっているサウンドカードにて確認してみましたが、
やはりノイズが乗ります。
0265デフォルトの名無しさん2010/10/07(木) 15:34:58
>>264
日本語は通じてる?
対応云々の話なんて一切していない。
別のサウンドカードで確認しろと言ってるの。
02662612010/10/07(木) 15:38:26
>>265
すみません。説明が不足していました。
>>264は別のサウンドカードです。
0267デフォルトの名無しさん2010/10/07(木) 15:40:21
それでノイズが気になるのなら、波形データの方を少しずつ減衰させるしかない。
0268デフォルトの名無しさん2010/10/07(木) 15:44:54
>>266
具体的にその2品の製品名なりチップセット名は?
0269デフォルトの名無しさん2010/10/07(木) 16:01:10
ボリューム値の変動を細かくする。
Sleep間隔を長くする。
もっとまともなタイマーを使う。
完全なフェードにするには1サンプル毎に減衰させる。
02702612010/10/07(木) 16:04:38
>>267
wavデータをセカンダリバッファに書き込むときに減衰した値を書き込む訳ですね。
しかし、ストリーミング再生をしているので、恐らくセカンダリバッファをロックして
バッファの値を読んで減衰した値に書きなえないとダメだと思うのですが、
フェードアウトするためにバッファをロックするタイミングがわからなかったりします。

>>268
�@SoundMAX Integrated Digital Audio
�ADigidesign MBOX2Pro ← プロ用のDirectSound対応
です。
0271デフォルトの名無しさん2010/10/07(木) 16:05:03
まずは製品の名前を聞こうぜ。
0272デフォルトの名無しさん2010/10/07(木) 16:09:15
�@SoundMAX Integrated Digital Audio
サウンドカードとしては最悪に分類される製品。
音が出るだけありがたいと思わなければならない。

�ADigidesign MBOX2Pro ← プロ用のDirectSound対応
不明
0273デフォルトの名無しさん2010/10/07(木) 16:19:06
しつこく聞いといてこの体たらくである。
0274デフォルトの名無しさん2010/10/07(木) 16:20:20
確かあんまり細かい間隔でボリュームを変えようとするとダメだった記憶がある
Sleep(1)が良くないんじゃね?
02752612010/10/07(木) 16:20:38
>>269
>ボリューム値の変動を細かくする、Sleep間隔を長くする
10秒ぐらい掛けてフェードアウトするとなめらかなのですが・・・
50ms以内にフェードアウトしたいです。

>もっとまともなタイマーを使う
Sleepには、1ms〜14msのばらつきがあるのは確認しましたが、
もっとまともなタイマーを使うというのは、1msよりも短い時間で
ボリュームを変更するということを兼ねているのでしょうか。

>完全なフェードにするには1サンプル毎に減衰させる
本当はこれをやりたいのですが、どのような方法で実装すればよいのか
僕の技術力不足でわかりません。

>>272
>Digidesign MBOX2Pro
ミュージシャンがDirectSound対応のソフトシンセを使って
音を鳴らすことを前提に設計されているようです。
0276デフォルトの名無しさん2010/10/07(木) 16:21:53
>Digidesign MBOX2Pro ← プロ用のDirectSound対応
USB接続の時点で、細かく切り替えたら駄目だろ。
0277デフォルトの名無しさん2010/10/07(木) 16:24:49
とりあえず60FPSで1フレームごとに下げることを想定して
Sleep(16)くらいで試してくれ
0278デフォルトの名無しさん2010/10/07(木) 16:27:30
そもそもフェードとはいえ短時間に急激に音を止めたり発生させたりすれば、
その衝撃がノイズになって当たり前なのは分かっているのか?
02792612010/10/07(木) 16:32:04
>>274
僕も過去にそういう経験があったような気がします。
もともと、やりたいことは、
ストリーミング再生において、「play → stop → 曲を変えてplay」のときの
stop時に発生する、ノイズを消し去ることです。

ノイズを消し去る方法をインターネットで調べているうちに下記の方法を知りました。
----
セカンダリバッファを2つ用意して
1個目 -- 曲のplay → stop → 曲を変えてplay
2個目 -- 無音の音をずっと流す。
----
実装しましたが、stop時のノイズは消えませんでした。

>>276
IEEE1394仕様です。

>>277
了解しました。
Sleep(16)あたりで試してみます。

>>278
あまりわかっていません。
どこかのサイトで50msでフェードアウトするとstopノイズが消えると見かけたので
50msを目標にしています。
02802612010/10/07(木) 16:33:29
>「Windows プロフェッショナルゲームプログラミング」という本からの引用ですが、
>このバグの対処法として、セカンダリバッファの停止時に、
>50msくらいでフェードアウトさせると良い、とあります。
というのを見かけました・・・
0281デフォルトの名無しさん2010/10/07(木) 16:34:30
50msでファードアウトって・・・

5段階くらいのフェードアウトで十分だと思う
0282デフォルトの名無しさん2010/10/07(木) 16:41:22
それって50msでフェードアウトじゃなくて
50ms間隔でフェードアウトの間違いなんじゃ
0283デフォルトの名無しさん2010/10/07(木) 16:59:53
俺の持ってる本じゃこういう表記になってるな。
> 徐々に(50msぐらいで)フェードアウト
0284デフォルトの名無しさん2010/10/07(木) 17:05:05
そんな本は窓から投げ捨てた方がいいんじゃないか?
0285デフォルトの名無しさん2010/10/07(木) 17:06:01
その文だと50msってのが間隔なのか総時間なのかどっちとも取れるような
0286デフォルトの名無しさん2010/10/07(木) 17:09:45
ここって何でこんなに低レベルなの?
二度とこないよ。
0287デフォルトの名無しさん2010/10/07(木) 17:11:28
はい、おつかれさん
0288デフォルトの名無しさん2010/10/07(木) 17:17:22
無音の音を流し続けるって解決方法は別の話なんだっけ?
0289デフォルトの名無しさん2010/10/07(木) 17:33:30
Stopノイズが発生するのは
DirectSoundって言うよりWDMサウンドデバイスのバグでしょ?
0290デフォルトの名無しさん2010/10/07(木) 17:38:42
>>286
さようならノシ
■ このスレッドは過去ログ倉庫に格納されています