1read 100read
2013年05月プログラム37: 【C++】 DirectX初心者質問スレ Part37 【C】 (928) TOP カテ一覧 スレ一覧 2ch元 削除依頼
DarkBASIC (796)
★初心者にVisual C++を教えるスレ★ Part38 (927)
C、C++の最適化について語るスレ 3 (926)
C++11/C++1y 18 (338)
[JavaScript] スクリプト言語34 [Perl,Python,PHP] (528)
くだすれPython(超初心者用) その17 (215)

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


1 :2012/06/05 〜 最終レス :2013/05/11
回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
現在の最新バージョンはDirectX 11です。
前スレ
【C++】 DirectX初心者質問スレ Part36 【C】
http://toro.2ch.net/test/read.cgi/tech/1319032065/

2 :
落ちるよ

3 :
スレ立たないかとおもた
>>1

4 :
最新は11.1だったりするけど・・・・

5 :
急にフルスクリーンモードにするとFPSが落ちるように
なってしまったんだけど、何か心当たりがある人いる?
例えば、FPSを表示するだけのプログラムで
ウィンドウモードだとFPSが1200くらいだけど
フルスクリーンモードだと400くらいになってしまう
一昨日まではフルスクリーンモードでも1200くらい出てた
過去に作った他のプログラムでも同じ症状だから
間違ってソースをいじってしまった事は無いと思う
だとすると環境のせいっぽいけど、一切新しいアプリケーションは
インストールしていないし、何も設定をいじってはいない
何が原因か分かる人いるかな?

6 :
FPSが1000を超えるような非常に軽い処理に、GPUクロックを上げる必要がないとドライバが判断してクロックを落としたんじゃね

7 :
>>6
いや、クロックが可変するGPUじゃないんだよね
それに、以前は普通にFPS出てたんだ
自分でも何がなんだかさっぱり分からない状況なので
ほとんどエスパー回答になると思うけど、誰か分かる人いないだろうか
ポイントは、フルスクリーン時のみでFPSが3分の1ほどに落ちる事
おそらく環境的な問題であること、ただしアプリをインストールしたり
OSや開発環境の設定を変えたりはしていないことなんだけど
これじゃ解決は無理か

8 :
なんで情報出さないの?馬鹿なの?死ぬの?

9 :
次の人〜

10 :
D3D9、D3D11Deviceを両方作成して使用した場合、何か問題が発生したりしますか?
D3D9はスキンメッシュのレイ判定の為にサンプルのソフトウェアスキニングを使用したいだけなのですが

11 :
自分で試せよw

12 :
>D3D9、D3D11Deviceを両方作成して使用した場合、何か問題が発生したりしますか?
サーフェイス以外はリソースの共有はできないけど、作るだけなら問題無いよ

13 :
http://www.dotup.org/uploda/www.dotup.org3101344.zip
DirectX9で立方体のポリゴンを表示したいんですがなぜか表示されません
背景の色をいじるとちゃんと変わるのでDirectXの機能は効いていると思うんですけど
なにか初期化に問題があるんでしょうか?

14 :
思い当たる原因はあるけど、ビルドして確認したいからファイル全部ください

15 :
http://www.dotup.org/uploda/www.dotup.org3101744.zip
いくつかファイル入れ忘れててすいません
よろしくおねがいします

16 :
>>15
ファークリップがz=10.fしか無いのに
z=20.fから原点のオブジェクトを見てるから。
D3D.cpp 79行目
D3DXMatrixPerspectiveFovLH( &mat_Projection,D3DX_PI/4,f_Aspect,1.0f,10.0f);
最後の引数を100.fとかにすれば描画される

17 :
そこだったのか・・・
ヘタクソなソースにもかかわらずアドバイスありがとうございます
助かりました

18 :
きたお
http://blogs.msdn.com/b/chuckw/archive/2012/06/18/directxtk-and-directxtex-now-on-codeplex.aspx

