トップページ⇒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/
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
さようならノシ
02912612010/10/07(木) 19:58:34
改良したつもり・・・ ジョリってノイズが鳴る。

  LONG v;
  float x;

  for(x=0.0f; x<100.f; x+=2.0f)
  {
    v = (LONG)(x > 99.99f ? -10000 : -100.0f * log(100.0f / (100.0f - x)) / log(2.0f));
    pDSData->SetVolume(v);
    Sleep(1);
  }
  pDSData->Stop();
0292デフォルトの名無しさん2010/10/07(木) 20:08:34
sleepが1mscのままじゃん
0293デフォルトの名無しさん2010/10/07(木) 20:20:28
ストップノイズが出るのと
変更間隔が短すぎてノイズが出るのは別問題
0294デフォルトの名無しさん2010/10/07(木) 21:29:18
50msなんて極小の時間の中でリニアに変化させたって人間には知覚できん
x+=20.0fにしてSleep(10)くらいにしとけ
0295デフォルトの名無しさん2010/10/07(木) 23:07:16
Core2のWinXPの話だが、Sleepは10以下を設定しても10より小さくならないからな。
0296デフォルトの名無しさん2010/10/07(木) 23:44:36
>>295
timeBeginPeriod()で精度上げれるよ。
今はMSDNライブラリにも明記されてる。
ttp://msdn.microsoft.com/en-us/library/ms686298(VS.85).aspx
0297デフォルトの名無しさん2010/10/07(木) 23:48:32
10msってかOSのタイマー割り込みの精度による
Sleepから復帰させるスケジューラーがこの割り込み分解能より短い時間で仕事できないから
10msだったり16msだったりまちまち

timeBeginPeriod(1);
を呼べば精度の低いSleepでは限界があるものの1msに近づけることはできる


ところでtimeBeginPeriodを呼んでる臭いアプリ(WindowsMediaPlayerとか)を同時に立ち上げとくと
いきなりぬるぬる動き出すアプリあるよねw
そのプログラム内のみの変更じゃなくて
OS自体のタイマー割り込みに対する変更だから起動してる全てのアプリに影響があるので注意
02982612010/10/07(木) 23:57:37
>>293>>294
>ストップノイズが出るの
無音のwavファイルを再生中にストップしてもノイズが出なかったので、
ストップノイズの問題は発生してないようです。

>変更間隔が短すぎてノイズが出るの
>>294に教えていただいた値にしたいと思います。
しかし、最大の疑問は、
『v = x > 99.99f ? -10000 : -100.0f * log(100.0f / (100.0f - x)) / log(2.0f);』
の式が本当にあっているか、とても怪しいです。
上記の式では、音は多少小さくなりますが、きちんと無音までフェードアウトしているようには
聞こえないからです。
ちなみにこのサイトに情報が載っていました。
ttp://www.hgw-a.info/?date=200304
申し訳ありませんが、音の世界に詳しい人に上記の式を検証していただけると幸いです。

>>295
PentiumMのWinXPの場合、Sleep(1)は、timeGetTimeの精度を1msに上げて
測定したところ、ほとんどが1〜2ms、ばらつきがあり、最大が14msでした。
>>295の結果は酷く精度が悪いですね。僕の持っているマシンがたまたま精度がいいだけかも。
02992612010/10/08(金) 00:01:27
>>296
その方法で精度を上げています。

>>297
>ところでtimeBeginPeriodを呼んでる臭いアプリ(WindowsMediaPlayerとか)を
>同時に立ち上げとくといきなりぬるぬる動き出すアプリあるよねw
興味があるので検証してみたいと思います。
0300デフォルトの名無しさん2010/10/08(金) 01:12:12
結局、ノイズ自体を出さないようにすることはもうできる状態なの?
0301デフォルトの名無しさん2010/10/08(金) 01:12:49
>>298
とりあえず今回に限ってはその式を適用させる意味はないよ
50msのフェードはユーザーに聞かせるための目的じゃないから普通に線形にボリュームを下げていいかと


一応書いとくと

