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

このエントリーをはてなブックマークに追加
938デフォルトの名無しさん:2012/05/15(火) 22:46:24.40
DirectXの参考書とかでよく「Vista対応版」と書かれているものがありますが、普通のとどのように違うのでしょうか?
939デフォルトの名無しさん:2012/05/15(火) 23:14:10.10
レンダリングの際、BeginSceneやEndSceneが必要なのはmsdnを読んで分かるんですが、
これらが具体的にどういう処理を行っているかを解説している書籍やWebサイトはないでしょうか?


http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld01/directxworld01_03.html

このNyaRuRuさんの記事のように、CPU、GPUの連携の具体的な説明は、
パフォーマンス最適化や同期設計のために非常に参考になります。
940デフォルトの名無しさん:2012/05/16(水) 00:19:13.50
>>937
騙されるな
941デフォルトの名無しさん:2012/05/16(水) 01:39:55.19
>>939
その2つは3D描画処理の開始と終了をドライバに伝えるのが目的で
デバイスロストのチェック以外は中で何をするかは特に決まってないんじゃないか?
942デフォルトの名無しさん:2012/05/16(水) 04:28:43.65
>>939
EndSceneはコマンドバッファのフラッシュとか色々やってそうだが、BeginSceneは>>941の通りかもな。
どっちにしろ、その二つはフレーム描画の先頭と最後で1回づつ呼び出さなければならないものだから、
パフォーマンスどうこうを考える上では実装を知ってもしょうがない。

むしろD3DXEffectのBegin/End、BeginPass/EndPass、CommitChangesについて知っておいた方が意味はある。
http://www.microsoft.com/downloads/details.aspx?FamilyID=00600351-4c8f-43cd-b3e3-a9975ecda0ce&displayLang=en
943デフォルトの名無しさん:2012/05/16(水) 19:20:41.16
http://kie.nu/aAP
問題が再現できるコード

TextLayout.SetInlineObject(inlineobject,new TextRange(1,1));
TextLayout.SetInlineObject(inlineobject,new TextRange(2,1));

とすると2文字目にあるインラインオブジェクトが表示されないんだが、うちだけ?
944935:2012/05/17(木) 23:48:17.61
>>940
あ、嘘だったんですか・・・
確かに、同じプログラム、レンダリング解像度なら、フルスクリーンのほうがFPS上がりますね・・・
945939:2012/05/17(木) 23:52:18.72
>>941
>>942
ありがとうございます。
D3DXEffect関係の資料、および参考として記載されていた以下のサイトにより、
ランタイム、ドライバの動きがかなり明瞭になりました。

Direct3D API 呼び出しの正確なプロファイリング (Direct3D 9)
http://msdn.microsoft.com/ja-jp/library/bb172234(v=vs.85).aspx

すべてのAPIについて、このレベルの解説をmsdnには希望したいですね。

これでパフォーマンス最適化を意識したプログラミングができそうです。
ありがとうございました。
946デフォルトの名無しさん:2012/05/18(金) 00:47:20.17
>>944
フルスクリーンだとVSYNC待ちが自動で入る設定で
ウインドウの方が速い!って勘違いする奴はたまにいるw
947935:2012/05/18(金) 00:50:55.90
>>946
軽い罠ですねw
948デフォルトの名無しさん:2012/05/18(金) 00:57:52.13
>>945
DirectX6〜7の頃だとリファレンスラスタライザやビデオカードの
ドライバのソースコードが公開されてたりで、仕様上曖昧な部分を
ソースで確認できたんだけどね。
最近はそういうサービスがないなぁ。
949デフォルトの名無しさん:2012/05/21(月) 03:05:43.68
D3DXMatrixRotationYawPitchRoll(FLOAT Yaw, FLOAT Pitch, FLOAT Roll)
XMMatrixRotationRollPitchYaw(FLOAT Pitch, FLOAT Yaw, FLOAT Roll)

1.なぜD3DXからXNAで関数名の末尾が変わったのでしょうか
2.なぜXNAのほうは関数名と引数の順序が異なっているのでしょうか
950デフォルトの名無しさん:2012/05/21(月) 03:48:28.61
>>949
そんなこと気にしてたらハゲるぞ。
どっちも大した意味はなくて、その関数を書いた人がそういう気分だっただけ。

計算の順番はroll→pitch→yawなので、ある意味D3DXの順番が不自然だった。
(D3Dは行ベクトルが基本だから左から右に変換が進む)