19 :
WP8はC++とDirectXだって
なんで最初からそうできなかったのか・・・・

20 :
timeBeginPeriod(1)
って引数変えても変化しないんだけどMSDNの説明ほんとにあってるんだろうか?
なんかSetTimerの引数の識別子みたいなもののような気がするんだけど
終わる時にわざわざtimeEndPeriod(引数)みたいな終わらせ方させてるし

21 :
>>20
timeBeginPeriodの設定はシステム全体で共有されるから
他の常駐プロセスなり何なりが上書きしてるとかじゃないか?
昔、メディアプレイヤー起動しながらプログラム走らせるとFPSが上がって、
何かなと思ったら、timeBeginPeriodのせいだったって経験がある。
他のプログラム停止してみて変化なければ解からん。

22 :
Direct2Dでのダブルバッファリングは
CreateCompatibleRenderTargetでID2D1BitmapRenderTargetを作って
そこにゲーム画面を描画して、GetBitMapでID2D1Bitmapを取って、
それをID2D1HwndRenderTargetのDrawBitmapに渡すというやり方で正しいですか?

23 :
Direct2Dの場合自分でやる必要はないんじゃないの?
BeginDrawからバッファに入れてEndDrawでDirect3Dに渡してレンダリングじゃなかった?
細かく描画を制御したい場合Direct3Dと併用するとかそんなんだと思うけど

24 :
プリミティブのエントリー方法が3Dっぽいよな。
その割には、毎回全部再登録しなきゃだけど。
しかもあれ、無効領域以外も全て再描画してるのかな。
なんか無駄が多そうだなぁ…。

25 :
すみません。
メッシュのマテリアル(D3DMATERIAL9)の“Diffuse”のa r g b
を設定し、SetMaterialし、描画しても
メッシュのマテリアルの“Diffuse”が適用されません。
ポリゴンの頂点毎の頂点色はちゃんと描画できているのですが…
メッシュ単位で影に入ったら暗くしたり、
不完全でも半透明にしたりしたいのですが・・
どういう所を確認すれば良いのでしょうか?

26 :
申し訳ありません、
ちゃんと メッシュのマテリアルの“Diffuse”が適用できているメッシュが有りました;
適用できていない物との違いを調べなおします。 お騒がせしました;

27 :
すみません。HLSLの勉強をしていて、ポリゴンが裏返る事に困っています。
 頂点シェーダで座標は以下の様にして渡していて、
Out.Pos = mul(In.Pos, matWorldViewProj);
 そのマトリクスはプログラム側で、
D3DXMatrixIdentity(&tempMat);
D3DXMatrixTranslation(&tempMat, LocalPos.x, LocalPos.y, LocalPos.z);
D3DXMatrixMultiply(&tempMat, &tempMat, &matView);
D3DXMatrixMultiply(&tempMat, &tempMat, &matProj);
g_pD3DDev->SetVertexShaderConstantF(0, (float*)&tempMat, 4);
 こうして作り、頂点シェーダに送ってポリゴンが裏返ってしまいます。
そして不可解なのですが、未作成の不正なVertexShaderを
g_pD3DDevice->SetVertexShader で設定すると全ポリゴンが正常に描画されます。
マトリクスを受け取る変数を作って計算して渡しての手間は何なのか…。
ここを読んで勉強してこい とかURLだけでも構いません。
何かご助言を頂けますと幸いです;

28 :
他で質問してみますね。 説明足らずな面もあり、失礼しました。

29 :
デバイスを二つ作って、片方で読み込んだテクスチャを
もう一方のデバイスで使用する方法ないかな?

30 :
DirectShowなんだけどさー
キャプチャーする時音声だけmp3にする方法教えてエロ

31 :
違ったmp3じゃなくてwmaです
ちなみに映像はいらないから音声だけですero

32 :
うひょ