「-100.0f」 * log(100.0f / (100.0f - x)) / log(2.0f);
↑の-100.0fがボリューム(x)が半分(50)の時の値になる
そこに書いてあることが正しくて
10db(10%)下がった時に半分に聞こえるとするなら
DSBVOLUME_MINの10%である-1000.0fじゃないとおかしい
0302デフォルトの名無しさん2010/10/08(金) 01:24:28
>>298
人のソースを意味も分からずコピペして
「怪しいです」「検証してください」はどうかと・・・。
ソースを公開している方にも失礼ですよ。明らかに間違っているならともかく。

x > 99.99f のときに -10000 (-10000が無音と仮定) になるんだから、
式が間違ってるわけではないでしょう。
検証するとすれば、

DSBVOLUME_MIN(無音) が本当に -10000 かどうか
x > 99.99f になるルートがあるか

といった部分だと思う。
>>291のソースでは、x =98 でループを抜けてしまう(xが100にならない)から
無音にならないのでは?
0303デフォルトの名無しさん2010/10/08(金) 02:12:17
>>298
あと>>261や>>291だと、時間が基準になってないから
思ったようなきれいなカーブ/線を描かないと思う。

設定するボリュームは、経過時間/フェード時間 を基準にするべき。

double total, fadetime;
clock_t start, end;

total = 0;
fadetime = 2.0f; //フェード時間(秒)
while (total < fadetime)
{
    start = clock();

    pDSData->SetVolume(DSBVOLUME_MIN * total / fadetime);
    Sleep(1);

    end = clock();
    total += (double)(end - start) / CLOCKS_PER_SEC;
}
pDSData->SetVolume(DSBVOLUME_MIN)

こんな感じ?Volume計算式とかSleepの値は調整してね。
環境なくてちゃんと試してないけどご容赦を。
0304デフォルトの名無しさん2010/10/08(金) 02:40:46
>>303
いや、時間を基準とか関係無しに
線形にデジベルを下げると
音の性質上急速にボリュームが下がってしまうという話だから
言ってることは正しいが今は関係ない

組み合わせて
pDSData->SetVolume(-1000.0f*log(1.0f-total/fadetime)/log(0.5f));
とするなら有りだと思うが
0305デフォルトの名無しさん2010/10/08(金) 02:41:38
Direct3DのPresentメソッドが -2005530516って素敵な数を返すんですが、これって何の
エラーですか?どうやらClearなどは成功していて、この関数だけが失敗しているようなんですが
0306デフォルトの名無しさん2010/10/08(金) 02:53:06
>>305

HRESULT: 0x8876086c (2289436780)
Name: D3DERR_INVALIDCALL
Description: Invalid call
Severity code: Failed
Facility Code: FACILITY_D3D (2166)
Error Code: 0x086c (2156)

呼び出しが無効
引数が不正か
IDirect3DDevice9::Presentの場合
BeginScene 〜 EndScene のペア間で呼び出されると、失敗し、D3DERR_INVALIDCALL を返す


参考までに教えとくと
SDKインストール時に一緒に入ってくる
DirectX Utilitiesのなかに
DirectX Error Lookupというツールが入ってる
16進ならHex、今回のように10進ならDecimalにチェックいれてLookUpでエラーコードを確認できる
0307デフォルトの名無しさん2010/10/08(金) 03:03:54
DirectX エラー処理ユーティリティ ライブラリ
http://msdn.microsoft.com/ja-jp/library/bb173034(v=VS.85).aspx

失敗したときに原因がすぐ分かるようにしといたほうがいいよ
0308デフォルトの名無しさん2010/10/08(金) 03:17:31
>>306
>>307
ありがとうございます。BeginScene〜EndScene間で呼んじゃってました。
エラー処理って大事ですね、今度から使うようにします
0309デフォルトの名無しさん2010/10/08(金) 08:18:21
>>307
こんな便利なのあったのか
半年間知らずにdirectXやってた
03102612010/10/08(金) 16:46:48
皆様ご指摘ありがとうございました。
>>303と>>304のソースを、そのまま使わせていただきましたが、
SetVolume命令を使うとSleepを何ミリ秒にしようが、
ノイズが乗る仕様だと諦めました。
『fadetime = 0.3f; //フェード時間(秒)』にて実装しました。

