1 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:55:56 ] ※回答する人も、質問する人も必ず読んでください これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 4.余計な雑談は不要ですよ 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「SDK見れ」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する方 】 ・ どんな事で躓いているのか明確にしよう。 ・ 長くならないなら躓いている部分のコードを晒してみれ。 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。 ・ 回答して貰ったら、出来るだけお礼もしよう。 【C++】 DirectX初心者質問スレ Part16 【C】 pc11.2ch.net/test/read.cgi/tech/1202634347/
738 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:54:40 ] ?
739 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:59:26 ] ああ、そういう事か。 犯罪者の都合は考慮しないよ。
740 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:07:03 ] >>738 ランタイムのウェブインストーラーや開発キット、ヘルプなんかは ウィンドウズの正規OSでないと落とせなくなった なのでたまにこのスレで「落とせません」とか「見れません」とか 「わかりません」とかいう奴はほぼすべて割れ厨
741 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:11:28 ] PC買えばOS付いてくるのに割れ厨って意外と多いのな
742 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 04:24:44 ] オンラインゲームをやってるんですが directxを前のverに戻したらパフォーマンスって下がりますか?
743 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 04:51:37 ] あ
744 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 15:05:13 ] 安全に Release メソッドを呼ぶマクロとして SAFE_RELEASE のようなものを見かけますが、 // safe release #define RELEASE(p) ( (p) ? ( (p)->Release(), (p)=NULL ) : (0) ) このマクロで何か問題ありますか? 参照を使った関数だと BCC に注意されたので
745 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 16:17:37 ] >>744 翻訳しないで原文ママのエラーメッセージを。
746 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:35:36 ] DirectShowを使ってGUIのメディアプレイヤーを作っているのですが、 IMediaSeeking::GetDurationで再生時間を取得すると、 3分33秒より長いファイルはオーバーフローして負の値になってしまいます。 IMediaPosition::get_Durationで取得しようとすると、E_NOTIMPL(実装されていない)が帰ってきます。 3分33秒より長いファイルの再生時間を取得するにはどうすればいいのでしょうか? 開発環境はVisual Studio 2005 Pro、言語はCです。
747 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:37:54 ] 最小のコードくらい出せカス
748 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:38:00 ] CComPtr使いなさい
749 名前:746 mailto:sage [2008/06/08(日) 17:49:53 ] >>747 IGraphBuilder *pGraph; IMediaControl *pMediaControl; IMediaSeeking *pSeek; IMediaPosition *pMediaPosition; REFTIME length; REFERENCE_TIME TotalTime; CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph); pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pSeek); pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPosition); pGraph->RenderFile(FileName, NULL); pMediaPosition->get_Duration(&length); pSeek->GetDuration(&TotalTime); こんな感じです。
750 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:43:53 ] REFERENCE_TIME は普通に使ってる分にはオーバーフローしないが どこかで int にキャストされてるんじゃね SetTimeFormat 指定しておいたほうがいいんじゃねえ
751 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:34:30 ] DirectMusicを最近扱っているのですが、 GetGlobalParam(GUID_PerfMasterVolume, reinterpret_cast<void*>(&V), sizeof(V))で 何故かE_INVALIDARGが返ってきて音量の取得ができません。 不正な引数とありますが、どれが不正な引数なのでしょうか?(Vはlong型です) ちなみに、この処理を行う前にパフォーマンスの作成、パフォーマンスとシンセサイザーの初期化、 ローダーの作成を行っています。
752 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:41:48 ] >>751 msdnによると以下のようにあるけど、SetGlobalParamは使用済み? >SetGlobalParam が rguidType について一度も呼び出されたことがない場合、このパフォーマンスが現在処理している >グローバル データ リストの中に、rguidType がない可能性がある。その場合、このメソッドは E_INVALIDARG を返す。 >つまり、どのパラメータにも、GetGlobalParam を使って取得できるデフォルト値があると想定しないこと。
753 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:47:46 ] 質問です ttp://richa850.hp.infoseek.co.jp/programming/dx9_01.html ここを参考に、後述のプログラムを書いたのですが、少なくともRADEON9600SEで画面がおかしくなります。 正しい方法はどうやればいいのでしょうか? ・APIリファレンスを読んだところ、MultiSampleTypeなどは以前のものと一緒でなければならないとあったので、上記ページでは決め撃ちになっているのを修正しました ・画面がおかしくなるを具体的に言うと、テクスチャが壊れていたり(正しいテクスチャの一部が緑や白のペンキでラクガキでもされたように塗りつぶされてる)、まったく描画されなかったりです ・old.Widthが中途半端な値(672とか)だったりすると、OSごと巻き込んで落ちます。(PC再起動がかかります) ・ D3DSURFACE_DESC old; CComPtr< IDirect3DSurface9 > pCurrentDepthStencil; pDev->GetDepthStencilSurface(&pCurrentDepthStencil); pCurrentDepthStencil->GetDesc(&old); // 新しく作ったテクスチャーの大きさと、現在の深度ステンシルの大きさを比較. if ((old.Width < descNewTexture.Width) || (old.Height < descNewTexture.Height)) { // 深度ステンシルを作り直す。 CComPtr< IDirect3DSurface9 > pNewDepthStencil; pDev->CreateDepthStencilSurface ( __max(descNewTexture.Width, old.Width), __max(descNewTexture.Height, old.Height), old.Format, old.MultiSampleType, old.MultiSampleQuality, TRUE, &pNewDepthStencil, NULL ); pDev->SetDepthStencilSurface(pNewDepthStencil); } // 上記を行なっただけではまだ問題はおこらず、下記を行なうと発症します。 // 上記だけ、もしくは下記だけだと問題はおきません。 pDev->GetSwapChain(0, &pSwapChain) pSwapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pRenderTarget); pDev->SetRenderTarget(0, pRenderTarget);
754 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:56:19 ] >>752 ありがとうございます、使用しておりませんでしたorz デフォルト値がないのですね、なぜこんな仕様になっているのやら…orz
755 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 08:10:40 ] 変数でも何でもとりあえず初期化しやがれとしか言い様が無い
756 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:45:36 ] Ver9あたりからボタンとかテキストボックスのような コントロールのようなものが使えるようになってるみたいなんだが あれってなんて名前でしょうか? 使い方書いてあるHP検索したいわけだが なんて検索したらいいかわからんのです
757 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:16:45 ] DXUT
758 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:35:52 ] dxutに未来はあるのでしょうか?
759 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:50:35 ] モデルの、パーツだけ別のモデルに差し替えることって なんという言葉でしたっけ
760 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:36:07 ] void PartsDakeSashikae_to_OtherModel(void) { return; }
761 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 11:24:56 ] #define PDtoOM PartsDakeSashikae_to_OtherModel PDtoOM();
762 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:05:08 ] >>760-761 面白いと思ってやってるのか?
763 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:35:41 ] 自前の画像を使ってボタンを作るとき、レスポンス(押しっぱなし) の頻度をループ数とタイマーのどちらで制御すべきだと思いますか?
764 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:48:27 ] タイマー ループにして何か良いこと有るの?
765 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:38:24 ] ループだとFPSに依存するから怖いよ
766 名前:763 mailto:sage [2008/06/14(土) 03:46:37 ] thx やっぱりそうなんだ。 処理落ちすることって前提なのね。
767 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 04:33:41 ] メッセージで処理しろよ。つーかwinプログラミング覚えろよ。
768 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 10:52:37 ] 軽いゲームならfps依存でかまわんと思うよ。 ただ、その処理をカウンタで実装したところで タイマーと比べて簡単になるとは思わんが。
769 名前:767 mailto:sage [2008/06/14(土) 20:46:38 ] >>767 プロシージャのタイマーより クラス内でtimeGetTime()使ったほうがいいだろ?
770 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 20:56:25 ] 変な人がおる・・・
771 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:19:24 ] IDirect3DBaseTexture9から画像サイズって取れますか? IDirect3DTexture9じゃないです
772 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:41:00 ] 取れないよ。 取れないけど・・・どういう状況でその要求が出てくるんだ? まともな設計してりゃありえないと思うんだが。
773 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:01:16 ] シェーダークラスで GetTextureで0のテクスチャの幅と高さを シェーダーに渡したかったのです。 Textureは、普通のテクスチャだったり、RENDER_TARGETだったりするし、 サイズを別に持たせたくなかった(メモリけちった)のです 無理っぽいので、別個に渡すようにします。
774 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:24:40 ] あぁ、GetTextureからという話ならIDirect3DResource9::GetTypeで判別して 各継承クラスにキャストすりゃいいだけだよ。
775 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:44:20 ] 普通のテクスチャもRENDER_TARGETも同じIDirect3DTexture9だとおもうけんど
776 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:35:37 ] ボ、ボリュームテクスチャも作るつもりだもん
777 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:44:20 ] お前かわいいな ちょっとこっち来いよ
778 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:26:38 ] LPDIRECT3DDEVICE9から ライトのポジションは、GetLightから取れるのですが、 カメラのポジション取得は、できるのでしょうか? 無理ですか?
779 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:23:47 ] カメラのポジションも当然取得できる。 つか出来ないわけねーだろ。
780 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:08:03 ] カメラの「位置じゃなくビュー行列が取れるだけだから そっからカメラの位置は計算しないといかんけどな
781 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:16:51 ] 」
782 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 03:55:17 ] やっぱ、シェーダでカメラの位置が必要になるので カメラ行列生成情報は、グローバルで持っておくべき? あと、ビルボード行列も
783 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 04:27:29 ] >>782 同じことで悩んでる人発見 カメラのクラスってどこに配置すればいいんでしょうね
784 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 10:01:29 ] カメラを管理するクラスをワールドを管理するクラスが持つだろJK
785 名前:デフォルトの名無しさん [2008/06/19(木) 13:49:00 ] カメラはワールドに複数配置できて、 アクティブな奴を切り替え出来るように作っておくとデバッグにも便利
786 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 15:43:47 ] その発想は無かった
787 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 18:54:51 ] >>786 素人乙
788 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:22:34 ] いろいろ3Dツールを使って試しているのですが 分からないことがあるので質問です。 例えばメタセコイアでpng形式のアルファ付きテクスチャをポリゴンに張ると レンダリング結果はテクスチャの透明部分はポリゴンも透明になりますが xファイルに出力してビューワで見ると透明部分は白色表示になってしまいます これはxファイルにはテクスチャのアルファは無視(白と認識)されるという事なのでしょうか?
789 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:32:36 ] 1) メタセコにおいて、テクスチャマップとアルファマップの両方を指定している場合、 xファイルはマルチテクスチャをサポートしていないので、xファイルに保存した段階で アルファマップの情報は失われる。 2) そのビューワ(何のビューワか知らんが)がテクスチャのアルファ値を無視しているだけ。
790 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:07:04 ] >>789 1に関してはテクスチャは1枚しか使用していません。 メタセコイアの材質設定で「模様」のテクスチャにアルファ付きのpng画像を指定した場合と 材質設定の「透明」に白黒のbmp画像を指定した場合の両方を試しましたが どちらもメタセコイア上で透明に見えていた部分はxファイルで白になっていました。 2に関してはSDK付属のMeshViewerを使って見ていました。 一応自作のプログラム上でも表示を試しましたが ビューワと同様でアルファの影響は見られませんでした (DirectX初心者な自分が作ったプログラムなので それ自体にアルファに関する抜けがある可能性もありますが) 透過効果を使ったxファイルのサンプルでもあればいいのですが 現状では表示するプログラム側に誤りがあるのか 3Dツール側の設定が足りてないのか分からずなんとも・・・
791 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:22:24 ] PNGのアルファってかなり怪しかった気がするんだけど。 素直にDDSを使う方がいいと思われ。
792 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:29:36 ] 失敗しているとしたら、テクスチャの読み込み段階でアルファ値をわざわざ削ってしまっているか、 レンダーステートおよびテクスチャステージステートの設定が適切でないか、だ。 後者の方が圧倒的に多いパターンなんだけど、 このへん実はピクセルシェーダ使った方が余程わかりやすかったりするんだよねぇ。
793 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:02:14 ] >>785 おまえ頭いいな
794 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:09:58 ] なんだかんだで DirectGraphicsのほとんどの要素をラッピングしたクラスが必要なんですね。 たいへんですね
795 名前:790 mailto:sage [2008/06/20(金) 08:34:24 ] >>791 DDS形式使っても無理でした(つД`) >>792 レンダーステートとテクスチャステージステートは 特に設定していなかったので、レンダーステートに D3DRS_ALPHABLENDENABLE設定してみたのですが 結果は変わらず。 テクスチャステージステートはデフォルトでイイと思うのですが この辺の設定も自信無いので違ってたらご指摘お願いします orz ちなみに使用してるSDKのバージョンは2004/Oct
796 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:31:11 ] >>795 半透明描画はSRCBLENDとDSTBLENDの設定とCOLOR_OPの設定もちゃんとやらないと話が始まらないぞ。
797 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:40:18 ] >>795 まずはテクスチャのα値をちゃんと参照する方法を覚えろ。 しかしコンパイル済みMeshViewはテクスチャのα値無視するのは確かに不適切だよな ソース入ってるから自分でリコンパイルすりゃいいんだけど、メニューでON/OFFくらいつけといてほしかったわw
798 名前:790 mailto:sage [2008/06/20(金) 10:18:37 ] >>796 ,797 d、やっと出来ました!ヽ(`Д´)ノ pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); この二行が抜けてました、ってか D3DRS_SRCBLENDALPHAとD3DRS_DESTBLENDALPHAの定数と勘違いして使って混乱してました(つД`)ゴメンナサイ テクスチャステージステートはとりあえずデフォルトでも大丈夫でした。 それにしてもMeshViewerはα反映しないんですね お陰でデータの方に問題があるのかと勘違いして無駄な時間を・・・orz
799 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:04:01 ] 今さっき、テクスチャのαを適用するようにしたMeshViewを作ったわ 2008だとそのままじゃコンパイル通らなくて、いろいろめんどかった てか、存在しないヘッダファイルをincludeするなよサンプルなのにって思った
800 名前:790 mailto:sage [2008/06/20(金) 20:58:27 ] 昼に解決したと思って放置してたものを弄ってて 背景透けたと思ってたら、バックグラウンド(クリア色)は 透明ポリゴン越しに透けて見えたけどすぐ後ろに別ポリゴン置いたら そのポリゴン無視してバックグラウンドの色が表示されてることに気づいた・・・orz
801 名前:790 mailto:sage [2008/06/20(金) 22:44:21 ] ぁぁ・・・Zバッファ有効にしてたら透過が上手くいかず Zバッファ無効にすると前後関係を自動処理してくれないから 自前で描画順序を制御しなけりゃいけないって事かな(;´-`)
802 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:45:39 ] 半透明 Zバッファ でぐぐりまくりんぐ
803 名前:790 mailto:sage [2008/06/20(金) 22:52:38 ] つい先ほどからぐぐりまくりんぐです。 初歩の初歩みたいな疑問をグダグダ書き連ねて申し訳なさ爆発です。
804 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:55:09 ] 昨今の事情を鑑みるからには、半透明でモデルを書くな。 使うなら見た目は諦めるか深度ピーリングでもしろ。 頂点処理なんてアホほど浮いてるんだしアルファで抜くより全部 ポリゴンのほうが圧倒的に最近の主流だったりはする。
805 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:01:57 ] あおりじゃなく、深度ピーリングってなんのことだ? あと、「半」透明じゃなくて、アルファ値を使った「透過」がやりたいだけなら、アルファテスト使えばよくね?
806 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:04:45 ] >>804 頂点処理が浮いてるっていうのは、 大抵の場合ピクセルシェーダが忙しくて、頂点シェーダが遊んでるってことですか? どうやったらコアの稼働率?を調べることが出来るんでしょうか?
807 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:09:24 ] >>806 まだそんなことを気にするレベルに至って無い 順番にやっていけ 半透明とZバッファの相性の悪さは昔からの命題 一般的には半透明の描画だけリストに登録しておいて、完全不透明の描画が全て終わった後、カメラから遠い順に描画していく std::multimap<float, IAlphaDraw*> でリストつくると楽だよ floatがカメラからの距離 IAlphaDrawは半透明描画の描画インターフェースを提供するインターフェースクラス
808 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:16:35 ] >>806 NV PerfHUD
809 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:41:46 ] なんか2度書きってなかったっけ?
810 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:43:03 ] 不透過の物体を描画するときはZバッファをONにしてカメラに近いほうから描いていくと速いぞ
811 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:53:12 ] エフェクトやパーティクルなんかは別として、 モデル自体の半透明処理はかなりの例外扱いだからなぁ。 被写界深度やモーションブラーなんかもやれないし 特殊な条件以外で使うようなものじゃない。
812 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 07:11:37 ] 2Dゲーでかなりの枚数を重ねようとしてるなら 正直、PCのグラボではフィルレートがまったく足りてないと思う
813 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:28:27 ] 3Dでもハイレゾで普通にバンプ、スペキュラ、シャドウとかやってると 普通にピクセルシェーダーカツカツになるよ。 逆に頂点は数百万クラスになってきてるけど、今は統合型アーキテクチャが主流だしどうなることやら。
814 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:56:02 ] うんうん頂点シェーダはなにやっても落ちないわ でもピクセルシェーダはα物をちょっと拡大して表示するだけでもう処理落ちはじめやがんの これってなんで? PS2とかだとそんなことなかった気がすんだけっちょ
815 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 10:02:18 ] PS2はフィルレートバカじゃん。 使うテクスチャも16色や256色のパレットが殆どだし。 そもそも解像度も640x480より小さいしなー。
816 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 10:14:13 ] 頂点毎に呼ばれるVSと違ってPSはピクセル毎に呼んでるはずだから 解像度あげたらエライ負担になるだろ
817 名前:デフォルトの名無しさん [2008/06/21(土) 11:29:23 ] DirectXについて料金のことですが これって無料でダウンロードできるんですか?
818 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 11:48:48 ] いいえ。MicrosoftとNDA契約を結んだあと 利用目的に応じたライセンス料を支払う必要がありますん。
819 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 11:55:28 ] 初心者質問スレなんだから意地悪しないでググレカスでいいじゃないか・・・
820 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 12:13:01 ] ダウンロードセンター行けば無料か有料化は一瞬で分かるだろ
821 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:48:25 ] やべ、俺NDAのサインしてねぇ。 あれ、誰かきた。
822 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:51:09 ] DrawPrimitiveを使った描画で消失点を画面中央以外にするにはどうすればいいですか?
823 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:54:02 ] >>822 Projection 行列をいじる
824 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 14:28:40 ] >>823 即レスありがとうございます。 色々調べてみたのですがよくわかりません。 D3DXMatrixPerspectiveFovLHの他に座標変換するのですか?
825 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 14:31:09 ] >>824 D3DXMatrixPerspectiveOffCenterLHとか使うといい。
826 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 15:19:14 ] >>825 できました。ありがとうございました。
827 名前:デフォルトの名無しさん [2008/06/21(土) 18:38:44 ] boost::intrusive_ptr<IDirect3DVertexBuffer9> spVB; とVBを確保したのですが、 pd3dDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX)*4, 0, D3DFVF_2DVERTEX, D3DPOOL_DEFAULT, m_pVB.get(), NULL ); と、作るときにダブルポインタに出来ません・・・ IDirect3DVertexBuffer9* buf=spVB.get(); pd3dDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX)*4, 0, D3DFVF_2DVERTEX, D3DPOOL_DEFAULT, &buf, NULL ); と渡す以外の方法で良い方法ありませんか? intrusive_ptrを使うのが悪いのだろうか・・・
828 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:44:15 ] CComPtr使えよ
829 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:50:29 ] >>828 ありがとうございます。 DXUTを使ってるので、 atlbase.hをインクルードするときに Need to include strsafe.h after tchar.h って言われるのでIntrusiveに逃げようかと思ったんですが、 やはりDXUT.hの中に入れ込んででもCComPtrのほうが良いのでしょうか。。
830 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 19:12:50 ] その程度のリソースは余計な事せずにそのまま管理すりゃいいだろ・・・
831 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 19:19:23 ] >>827 &(spVB.get())じゃダメなのか?
832 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 19:38:10 ] >>829 何を嫌がってるのか理解できんが、だったらintrusive_ptrをそのまんまぱくって T** ptr_ptr() { return &px_; } みたいなのを付け足したのを自前でこしらえたらいいじゃん。 >>831 こらこらw
833 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 19:44:39 ] >>830-832 ありがとうございます。 やはり普通にCComPtrを使うことにしました。 >>832 の意見は大変参考になりました。 ありがとうございました。
834 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 19:52:30 ] >>827 CreateVertexBufferに渡すのは素のIDirect3DVertexBuffer9*で、 それを使ってintrusive_ptrを初期化すればいいかと。
835 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 20:51:57 ] >>829 その警告だったら、DXUT.hの中でATLのヘッダ読み込めば出ないけどね。 ATL使うのがデフォなら、DXUT.hに追加してプリコンパイル済みヘッダと 使用するのもありだと思うけど。
836 名前:835 mailto:sage [2008/06/21(土) 21:00:56 ] ああ、すまん。上のレス読んでなかった。 DXUT.hの中で読み込めばいいのは知ってたのか。 typoしたんだが直すまでもないな。
837 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 21:21:45 ] >>833 CComPtrはかなり独立したテンプレートクラスだから、コピペでパクるのもいいぜ? ってか俺はそうしてる。 なぜならVS2008にはatlbase.hが入ってないからだ;;
838 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:05:48 ] スマートポインタって不必要になったら自動で削除っていうけど 不必要になったときっていつなんだ? スタティックで参照されると一生消えないんだろうか?もしかして
839 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:08:19 ] 俺はデータを管理するクラス経由でアクセスするようにしてるから vector、list、set、map、stringくらいしか使ってないな・・・。
840 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:09:51 ] >>839 setとmapってどういうときに使うの?
841 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:26:04 ] >>838 参照がなくなった時だろ。
842 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:57:07 ] >>838 普通はプログラムの終了時だと思うぞ
843 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 02:27:49 ] >>840 mapは外部ファイルから読み込みするリソース(シェーダー、テクスチャ、モデル)なんかを 二重に読まないようにファイル名をキーにインターフェイス突っ込んどいて参照カウンタで管理に。 multimapとかmultisetなんかはパーティクルとかの挿入ソート代わりに。
844 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 07:02:25 ] >>837 入ってないのExpress Editionだけだろ
845 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 10:15:19 ] しかも2008に限らず無料版でATLが入っていたことなどないはず・・・・あ、2003(コンパイラのみ提供)はATLありだったっけ?
846 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:05:11 ] >>842 じゃあ、うっかりスタティックで参照しやがった馬鹿が開発チームにいたら デフォでリークし続けるってこと? 参照あってもこっちが削除したいっていったら強制的に削除してほしいときは どうしたらいいだろうか?
847 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:14:10 ] 参照があるのに削除したらスマートポインタの意味がないじゃん。
848 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:18:44 ] プライオリティ設定できないの? 優先度高の奴が残ってるときだけ参照あったら削除しないで 優先度低の奴は残ってても強制執行・・・みたいな
849 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:44:55 ] weak_ptrみたいなの?
850 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 12:17:08 ] >>846 言ってることがよく分からんが その「スタティックな参照」を行ってるスコープから出れば解放されるんじゃないの 一番大きいスコープ=プログラム(プロセス) スコープから出る=プログラムの終了
851 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 12:52:04 ] >>850 スコープから出る時にデストラクタが呼ばれるならそれはLocal変数であってStatic変数ではない罠。
852 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 14:54:23 ] >>851 スコープは例えただけで、関数内スタティック変数が関数抜けると 解放されるとかそういう意味で言ったんじゃないんだ 分かりづらい例えですまんかった 「プログラム終了時に消えると思う」に対して「スタティック参照したらリークするんじゃ」 って話だったから終了時に消えるって事を押したんだが 関数内スタティックが関数抜けても消えないっていうのを問題にしているのかね>>846 は
853 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 16:32:05 ] >>846 参照カウンタの概念は理解してるか? それとグローバルスコープ(プログラム終了)を抜ける時に グローバル変数やスタティック変数のデストラクタが呼び出されて 解放されることも。
854 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 17:30:45 ] その辺りは実際に書いて試してみたほうが早いよね
855 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:06:10 ] 要はバッサリ削除したいのに 使いもしないスタティック参照がインスタンスを消させなくしているから どーでもいいような優先度の参照に関してはつかんでても無視して強制的に削除したいということだよ
856 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:57:20 ] 普通に管理クラスつくって自分でマネージメントした方がいいと思うけど。 DirectX関係のインターフェイスは余計な事しないでシンプルに扱ったほうがいい。
857 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 20:19:39 ] >>855 weak_ptr
858 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:01:47 ] そもそも使いもしないスタティック参照がいて かつ参照がいるのに強制削除って状況がおかしいよ。
859 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:03:08 ] 確かに・・・リソースの強制削除なんて特異な状況聞いたことないな。 単にまともな管理が出来ていないだけにしか聞こえないな。
860 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:48:29 ] >>858 シーンを何回も呼ぶ(ロードアンロードを繰り返す)んだけど そのうちの1シーンがスタティックでポインタを保持してるところが多いのよ いらなくなったらそのシーンは破棄するんだけどプログラム自体はスタティック参照だから 残るのよこれが 範囲が広すぎて修正不可能だからどうすんべーって感じなわけ
861 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 04:37:39 ] staticにした時点で間違ってると言うことだNE
862 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 09:51:22 ] シーンが破棄されるときに、デストラクタから開放するべきなんじゃ? てか破棄されうるシーンがスタティックなポインタを持ってるっておかしくね?
863 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 11:17:03 ] >>846 のレスからすると何か変な勘違いを前提にして、 強制削除とやらをしなければならないと思っているような気がするが。 >>838 からの流れなんだろうけど、その後の他の人のレスと 話が噛み合っていない。 そもそも、リソースの管理に問題ありというのには同意。
864 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:04:07 ] スタティック参照って言葉でややこしくなってる気が
865 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 16:01:33 ] オンボードビデオカードだと CreateDeviceでD3DCREATE_HARDWARE_VERTEXPROCESSINGが失敗すると思ってよいのでしょうか? また、ビデオカードを使ってる環境でオンボードでも動作するように開発するには D3DCREATE_SOFTWARE_VERTEXPROCESSINGで初期化を行えばあとはCPU速度次第ということになるのでしょうか?
866 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 16:21:38 ] >>865 少なくともここ1年以内のIntel製オンボードは D3DCREATE_HARDWARE_VERTEXPROCESSINGでも通るぞ 恐らくだが3年前の物でも通ると思う
867 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 16:53:54 ] >>866 ありがとうございます 自分の環境が945Gなのですが駄目でした この環境で動作させるには、頂点数やライティングに気をつければよいのでしょうか?
868 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:59:50 ] >>867 頂点数とライティング、あとはVRAMを食いすぎないようにすれば十分な速度は保てると思う。 オンボードグラボは基本的にメインメモリからVRAMを取るから十分にメモリを積んでない システムでVRAM食いすぎると酷いことになる。 でかいテクスチャを何枚も使ったりしないで簡単な3Dエフェクト程度の利用だったら 特に問題なく動くんじゃないかな。
869 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:10:48 ] intelGMAは未だにピクセルシェーダはサポートするけど 頂点シェーダはサポートしない(HW頂点処理ができない)んじゃなかったっけ
870 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:21:24 ] ピクセルシェーダー/バーテックスシェーダー2.0に対応していない グラフィックボードって何年前ぐらいの物ですか?
871 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:28:07 ] GeForce3とかRadeon8500とかだな
872 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:26:00 ] >>869 X3000以降は使えるみたい en.wikipedia.org/wiki/Intel_GMA#Table_of_GMA_graphics_cores_and_chipsets
873 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:23:12 ] この前GF5200FXで動かしたら、ピクセルシェーダ2.0に対応してるのはいいけど物凄い遅さでびっくりした (PS処理省いたらめちゃくちゃ軽くなった)
874 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:02:31 ] D3D10でD3D9のD3DPERF_BeginEventに相当するものってありますか?
875 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:12:50 ] bmp形式の画像ファイルを背景色の代わりに表示させることってできますか?
876 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:15:34 ] >>875 スプライトなり何なり使って画像を描画 ↓ Zバッファだけクリア 後はお好きなようにどうぞ
877 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:26:45 ] >>876 できました! ありがとうございました。
878 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:10:00 ] えええ
879 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 07:25:15 ] D3DXLoadMeshFromXInMemory のオプションで指定するD3DXMESH列挙型にはどんな意味があるのでしょうか? 色々と試してみたのですが、パフォーマンスに影響があるようには思えないのですが
880 名前:デフォルトの名無しさん mailto:age [2008/06/28(土) 08:02:10 ] HLSLの組み込み関数「ddx(x)」ついての質問です。 SDKのヘルプには、 スクリーン空間の x 座標について、x の勾配を返します。 とありますが、具体的にどんな計算をしているのですか? 教えていただけないでしょうか?
881 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 14:04:28 ] 英語では、Returns the partial derivative of x xの偏微分を返すって書いてるね。
882 名前:デフォルトの名無しさん mailto:age [2008/06/28(土) 15:43:46 ] >>881 レスありがとうございます。 x方向の傾きを返してくれるみたいですね。 その傾きを求めるための具体的な値が、どのようなものなのか、 わからなくて困っています。 傾き == 高さ / 距離 の「高さ」と「距離」は、 どんな値が使われるのか知りたいです。 どなたか、よろしくおねがいします。
883 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 16:29:24 ] プログラムと一緒にd3dx9_?.dllとかをダウンロードさせたいのですが、どのような形式なら 配布してよいんでしょうか?cabですか?
884 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:00:26 ] >>883 添付して配布は、ライセンス的に面倒なことになるんじゃなかったかな。 ウェブインストーラへのリンクを出せばいいと思う。
885 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:23:59 ] >>882 HLSLのddx()/ddy()は、PSのdsx/dsyに対応する。 dsxのマニュアルには、レンダリングターゲットのx 方向の変化割合とあるので ↓か、それに近い形になるんじゃないかなあ float2 delta = 1.0f / rendertarget.size; float1 dsx = ( pixelcolor( x+delta.x, y ) - pixelcolor( x, y ) ) / delta.x; float1 dsy = ( pixelcolor( x, y+delta.y ) - pixelcolor( x, y ) ) / delta.y;
886 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:58:22 ] >>883 つmsdn.microsoft.com/en-us/library/bb174600 (VS.85).aspx つmsdn.microsoft.com/en-us/library/bb219742 (VS.85).aspx ファイル単体ならライセンス違反だが、最小構成なら2MB程度の添付で済む。 ファイル単体で添付できるにこしたことはないんだが、MSは自分らのランタイムを プライベート配布されるのを嫌う傾向があるからなぁ。
887 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:55:22 ] まあ、なんかトラブルあったら、クレームは全部MSに来るわけだしな。 動かない、なんとかしろ、しか言わないキチガイにつきあうよりは、 自分トコから一括ダウソにしておいたほうがまだしもマシってことだろう。
888 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:32:56 ] firefoxみたいなブラウザの画面をテクスチャにするにはどうしたらいいでしょうか? win32APIを使うべきなのかDirectXを使うべきなのかもよくわからないです
889 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 19:38:35 ] 両方使え
890 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:46:44 ] これからDirectXの勉強をしようと思ってるんですけど、 SDKはどのバージョンを使えばいいのでしょうか? 9.0c以降多すぎてよく分からないです 開発環境や実行環境のサポート状況で適当に選んじゃっていいのかな
891 名前:882 mailto:sage [2008/06/30(月) 00:53:27 ] >>885 レスありがとうございます。 実際に値を入れて、いろいろと調べてみます。
892 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:13:30 ] コンパイルすると以下のようなエラーが出ます サンプルプログラムなのでソースにエラーはないと思います 調べましたが原因が分かりません よろしければどなたか御教授いただけないでしょうか? エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 113: '_D3DCOLORVALUE' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 60: 一つ前の '_D3DCOLORVALUE' の定義位置 エラー E2146 c:\Borland\Bcc55\include\d3dtypes.h 130: 宣言には識別子が必要 エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 132: '_D3DRECT' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 70: 一つ前の '_D3DRECT' の定義位置 エラー E2146 c:\Borland\Bcc55\include\d3dtypes.h 149: 宣言には識別子が必要 エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 151: '_D3DVECTOR' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 51: 一つ前の '_D3DVECTOR' の定義位置 以下略
893 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:18:22 ] >>890 日本語マニュアル必須なら2004OCT 不要なら最新版使っとけ
894 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:38:23 ] まだBCC使ってるやつ居るのか…
895 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:44:44 ] BCCはDirectXに対応してないハズ どうしてもBCCがいいなら昔のバージョンを使うしかない VC使えばいいと思うよ
896 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:49:53 ] BCCからVCへの移行は難しい物なのでしょうか?
897 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 00:08:51 ] やってから言え どうしてお前が難しいと思うか予想しなければいけないんだ?
898 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 00:09:35 ] VCはISO準拠度が高いので もし、移植できないコードがあれば、それはコードが間違ってるってことだから 安心して修正していいよ
899 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 00:10:25 ] 分かりましたVCを導入してみます
900 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 01:18:06 ] どうせ趣味グラマだろ? 正規版OSならタダなんだから導入も糞もないだろ
901 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 10:53:32 ] 恐ろしいことに2005年以降でもExpressEdition+PlatformSDKを無視して BCCを使う入門書(笑)や入門サイト(爆)は実在するんだ…
902 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 12:02:15 ] 古いサイトが更新されてないだけではなく?
903 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 12:26:00 ] HDVファイルの任意のタイムコードの場所を表示する(orビットマップファイルで吐き出す) コマンドラインのプログラムを作らないといけなくなったのですが、DirectShowベースで 実現可能でしょうか? C:\> showHDV.exe /pid 10 /timecode 00:00:00:25 test.m2t ← こんな感じ
904 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:36:09 ] スレ違い。 とりあえずSDK読んで考えろ。
905 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:54:26 ] www.greenwood.co.jp/~k-aki/article/sslib2_dsound/source/sslib2/dsound/StreamSoundBuffer.cpp 上記のソースコードですが、CStreamSoundBuffer::Create内でCComPtrを二箇所使用しています。 CComPtrはググってみたところ、スマートポインタの一種と出ました。間違いないでしょうか? また、bufferはサウンドバッファでm_pStreamBufferに受け渡されているので解放されないのに対し、 notifyは何にも受け渡されないので解放(Release)されてしまうように思われます。 IDirectSoundNotifyはIDirectSoundBufferと異なり解放されても問題ないのでしょうか?
906 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:07:00 ] 言葉が足りなかったので IDirectSoundBufferはサウンドの再生時に必要になるので必要な間にReleaseすると問題になります。 であれば、IDirectSoundNotifyは通知位置を設定するのに使ったので解放すると設定無効にならないのでしょうか?
907 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:48:18 ] 自己解決しました。 msdn.microsoft.com/ja-jp/library/cc370470.aspx 上記を見るかぎり、解放しても問題なさそうですね。
908 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 23:32:35 ] >>904 あんまり有益じゃないアドバイスですね。 一応スレにはルールがありますので、ルールに則った回答をお願いします。
909 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 23:57:59 ] このスレは初心者と優しい人とギスギスした人で成り立ってます プログラマーって極端だな
910 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 00:14:16 ] 最近のSDKではDirectX9の更新が無いようですが、 最後に更新されたのはどのバージョンですか?
911 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 00:25:20 ] d3dx9_xx.dllのバージョンが上がっている以上、 今でも更新されているとお考えください
912 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 02:14:10 ] マスターアップ前のPGは生理痛の時の女と一緒 つまり、女のPGは大変てこった
913 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:48:39 ] ロックできる指定サイズのサーフェィスってどうやってつくんの
914 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 19:57:19 ] 質問です。 DirectSoundでプライマリバッファのボリュームをいじると、Windowsアプリケーションの「ボリュームコントロール」でコントロールできるWavのところに反映されてしまうようでいまいちよろしくありません。 ゲーム終了時に元に戻すことも考えましたが、ゲーム中にユーザーが「ボリュームコントロール」からいじってたら〜と考えるとこれでも不適当かと。 なので、いったん 「ゲームのBGMや効果音のセカンダリバッファ」 > 「セカンダリバッファ」 > プライマリバッファ と、1つセカンダリバッファをかませたいのです。 DirectXのヘルプを読むと「ほとんどのバッファの場合、出力先はプライマリ バッファと呼ばれるミキシング エンジンである」 とあったため、工夫すればセカンダリをかませることはできそうなのですが、良い手法はありますでしょうか?
915 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 20:21:20 ] マスターボリュームをいじるプログラムにするな 以上!
916 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 20:48:58 ] AOE2はゲーム終了時とかフォーカス喪失時にボリューム元に戻すような仕様だったな 大企業でさえそれなんだから別に気にしないってのも一つの手だとは思うが どうしても嫌ならManagedDirectXのセカンダリバッファがヒントになるかもしれん
917 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 22:12:01 ] 丁度DirectSoundで盛り上がってるみたいで便乗を 現状、効果音を多重に鳴らす際にDuplicateSoundBufferを使ってます でもこれ、鳴り終わるまではReleaseしちゃいけないので面倒です 今はここのイベント通知処理を利用し ttp://msdn.microsoft.com/ja-jp/library/cc370470.aspx play時にDuplicateSoundBufferで複製。ついでにstaticなリストにCComPtrでくるんで追加。 再生が終わったらリストからはずす(よって開放される) という感じに実装しています でもこれが異常に面倒。とてもほかの方々がそうやってるとは思えません そもそもDuplicateSoundBufferについてぐぐるにひっかからなさすぎ(26件) みなさん多重に再生する必要がある効果音などは、どのようにしているのでしょうか?
918 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 22:13:30 ] >>917 補足です 再生が終わったらイベントが通知され(登録したコールバック関数が呼ばれ)、そこでリストからはずすようにしています。 リストが壊れないようにクリティカルセクションでかこってやったり、かなり面倒なんですよね 一度作ってしまえばあとは使うだけとは言え・・・
919 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 22:25:27 ] 効果音を鳴らすたびに作って解放するのかと逆に問いたい
920 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 22:58:09 ] Managedの話で悪いが俺は最大同時再生数と同じ数だけセカンダリバッファ作っちゃってるわ 再生終了はコールバックじゃなくて毎フレームのポーリングで対処してる 少なくとも俺のPCでは遅延とかメモリ食いすぎとかは起こってない
921 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:02:08 ] >>920 私もそんな感じの作りにしてます 他で使うメモリに比べればサウンドで持っていく割合とか微々たるもんだしって感じに思えたので
922 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:05:54 ] >>920 デュプリケートって内部的にカーソルとかその辺のインターフェイスがコピーされるだけで、 実体のサウンドファイルは1つのままだと思うだけどまさか全メモリコピーなのか?
923 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:10:06 ] >>922 なん・・・だと・・・? 今まで全メモリコピーだったわけだが SDKのリファレンス見たらそんなような事書いてあるな どう考えてもDuplicateSoundBuffer使ったほうが効率的じゃねえか・・・
924 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 07:05:25 ] >>923 お前w 昔のDirectX7本とかじゃこの手のは当たり前にのってるのに、最近はおざなりだよなー
925 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 19:46:01 ] directxのapiで音声入出力のメモリに直接アクセスする手段ってありますか?
926 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 23:35:32 ] DuplicateSoundBufferに対応していないサウンドボードがまだありそうな気がする・・・
927 名前:925 mailto:sage [2008/07/07(月) 23:35:36 ] 自己解決
928 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 23:50:55 ] 自己解決したときにその情報を出さないやつが、なんで質問して情報を出させようとするんだろうな
929 名前:925 mailto:sage [2008/07/08(火) 00:08:35 ] >>927 は自分じゃありません
930 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 00:10:42 ] 「DuplicateSoundBuffer」がサウンドカードの機能だと思っている人が居たことに衝撃。
931 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 00:48:58 ] マルチポストに答えてやったら、別スレで「自己解決しました」って 報告してるのを見たときは吹いた
932 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 07:05:59 ] >>930 ちげーの? 「ドライバだよ!」とかいう言葉遊びは簡便な
933 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 10:01:37 ] >>932 いやDirectXが処理してる。 音を出すのはサウンドカードだが音のデータをサウンドカードに流してるのはCPUだぞ。 デュプリケートは1つのバッファに対してどこ部分をプライマリにコピーするかって 情報をもったインターフェイスが増えているだけの話だからぶっちゃけ全部CPU処理だぜ。 不安ならセカンダリをLOCALで作成してDirectSound自体をCPU処理固定にすると 環境依存のバグが発生しなくなるのでお勧め。 元々サウンドカード上の専用メモリとかISA時代の転送が遅かった時代のカードにしかないし。
934 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 10:29:22 ] >>933 おいおい、そりゃ「DirectXでソフトウェアエミュレート」すればDirectXの仕事だけどさw 普通に使ってればDuplicateSoundBufferの命令をうけて(ハード上なり、PCのメインメモリー上なりに)バッファを確保するのはサウンドカード・ひいてはそのドライバの仕事だぜ? だからこそ、DuplicateSoundBufferは必ず成功するとは限らないんじゃないか。
935 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:46:43 ] 実際に動作しないサウンドカードの製品名を挙げてくれ。 そもそもいったいいつの時代の話をしているんだ?
936 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:48:19 ] 動かないハードがあるとして、その場合はソフトウェアで勝手にやってくれないもんなの?
937 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 14:33:49 ] 具体的名称までは聞いたことないが、 「PCゲー作ってる会社でのよくあるサウンド関係のトラブルはそれだから注意しな」 と付き合いのある会社から言われたな ちなみにSDKサンプルでも、きちんとDupできないならCreateでごまかすように組んである 自動ではやってくれない
938 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 19:12:39 ] >>937 >DupできないならCreateでごまかす それこそまさにISAの時代の話じゃなくて? オンボードReadtek、USB外付け音源、サウンドブラスター、 MonsterSound あたりはテストしたが、そんな大きな不具合に遭遇したこと無いな。 それより、ASIO にした方が良いのかぁ、と思ったことは何度かある。
939 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 20:24:02 ] そういうわけで完全ソフトウェア処理のXAudio使えや愚民共、と相成りました
940 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 22:11:27 ] XACTがないと早送りや巻き戻しすらできないあれか
941 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:04:51 ] 今時クエリーインタフェイスとか 愚民杉
942 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:53:19 ] 今も昔もそもそもDirectSoundにハードウェアのまともな対応を期待する方が愚。 かなり初期の頃からDirectSoundだけはソフト処理でやるのが鉄板になってたはずだぞ。
943 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:57:24 ] DirectSoundをソフト処理って、どういう意味合いで言ってるんだみんな? IDirectSoundBufferの確保時に、フラグでDSBCAPS_LOCSOFTWAREをいれるってこと?
944 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:57:25 ] 選べるようにしておけばいいだけの話だろ
945 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:08:35 ] たしか、DirectSound ってサウンドカードのメーカーのあまりものグダグダさに、 マイクロソフトが嫌気がさして、ソフトウェア処理でこれからは行く、とかっていう 記事を見た気がする。 Vista DirectSound HAL で検索をかけるといろいろ出てくる。 Windows は DTM 系のソフトが弱いってのはこの辺りが原因なのかねぇ? ローランドあたりが先陣切ってやってくれないとね。
946 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:17:57 ] VistaのMIDIへの冷遇は忘れねえ
947 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:25:19 ] >>943 そういうこと。 たとえば最初の3つはサウンドカードのメモリに確保されていて、 その後はメモリが足りなくてシステムメモリに確保された場合に、 ミキシングが絶望的な状況になる。 いまどきのCPUならSSEとかMMXあたりでミキシングできるし、 10個20個程度ミキシングしてもCPUの負荷なんざ1%も食わないのでサウンドカードは ただの音声出力装置以外の機能は期待しない方がいいと思われ。 そもそもサウンドカードに専用メモリ乗ってたのってCPUからの転送が遅かったISA時代だしな・・・。
948 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 01:24:23 ] soundblasterの割と最近のサウンドカードがスタティックバッファ持ってるけど、あれが使える状況ってあるのかな
949 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 09:59:42 ] DSBCAPS_LOCSOFTWAREフラグたてておけば、DuplicateSoundBufferは必ず成功するのかな? みんなわりと音楽系はそんなに気をつかってないんだね
950 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:49:22 ] SOFTWARE でもサイズが大きいと失敗する。 正確には、Duplicate の時は成功するが Play の瞬間に失敗するようになる。
951 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:52:48 ] >>947 今のCPUをもってしても遅延が絶望的に大きいのが欠点。 外部入力への反応での遅延は致命的。 ASIO であってもまだ不満。
952 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 00:19:59 ] DirectSoundでDuplicateして鳴らすなんて普通はゲームのSEだろう。 その程度なら1,2フレ遅れたところでたいした問題ないよ。
953 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 01:45:29 ] >>951 ASIO がだめってどんなんだよ・・・。 ゲームの場合は少し前からSEを鳴らし始めればいいわけで。
954 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:47:38 ] 音ゲ厨と60fps厨が組み合わさった怪物だろう
955 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:54:55 ] > 外部入力への反応 って書いてあるから、サウンドエフェクタとかボイスチャットみたいに リアルタイムにキャプチャーした音を加工するやつじゃね?
956 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:49:55 ] ゲームとマジDTMとはまた違うからなぁ
957 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:10:26 ] ボイスチャットなんざネットワーク介して時点で遅れてるんだから関係ないだろ
958 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:38:21 ] 出力だけ同期してりゃいいんだよ