33 :
他スレでは解決できなかったのでこちらで再度質問させてください。
現在DirectshowLibを使用して動画取込をしているのですが、
IODataのGV-USB2を入力ソース(コンポジット)としているのですが、
VMR9を使用してのデインターレースの仕方がわかりません。
IVideoInfoHeader2のInterlaceFlags にはUnused | FieldPatBothRegular
が設定されており、デインターレースが使用できないようです。
>>デバイスにはIAMStreamConfigがなく、MEDIATYPEを設定することも
>>できないようです。
※こちらは取得できたのでGetFormatからMediaTypeを取得し、
interlaceFlagsに IsInterlaced とFieldPatBothRegularを入れ、再度
SetFormatにて設定したのですが、VMR9レンダラーのピンからメディアを
取得するとUnused|FieldPatBothRegularになっていました。
設定方法がまずいのか、そもそもそのようなやり方が間違っているのか
すらわかりません・・・
何卒よろしくお願いいたします。

34 :
うんこ

35 :
もしかして、デバイスから送られてくるストリームは
プログレッシブ化されており、インターレース解除されて
いるのでしょうか?
ffdshowのインターレース解除をオンにするとインターレース
解除されていたので元のソースがインターレースと思っているのですが・・・
そもそもffdshowのインターレス解除処理はどうやっているんだろうか?_?

36 :
DirectShowはスレチ

37 :
>>36 
 すいません、スレ違い承知で質問しました。。
Directshowのスレ自体殆ど書込みがないままdat落ち
していたので、質問のために再度スレ立てるのも。。。と思いまして

38 :
うむ

39 :
実際みんな知らないっぽ
DirectShowスレもほとんどレスしてる人いなかったし
もしどうしても情報が必要なら面倒かもしれないけど
http://social.msdn.microsoft.com/Forums/ja-JP/categories
↑の辺はどうかな

40 :
>>39
ダメでした

41 :
40は自分ではないです。
>>39 そうですね、こちらに聞いてみるのがいいかもですね。
ありがとうございます><
また、引き続きわかる方おられましたら書き込みしていただきますと
助かります。
よろしくお願いいたします。

42 :
やだ

43 :
MetroStyleのDrectXサンプルの
^←がすごい嫌

44 :
久しぶりに見てみたらWin32スレがおかしな事になってるんだな
なんだあれ?

45 :
くだらない質問すみません。
C言語とC++とC#ってどう違うんですか?

46 :
C : 多くの言語の祖先。シンプルでそしてありのまま。
C++ : C言語に、様々な新しい概念等を盛り込んでいったもの。少し前のC言語とは完全互換性があった。多分一番色んなものが組み込まれている言語。(悪く言えばごちゃ混ぜ)
ちなみに速度的には、C言語の部分だけを使えば同等、C++の部分を使うと、たいていC言語より少しは遅くなる。
C# : 基本構文はC言語と似ているが互換性は一切ない、マイクロソフトちゃんの作った言語。
.Net(ドットネット)というものの上で成り立っており、作ったものはその環境の上で動作する。
ゆえに「基本的には」その速度はかなり犠牲になる(動的な型情報、変換、メモリ管理や例外機構を持つため)。
しかし、マイクロでソフトなあの子による最適化、更新などにより、より早く、安全に、そして開発効率の高いものになっていくことが期待できる。
追記 : 一般人がXBox360用のソフトを開発できるXNAや、みんな大好きUnityでの開発言語に採用されるなど、多方面から支持を集めている。

ちなみに俺はアセンブリ言語とC++使い。JavaやC#は言い回しだけ変えて、ものの本質を誤魔化されてる感じが気に入らないから、たまにしかやってない。

47 :
ありがとうございます。
C++を使おうと思います。

48 :
いえいえ