>>303
ソースを動く状態で載せていただき、大変感謝しております。

>>304
ご指摘ありがとうございます。
>>303の方法とマージさせていただきました。
0311デフォルトの名無しさん2010/10/08(金) 18:40:06
フォームアプリにdirectxって組み込める?
0312デフォルトの名無しさん2010/10/08(金) 19:25:26
できる
0313デフォルトの名無しさん2010/10/08(金) 20:21:24
そもそもフォームアプリって何?
ダイアログベースのアプリのこと?
CLIで作ったWindowsフォームアプリケーションのこと?
0314デフォルトの名無しさん2010/10/08(金) 20:31:35
>>313
すいません、説明不足でした。
Windowsフォームアプリケーションのことです。
普通にcppファイルに書き込めば良いのでしょうか?
0315デフォルトの名無しさん2010/10/08(金) 21:34:52
どっかにCLIでDirectXの動かす解説のあるサイトがあったはず
ぐぐれ
03162612010/10/08(金) 23:47:56
話題を引きずって申し訳ないのですが、DirectSoundのSetVolumeによるフェードアウトの件、
CPU:atom330 OS:Win7で試してみたところ、ノイズはまったく乗りませんでした。
Win7ってリアルタイム処理が強化されているのかなって思いました。

当初の目的は
�@リソースの状態になったwavファイルをストリーミングで再生する。
�A停止する。
だけだったのですが、曲を変えるときにノイズが乗るため、
�Bフェードアウトする
という処理を付け加えました。

後になって思ったのですが、�@�A�Bの機能は、DirectMusicでも、できたのではないかと思います。
しかも、DirectMusicだったら、フェードアウトを意識せずに曲を変更してもノイズは乗らなかった
かも知れません。
DirectX9関係の本を何冊か読んだのですが、DirectMusicについては紹介されていない本もあり、
DirectSoundによるストリーミング再生が紹介されているものがほとんどでした。
DirectMusicの命令を知らないのですが、DirectSoundの上で動いてそうなので、
やはり、音量をいじってフェードアウトする場合は、同様にノイズが乗ったのかも知れません。

また、質問で申し訳ないのですが、DirectMusicで�@�Aを実装されている人はいますでしょうか。
もし、DirectMusicでフェードアウト時にノイズが乗らなかったら、DirectMusicで作り直すことも、
考えています。なお、DirectMusicを使った場合、OSの互換性の問題など発生しませんでしょうか。

よろしくお願いします。
0317デフォルトの名無しさん2010/10/09(土) 00:13:15
自分も丁度曲チェンジの時ノイズが乗ってるって友達に指摘されたから聞きたいとこでした。
0318デフォルトの名無しさん2010/10/09(土) 02:09:27
IDirectMusicAudioPath8::SetVolumeは、まんまフェードを作れる模様。
ただどういう実装でどの程度の精度があるのかは知らない。
ただDirectMusic自体が廃止される方向なのは周知の通り。

DirectSoundの話に戻ると、
Sleepでタイミングを作ってSetVolumeする方法は運任せすぎる。
せめてIDirectSoundBuffer8::GetCurrentPositionとかIDirectSoundNotify8でタイミングを作るべき。
ただDirectSound自体もVista以降はWASAPI上で動いてるから、期待した精度が出る保証はない。

確実にフェードを作るには、既に出ているように、バッファ内のサンプル値を直接いじるしかない。


なんつって
0319デフォルトの名無しさん2010/10/09(土) 07:17:17
>>316
リアルタイム処理云々は無関係。
いい加減な間違った情報を書き込む前に、WindowsVista以降でDirectSoundのデバイスドライバがどういう扱いになったのか調べろ。
0320デフォルトの名無しさん2010/10/09(土) 08:21:05
>>319
最近のOSのサウンド事情っぽい記事読んできたけど混乱してるなぁw
エミュレーション機能があるならこのままDirectSoundがいいんじゃねぇかと思ったけど
使っただけでエラーでたって報告あるのかよ
でも、それだと以前のゲームが動かないからそれは修正するハメになると思うけどね