pitchはX軸回転、yawはY軸回転、rollはZ軸回転だから、引数はその順にしただけかと
951949:2012/05/21(月) 04:48:56.41
>>950
おお、ご回答ありがとうございます!
XNAの関数名は計算順(vMMMの行列表現順)、引数はRotationX/Y/Zの順になっていると、
なるほどすごくしっくりきました。
D3DXで初めてオイラー角に触れたので頭の中で「YawPitchRoll」が染み込んでましたが、
計算順なりxyz順にするほうが合理的ですね(列ベクトルでの表現にこだわらない限りは)。
952デフォルトの名無しさん:2012/05/21(月) 10:15:27.56
もしかしてVCのexpressってなくなるのかな?
953デフォルトの名無しさん:2012/05/21(月) 13:56:01.53
なんで?
954デフォルトの名無しさん:2012/05/21(月) 14:18:21.29
答えはもちろん。
955デフォルトの名無しさん:2012/05/21(月) 16:39:39.74
956デフォルトの名無しさん:2012/05/21(月) 16:48:23.26
>>955
Visual Studio 11 Express for Windows 8
って言うのに統合されてるのかな
ただ実行ファイルがネイティブの場合XPが除外されるみたいな感じ?
957デフォルトの名無しさん:2012/05/21(月) 17:39:33.60
言語ごとじゃなくてターゲットプラットフォームで分けるようにしただけか。
そしてついにXPが滅せられる時がきたか…。
958デフォルトの名無しさん:2012/05/21(月) 18:11:15.03
.NET frameworkを使わなければ、「C++のWin32アプリ」とかで作ったバイナリはXPでも動く…よね?
動いてくれないと困るよ…会社で導入する言い訳がますます作れなくなるじゃないか。
VS2010を入れる理由が思いつかず今も2008を使ってるのにさ。

作ったバイナリもそうだけど、VS自体がWindows7以降でないと動かないというのは本当なんだろうか。
959958:2012/05/21(月) 18:12:12.44
すみません完全にVisual Studioスレと間違えました。958は忘れてください。
960デフォルトの名無しさん:2012/05/21(月) 21:10:54.81
バイナリもIDEもダメ
某blogみたいに魔改造すればどうにかなるかもしれんが
961デフォルトの名無しさん:2012/05/21(月) 21:37:01.32
MSDN blog読む限りVS2010インストールすれば、XPでも動くバイナリも作れるんじゃないの。
VS2010インストールしなくても済むようにするオプションも評価中とも書いてある。
962デフォルトの名無しさん:2012/05/21(月) 22:04:27.03
それはVS10のコンパイラとライブラリを使ってるんだからVS11で使えるとは言わない
963デフォルトの名無しさん:2012/05/21(月) 22:26:45.71
VC11ツールキットではXPターゲットのバイナリが作れないのと、
VS11でXPターゲットのバイナリを作る手段が無いのじゃ話が全然違うだろwwwww

ま、でもIDE自体がXPじゃ動かないなら、デバッガとかの事も考えるとVS2010にも頼らざるえないのも現実だが。
早く滅びねぇかな、XP…。Direct3D9はもういいよママン…。
964デフォルトの名無しさん:2012/05/23(水) 02:28:31.33
MaxTextureRepeatが0であるようなグラフィックチップ(GMA900やGMA950等)の場合、
テクスチャマッピングの繰り返し数の上限はどう考えればいいのでしょう?
965デフォルトの名無しさん:2012/05/23(水) 08:39:48.37
VC11ってリリースは本年度末だよね
だとしたら今更XPサポートしても先がないし
結局問題なさそうだけど
966デフォルトの名無しさん:2012/05/23(水) 16:05:37.85
どっちかっていうと、ExpressがMetro専用になるってことの方が
このスレ的には重要だと思う。
967デフォルトの名無しさん:2012/05/23(水) 19:21:23.93
まじで…。

MetroアプリでDirectX使う場合どんな感じになるんだろうな。
WPFアプリでDirectX使う場合はDirect3D9インターフェスのフレームバッファに一端コピーとか
すげぇ泥臭い仕組みだった気がするんだが、まさか似たような事になっちゃいないよな…。
968デフォルトの名無しさん:2012/05/23(水) 20:45:44.08
969デフォルトの名無しさん:2012/05/23(水) 20:59:21.84
Express(C++の)でDirectX触ってる人結構いるんかね。っていうか学生さんとかはそうなるんかね。
考えてみればDirectXとリソースエディタって守備範囲が離れてそうだからいい組み合わせなのかも。
いや、俺はExpressにない機能はリソースエディタくらいしか使えてないのでね。
っていうか学生はむしろアカデミックパックがあるじゃないか…。
970デフォルトの名無しさん:2012/05/23(水) 21:42:53.40
>>968
おお、サンクス。
実際に使ってみないと何とも言えないけど、ざっと見た限りWPFみたいな泥臭さはなさそう。