49 :
お知恵を拝借したいです!
例えば2Dのシューティングなどで雲に映る影を描画したい場合、
雲の端っこなどで影が切れないと見た目におかしくなります。
つまり雲の形にあわせて影の描画領域をクリッピングしたいということなのですが、
これを実現するには、ステンシルバッファを使用するのが有効だということが調べていてわかりました。
しかし、現在スプライトを使って作成していまして、雲テクスチャの形に合わせてステンシルバッファの値を書く方法がわかりません。
テクスチャのα値が1以上の箇所のみステンシルバッファに値を持たせたいのですが、これは可能でしょうか。
よろしくお願いします。

50 :
>>49
わかりません

51 :
ステンシルバッファなんか使わなくてもテクスチャのブレンドでできそう

52 :
とりあえずステンシルバッファなんてやめて、
乗算合成だのなんだの駆使して実現を目指してみます。
ありがとうございました!

53 :
いえいえ

54 :
画像ビューア作ってるんだけどテクスチャの最大サイズを超える
画像の場合どうすればうまく表示できる?
今の所クライアント領域と同サイズの四角ポリゴンにテクスチャを
貼り付けてるけど、巨大な画像の場合はテクスチャを分割して
その切れ目の所は四角ポリゴンが複数必要になる?

55 :
今3Dゲーム制作中なのですが
カメラが壁にめり込んだ際にカメラからプレイヤーまでの
オブジェクトの一部を透過する方法などはあるでしょうか?

56 :
あるよ

57 :
そういやコナミカメラって同人ゲーとかでも採用すると
特許侵害で怒られたりするんかね?

58 :
さあ

59 :
SeleneとかLuna公開してた人のサイトなくなっとる

60 :
まだDxLibがある
問題ない

61 :
問題ないよね

62 :
確かに問題ないね

63 :
DirectX9で、ポイントスプライト機能を使い、概ねうまくいっているのですが、一つ問題があります。
ウィンドウサイズをユーザーが動的に変更するのに対応するために、
描画の度に射影行列を作り直しており(アスペクト比が変わるため)、
ポイントスプライトの位置やそれ以外のオブジェクトは正常なアスペクト比で描画されるのですが、
ポイントスプライトのテクスチャ(32x32の正方形)の縦横比がウィンドウサイズによって変わってしまいます。
ウィンドウを縦長にするとスプライトテクスチャも縦長になるといった具合です。
なぜこのようなことが起こるのか、心当たりがあればご助言いただきたいです。
ウィンドウサイズ(あるいは射影行列)に依らず、常に正方形で描画されるようにしたいです。

64 :
Resetしてないか、バックバッファの扱い方間違ってるんじゃね?
ウィンドウサイズ変ってもバックバッファのサイズは変らんよ。

65 :
>>64
ありがとうございます。
おっしゃる通り、バックバッファのサイズは変わってないはずですし、
ポイントスプライト以外の描画は正常に行われているのも、バックバッファの扱いに問題がないことを裏付けていると思います。
Resetというのはデバイスロストのときにするやつでしょうか?
今回はデバイスロスト対策無視でResetが要求されるときの処理を書いていません。
ウィンドウサイズが変わっただけではデバイスロストは起こらず、Resetが要求されることもないと思っていますが、
おっしゃるResetというのは起動時に一度要求されるResetのことでしょうか?
(DXUTでは起動時、最初に一度だけReset用のコールバック関数が呼ばれるのを経験しています(今回はDXUTではありません))

66 :
バックバッファのサイズを変更していないのに、ウインドウサイズのみでアスペクト比を出したら、
比率が狂うをいうのは理解しているのか?

67 :
うん

68 :
どや顔で自分が間違ってないって言うのはどうかと思う・・・

69 :
ウインドウとバックバッファの比率を合わせなければ、
バックバッファに対して正方形に描画されるものがゆがむのは当たり前だろう。
馬鹿か?

70 :
理解しました・・・
Presentの転送で対応することにします。
失礼いたしましたm(_ _)m

71 :
ちょっとお尋ねします。
DirectSoundで、特定の出力デバイス向けに再生しているとき、
再生中にその出力デバイスがなくなる(USBスピーカを抜いた)
ようなケースを想定すると、どういう対処をしたらいいんでしょうか?