俺等はとりあえずエミュにまかせてこのまま様子見か?
なんかいま色々動くのは損な気がする
0321デフォルトの名無しさん2010/10/09(土) 13:10:03
DirectX10使ってるんですが
CreateTextureとかで作ったリソースについて
デバイス解放前に全て開放されているかどうかチェックしたいのですが
そういう機能ってSDK側では用意されてますか?
0322デフォルトの名無しさん2010/10/09(土) 13:58:48
自分で管理するしかない
0323デフォルトの名無しさん2010/10/09(土) 14:42:10
SetTextureStageStateを使わなくてもピクセルシェーダーでテクスチャブレンディングできるとおもうのですが
なぜ存在するのでしょうか
0324デフォルトの名無しさん2010/10/09(土) 14:45:42
固定機能パイプライン
0325デフォルトの名無しさん2010/10/09(土) 14:45:46
>>323
固定シェーダの名残みたいなもんじゃねーの?
0326デフォルトの名無しさん2010/10/09(土) 14:48:41
DirectX10以降で消滅
0327デフォルトの名無しさん2010/10/09(土) 15:06:52
どうも
0328デフォルトの名無しさん2010/10/09(土) 15:51:28
頭の悪い人達一覧
http://www.google.co.jp/search?num=100&hl=ja&q=%22%8C%C5%92%E8%83V%83F%81[%83_%22
0329デフォルトの名無しさん2010/10/09(土) 16:02:06
そういや11のテッセレーターは固定機能シェーダーなんだよね?
シェーダー側に記述するんじゃなくて
デバイスに対して設定するとかそんな感じなの?
0330デフォルトの名無しさん2010/10/09(土) 16:34:30
Direct3D11では描画に関する操作は、デバイスから一切が切り離されているが、
いったい何を言ってるんだ?
0331デフォルトの名無しさん2010/10/09(土) 21:21:06
>>328
バカですね
0332デフォルトの名無しさん2010/10/09(土) 21:50:10
お前ら頭よすぎなんだよ。ちくしょう。
0333デフォルトの名無しさん2010/10/09(土) 23:28:18
>>322
どうもです
うーん独自レイヤー作るのだるいな・・・
0334デフォルトの名無しさん2010/10/09(土) 23:39:46
そもそも開放し忘れが起きるかもしれないような設計がおかしい
それとも何か特殊なタイミングでチェックしたいわけ?
0335デフォルトの名無しさん2010/10/10(日) 02:53:14
質問です。
Direct3Dで読み込んだ256色bmpの
パレットの操作はどうすればいいんでしょうか?

現状
D3DXCreateTextureFromFileExでテクスチャを読み込み、
PALETTEENTRYの配列にパレットの値の取得及び、画面へ描画も出来ています。
※パレットの値も正確に取れています



03363352010/10/10(日) 03:00:37
追記スマソ。
Direct3Dのバージョンは9です。
0337デフォルトの名無しさん2010/10/10(日) 03:07:59
>>335
無理
実際に作られたテクスチャのフォーマットを見ればわかると思うけど
現在普及してるビデオチップじゃ256色以下のパレットテクスチャを作ることはできない
PALETTEENTRYには読み取った時の色情報が書き込まれるだけで
それをどうこうしてパレットアニメーションとかはできない

シェーダーで似たようなことはできるかもしれないけど
素直に画像で用意した方が早いと思われ
0338デフォルトの名無しさん2010/10/10(日) 10:28:05
確かにD3Dだとスライムベスすら
簡単に表示できない・・
0339デフォルトの名無しさん2010/10/10(日) 11:34:42
昔あったアルファ値と普通の画像を2枚用意して合成して透かすのってできる?
検索しても見つからないし困ってるんだよ
0340デフォルトの名無しさん2010/10/10(日) 12:42:51
>>339
どういう意図でアルファ値と画像を分離したいわけ?