>>969
俺的にパッケージ版の機能で欲しいのはプロファイラと静的コード分析だけど、ULTIMATEとか無理ですお…。
それ以外はExpressでも十分な気がする。
ゲームエディタ作るならATL/MFCが欲しいって人もいるかも。
俺は.NETインターフェース作ってC#でなんとかしてるけど、インターフェース作るのがめんどいのと変更しにくいのが難点…。
971デフォルトの名無しさん:2012/05/23(水) 22:09:03.69
>>966
マジかよ!!
DXライブラリついに廃業か?
今まで通りだとすれば古いVSはダウンロードできなくなるだろうし
マジでやばいな
972デフォルトの名無しさん:2012/05/23(水) 22:12:55.26
>>971
2010Expressが今までどおり提供されるから安心しなw
973デフォルトの名無しさん:2012/05/23(水) 22:13:30.94
2005のExpressは未だにDLできるわけだが
974デフォルトの名無しさん:2012/05/24(木) 18:37:53.98
>>968
意外にいい感じなんだけど問題はこれ
配布がストアのみしかできないんだよな・・・
975デフォルトの名無しさん:2012/05/25(金) 18:18:43.98
XAudio2の音声再生で、IDirectSoundBuffer8::GetStatus のように、
ある音声について再生中かどうか知る方法ってありますか?
976デフォルトの名無しさん:2012/05/26(土) 08:56:44.37
IXAudio2SourceVoice::GetState
ではなくて?
DirectSoundの方がどんなだったか忘れた
977デフォルトの名無しさん:2012/05/26(土) 12:56:48.32
ありがとうございます。再生中かどうかの判定ができました。
IXAudio2SourceVoice::GetStateで戻される構造体が BuffersQueued > 0 の場合に、
音声データが再生中であると判断できるみたいです。
ちなみにDirectSoundの時は、GetStatusで再生中だとわかるフラグが取得できました。
978デフォルトの名無しさん:2012/05/27(日) 10:27:09.66
directx11はvc2008で開発できますか
979デフォルトの名無しさん:2012/05/27(日) 11:40:20.79
できる。次の版でどうなるかは知らんけど、現時点で最新のSDK(June 2010)には
サンプルにVC2008用とVC2010用の*.slnが付いてる。
980デフォルトの名無しさん:2012/05/27(日) 18:18:44.41
うめ
981デフォルトの名無しさん:2012/06/02(土) 05:53:53.47
http://www.gomplayer.jp/img/bandicam/bandicam_howto_fps.gif
Bandicamというキャプチャーソフトは画像のように
DirectXで動くソフト上にフレームレートを上書き表示する機能があります。
これと同じように、既にあるDirectXのソフト上に任意の文字列を描画したいのですがどうしたら良いでしょう。

ざっくりとした質問ですみません。
DirectX絡みの開発は経験がないので皆目検討がつかない状態です。
おおまかな方針や参考になりそうなサイトがあれば教えていただきたいです。
982デフォルトの名無しさん:2012/06/02(土) 06:09:04.02
DXのサーフェスからHDCとれなかったっけ??よく知らんけど。
983デフォルトの名無しさん:2012/06/02(土) 11:40:35.64
テキスト用のスプライト生成して、Font機能を使って書き込んだらよいのでは?
984デフォルトの名無しさん:2012/06/02(土) 12:24:15.51
>>981
他人が作成したソフトを改造したりするのは板違いです
985981:2012/06/02(土) 12:25:44.83
あ、既にあるソフトに対してか。
>>983は忘れてw
986デフォルトの名無しさん:2012/06/02(土) 13:01:08.60
>>981
基本的にPresentをフックして描画する。
チョン系プログラムが対象ならプロテクト回避も必要になるだろう。

>>DirectX絡みの開発は経験がない
ちゃんと学習してください。覚えなければ、あなたの目標とすることは実現できません。
987デフォルトの名無しさん
色々レスありがとうございます。
ゆっくり勉強してみます。