72 :
自分がどういう挙動をさせたいかによるのに、
自分のやることすら他人に決めてもらおうとするゆとり加減がひどい。

73 :
>>72
そうですよね
実は外部ライブラリを使ってるだけで、DirectXそのものはまった無知で。
ただ、上記のケースで、完全にフリーズしてしまうみたいなので。
で、何か方法があって、かつ、自分でも対処できそうなら、
ライブラリのソースを一部修正しようかなと思ったもので。
思うに、出力デバイスの構成が変わると、何かWindowsから
メッセージが飛んできて、それで出力を停止すべきなのに、
ライブラリがそれをやってないのかなと...


74 :
完全にフリーズとは、ハングアップやブルースクリーンのことを指すが、
出力されたコードやエラーログは確認したのか?

75 :
OSがタイムアウト待ちみたいになってるんじゃないの
対処できるのかな?

76 :
フリーズっていう言葉が不適切でしたか?
正確に言うと、ライブラリがフリーズするって感じです。
再生停止関数を実行すると制御が返ってこず、
アプリケーションがフリーズしてしまいます。
何もしないでおくと、アプリ終了時にライブラリの解放に
失敗して、その時点でアプリがフリーズします。
再生前であれば、出力デバイスを列挙して、再生可能かどうか
判断できるんですが、再生中に出力デバイスがなくなると・・・


77 :
Stopを別スレッドでやって、タイムアウトしたら切り離す。

78 :
>>77
ありがとうございます。
本体を守るには、やっぱ別スレッドで処理したほうがいいですか。
オーディオ関連をすべてまとめて別スレッドにしてみます。

79 :
ライトの減衰という所で、
ttp://msdn.microsoft.com/ja-jp/library/cc373075.aspx
「D3DLIGHT9 構造体の 3 つのメンバ Attenuation0、Attenuation1、Attenuation2 」
の値を組み合わせると複雑な減衰エフェクトが出せるとありますが、具体的にどういう
組み合わせで、どういう効果があるのかのイメージが掴めません。
何か事例を上げて教えて頂けないでしょうか。

80 :
やーだお

81 :
テクスチャの分割コピーする時にLockして直接書き込むのと
レンダリングターゲットを指定して、テクスチャに描画の方法と
どちらのほうが効率的ですかね?


82 :
気になったら、まず作って比べるのが基本。
他人に聞くのは結果が納得できないときで十分だ。

83 :
>>82
作って、分からなかったから聞いたんだが。
レンダリングの方法はサーフェス管理がメンドイ。
忘れると即リークだし。
Lockの方は量が増えたら速度が落ちるんだろうか、あと読みずれえ、位。
どちらも最初一回しかよばないから速度面は割と問題ではない。
個人的にはLockで良いんかなって思ったけど(すげえ読み難いけど、リークの心配は無い)
よく分からなくなってきたからどっちが良いんだろうかということで
ベテラン多そうな此処で聞いたんだけど。


84 :
あれほんと面倒だよね。
ちゃんと作ってほしい。

85 :
>>83
だから、結果のどこに納得がいかなかったのかはっきりさせないと、答えようが無いんだよ。

86 :
>>85
クラス化するつもり、と言うか、単体での読み込み描画をクラス化して作ってあるから
それに追加する形で作りたいと思ってる。
んで、追加の際に、可読性ダウンによるミスの誘発がメモリリークのリスクや
HRESULTのチェックによるソースコードの肥大化等と比べて天秤にかけるほど大きいかどうか。
(LockRectの方がメモリを使わないと思うが可読性が低い(ビットが違う同士だと凄い面倒)、
サーフェスの方が可読性は高くなると思うが、リークのリスクや、ソースコードの肥大化がある
それとリークした時、COMのリーク調べるのめんどくさい。_CrtSetDbgFlag使えないし)
単純にどっちも決定打が無いから迷ってる。