単に抜きがやりたいだけなら最初からアルファチャンネル付の画像フォーマットを使えばいい
アルファ部分を動的に変化させたいとかなら
シェーダーを使うかテクスチャブレンドで対応できる
0341デフォルトの名無しさん2010/10/10(日) 13:37:28
>>337,338
回答ありがとうございます。
素直に画像用意します。

ただ、1つ疑問なのはギルティギアイスカ(PC/PS2版共に)はゲーム中に
カラーエディットが出来る仕様になっていますが、
あれは337の言うようにシェーダーで行っているんでしょうか?





0342デフォルトの名無しさん2010/10/10(日) 13:44:11
聞きたいのはPC版の方なので、PS2の方はスルーして下さい。
スマソorz
03432612010/10/10(日) 15:22:34
>>318
使用する関数を教えていただきありがとうございます。
なんとかフェードアウトを実装することができました。

�@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
>>341
画像ファイルから直接テクスチャを作ってるんじゃなくて
インデックスデータとパレットデータを使って
生成した空テクスチャに色情報を書き込んでるんじゃないの?
動的に変化とかじゃなくて.palの上書きとかでしょ?
0345デフォルトの名無しさん2010/10/10(日) 18:10:46
ピクセルシェーダを使って、画像を二枚用意して片方をテーブルデータとして使えばパレット的なことは出来るけど、
そこまでして何故パレットが必要なのか理由がさっぱり分からない。
0346デフォルトの名無しさん2010/10/10(日) 18:20:33
10年前からきたんじゃないの?
0347デフォルトの名無しさん2010/10/10(日) 18:35:32
>>344
>>動的に変化とかじゃなくて.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
DirectX9.0cなんだけど、
デバイスを作成した後 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
シェーダー使って描画する際、2D描画の時は皆さんどうしてますか?

シェーダーの時は変換済み座標って使えるのしょうか?

初心者なのでお手柔らかにお願いします。

今まで固定機能パイプラインでやってきました。
そのときは変換済み座標を使ってました。
それをそっくりそのままシェーダーでの描画に変えたいのです。
すいません。
0354デフォルトの名無しさん2010/10/11(月) 19:48:35
シェーダーで何もしなけりゃいいだろwwwwwwwwwww
0355デフォルトの名無しさん2010/10/11(月) 20:10:27
シェーダーでやりたいのです。
頂点変換済み座標ってシェーダーでは使えないんですか?
0356デフォルトの名無しさん2010/10/11(月) 20:13:24
とりあえず試してみれば?
0357デフォルトの名無しさん2010/10/11(月) 20:26:07
>>355
頂点シェーダで出力する頂点は
-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:42
ごめんなしゃい
0362デフォルトの名無しさん2010/10/11(月) 21:17:43
シーンによると思うけどね
0363デフォルトの名無しさん2010/10/11(月) 22:50:34
>>359
行列を作るのはCPU
適用するのはGPU
頂点トランスフォームは、GPUがその能力を発揮出来る
数少ない機会だからな、やらせなきゃ損
0364デフォルトの名無しさん2010/10/11(月) 22:57:16
カリカリに描画命令数の最適化をしない限り
CPU時間は余りまくりなんだからどっちにやらせてもトータルは変わらんよ
0365デフォルトの名無しさん2010/10/11(月) 22:59:44
>>363みたいな間違った認識をするから自分で試すべき何だろうね。

まず頂点シェーダをGPUでやらないビデオカードがあるのが一点。
GPUとCPUの性能バランスが悪ければ、CPUにやらせた方がパフォーマンスが高いことがあるのが二点。

つまり速いかどうかは環境依存。
0366デフォルトの名無しさん2010/10/11(月) 23:15:49
>>365
で、レアケース持ち出して
「いろんなパターンがあるからわかりません」が
正しい認識だって?
笑える
0367デフォルトの名無しさん2010/10/11(月) 23:17:31
確かにそこら中に存在するIntelのオンボードがレアケースだと言う認識は笑える。
■ このスレッドは過去ログ倉庫に格納されています