87 :
>>86
COM用のスマートポインタがあるけど使用を検討したことある?
あれすごく便利だよ。

88 :
LockRectは、あらかじめフォーマットを合わせておけよ。
なんでLockRectの段階で変換するんだよ。
それぞれに解決方法があり、比較する段階にすら至っていない。
まずは比較以前にコードを見直せ。

89 :
でも、そういうの考慮しながら設計するのって楽しいよね。
うまく作れたときは快感w

90 :
>>87
マジで!?知らんかった、何それ!?
で、調べた。
Attach()使わなきゃいけないと言う制約を除けば凄い便利そう(使ってないけど)
>>88
そうだな。
まあ、当然あわせてるんだけどな。
(あくまで、あわせる可能性の話だから()で括ったんだが)
結局それでもめんどくさい事には変わらないけど。
関数呼び出し→分割数、分割割合取得→大元テクスチャ作成→desc or info で縦横取得
→LockedRect作成 →コピー元テクスチャ作成→ 最初に取得したのからx,y分を割り出す→2重ループでコピー
これをコピー元から枚数分繰り返す→大元テクスチャ開放
って流れだし。
ぶっちゃけ、結果的にどっちも変わらん気がするんだが。

91 :
こんなレベルなのに凄い偉そう!w

92 :
分割するのに大本のテクスチャの作成が意味不明なんだが。
使わないテクスチャをわざわざ生成しているのか?

93 :
>>92
じゃ、メモリに画像読み込んで其処から作るべき?

94 :
もしくはテクスチャをイメージデータという意味で使っているのか?
やっていることに無駄が多すぎて意図が分からん。

95 :
>>93
わざわざテクスチャという形にするだけ無駄。

96 :
そもそもテクスチャを分割する理由すら怪しく思えてきた。

97 :
さすがに無いと思うが、もしキャラパターンの切り替えを、
1パターンに付き1テクスチャとかやっているのなら、ただの阿呆だぞ。

98 :
>>95
ごめんよく分からない
何にすりゃあ良いんだ?
>>96
一枚のでかいので一編に読み込みたいけど、
テクスチャの合成とかしたいから、分割して保持しておきたいって所。
(貼り付ける時ポリゴンのサイズとか変えたいから
UVだけでポリゴン分割しただけだとめんどくさい。)
>>97
それはUV指定でやるべきだと思うんだけど?

99 :
>>98
ポリゴンのサイズを変えるのに、分割しないと面倒くさくなる意味が分からない。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
C++11/C++1y 18 (338)
OpenWatcom C++ (751)
Excel VBA 質問スレ Part29 (485)
proce55ing プログラミングアート全般 (662)
ふらっとVisual C#,C♯,C#(初心者用) Part104 (286)
ふらっとVisual C#,C♯,C#(初心者用) Part104 (286)
--log9.info------------------
【test】書き込みテストスレ【てすと】 (773)
機動戦士ガンダムAGEをゆったり楽しむスレ5 (582)
HUNTER×HUNTER アニメ新旧・原作 比較スレ27 (248)
その人の好みに合いそうなアニメを紹介しあうスレ99 (669)
総合力スレ (227)
2012年 ベストアニメランキング (609)
エウレカセブンAO ネタバレ&考察スレ 01 (821)
なぜピングドラムはまどか☆マギカに圧勝したのか (216)
【アニメ16年周期説】 エヴァ VS まどか (286)
ミルキィホームズ関連イベント チケット交換・譲渡 (273)
まどか☆マギカはエヴァを越えたか6 (359)
鹿児島報告スレ (419)
【ネタバレ】銀河へキックオフ!! (674)
絶園のテンペスト ネタバレスレ (438)
となりの怪物くん ネタバレスレ (329)
【アニメ最萌】咲豚の殲滅を目指すスレ5 (337)
--log55.com------------------
東海 地方実況
東海 地方実況
東海実況
東海実況
東海実況
東海地域 実況
東海地域 実況
東海地域 実況