2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2006/12/24(日) 08:11:46
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

前スレ 【C++】 DirectX初心者質問スレ Part11 【C】
http://pc8.2ch.net/test/read.cgi/tech/1159456184/

2 :デフォルトの名無しさん:2006/12/24(日) 08:12:18
【関連サイト】

MSDN DirectX
http://www.microsoft.com/japan/msdn/directx/default.aspx

DirectX Home Page
http://www.microsoft.com/japan/windows/directx/default.mspx

BBX (掲示板)
ttp://isweb8.infoseek.co.jp/computer/bbx/

DXライブラリ置き場
ttp://homepage2.nifty.com/natupaji/DxLib/

Lamp:ゲーム開発とその学習をサポートするミドルウェア
ttp://lamp.sourceforge.jp/

TWINTAIL LOVERS.
ttp://www.twin-tail.jp/

Pastel's Laboratory
ttp://www.roy.hi-ho.ne.jp/pastel/home/index.html

GamDevPukiWiki - DirectX総合スレ (過去ログ等)
http://gamdev.org/w/?%5B%5BDirectX%C1%ED%B9%E7%A5%B9%A5%EC%5D%5D

GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
http://gamdev.org/w/?%5B%5B3DCG%C0%BD%BA%EE%A5%BD%A5%D5%A5%C8%5D%5D

ゲームを作るための素材を集めよう まとめサイト
http://paw.my-sv.net/index.html

3 :デフォルトの名無しさん:2006/12/24(日) 08:12:59
We wish you a Merry Christmas.

4 :デフォルトの名無しさん:2006/12/28(木) 21:08:38
Alt+Enterでフルスクリーンにできるゲーム作ってるんだが、
一回目起動して普通の状態からAlt+Enterでフルスクリーンにしようとすると
スプライトのOnLostDeviceので例外が発生する。
そのまま描画させると一応表示はされるんだがたまに表示がおかしくなる。
二回目は例外も発生せずに普通に表示される。

D3DXFontを使ってからおかしくなった。

D3DXFontもちゃんとOnLostDeviceしてる。
OnResetDeviceも両方やってる。

原因に心当たりのある方いませんか?


5 :デフォルトの名無しさん:2006/12/28(木) 21:12:27
環境を忘れた
スマソ

Windows Vista RC1(XP Proでやったときも起こった)
Visual C++ 2005 Academic
NVIDIA GeForce 6600
DirectX 9.0 2004 Dec


6 :デフォルトの名無しさん:2007/01/04(木) 03:26:13
D3DXFont/D3DXSprite関連の解決方→そんなの使うな。自分で作れ。

7 :デフォルトの名無しさん:2007/01/04(木) 07:02:57
>>4
お手軽フルスクリーン切り替えは鬼門
自分で全部面倒を見る覚悟がないとバグ地獄に突入する

8 :デフォルトの名無しさん:2007/01/06(土) 22:37:00
LPD3DXFILEを使用するXファイルの読み込みについて質問です。

LPDIRECTXFILE系がdeprecatedになっていたので、
新しい方のLPD3DXFILEを使用して読み込む方法を試しています。

現時点で、ファイルに含まれるテンプレートGUIDをチェックして
各データを取得には成功しています。
しかし、tiny.xを読み込ませたときにおかしな挙動になりました。

TID_D3DRMMesh の場合が2度存在し、含まれるメッシュが2つという判断をしてしまいます。
従来コードと新しいコード、2つを記載しますので、アドバイスよろしくお願いします。
(どちらもEnumオブジェクトを生成した後の処理とお考え下さい)



9 :デフォルトの名無しさん:2007/01/06(土) 22:37:30
新コード================================
(読み込み途中、データ解析呼び出し元)
SIZE_T num = 0;
pEnumObj->GetChildren( &num );
for(SIZE_T i=0; i < num; i++ ) {
 hr = pEnumObj->GetChild( i, &pDataObj);
 if( SUCCEEDED(hr) ) {
  parseXfileData( pDataObj );
 }
}

void parseXfileData(LPD3DXFILEDATA pData) {
 GUID templateType;
 pData->GetType( &templateType );
 if( tmemplateType == TID_D3DRMMesh ) {
  /* ここへ2度来る */
 }
 SIZE_T num = 0;
 pData->GetChildren( &num );
 for( SIZE_T i=0;i<num; i++) {
  if( SUCCEEDED( pData->GetChild( i, &pSubData ) ) {
   parseXfileData( pSubData );
   pSubData->Release();
  }
 }
}


10 :デフォルトの名無しさん:2007/01/06(土) 22:39:03
旧コード ============================================
(読み込み途中、データ解析呼び出し元)
while( SUCCEEDED( pEnumObj->GetNextDataObject( &pDataObj ) ) ) {
 parseXfileData( pDataObj );
}

void parseXfileData( LPDIRECTXFILEDATA pData ) {
 LPDIRECTXFILEOBJECTpSubObj = NULL;
 LPDIRECTXFILEDATApSubData= NULL;
 LPDIRECTXFILEDATAREFERENCEpDataRef = NULL;
 const GUID*pType = NULL;
 DWORDdwSize = 0;

 pData->GetType( &pType );
 if ( *pType == TID_D3DRMMesh ) { /* こちら側だと1度しか来ない */ }
 while( SUCCEEDED( pData->GetNextObject( &pSubObj ) ) ) {
  if( SUCCEEDED( pSubObj->QueryInterface( IID_IDirectXFileDataReference, (LPVOID*)&pDataRef ) ) ) {
   if( SUCCEEDED( pDataRef->Resolve( &pSubData ) ) ) {
    parseXfileData( pSubData );
    pSubData->Release();
   }
   pDataRef->Release();
  }
  if( SUCCEEDED(pSubObj->QueryInterface( IID_IDirectXFileData, (LPVOID*)&pSubData))) {
   parseXfileData( pSubData );
   pSubData->Release();
  }
  pSubObj->Release();
 }
}

11 :デフォルトの名無しさん:2007/01/08(月) 12:24:20
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□偽装派遣先の社員の意見にはたとえ間違っていても反対しない
□偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□偽装派遣先社員より自分の生涯収入が低いのは当然だ
□偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ偽装派遣先に常駐したい


12 :デフォルトの名無しさん:2007/01/08(月) 12:38:02
全問正解したのでなにかください

13 :デフォルトの名無しさん:2007/01/08(月) 15:40:37
つ VisualStudio .NET 2002

14 :デフォルトの名無しさん:2007/01/08(月) 15:41:47
>>11
早く自分の会社へ帰れ!!
でないと人間腐るぞ!

15 :デフォルトの名無しさん:2007/01/08(月) 18:46:13
え?えっ…?
何これ?デジャビュ?

16 :デフォルトの名無しさん:2007/01/08(月) 20:34:50
>>8-10
俺も昔そういうのに悩まされて、Xファイルを使うのやめて自作フォーマットにした。


17 :デフォルトの名無しさん:2007/01/09(火) 01:26:02
Xファイルの仕様とかインタフェース覚えるよりフォーマット自作した方が
大分早い気がする俺ガイル

18 :デフォルトの名無しさん:2007/01/09(火) 09:58:20
ツールどーすんの

19 :デフォルトの名無しさん:2007/01/09(火) 20:34:09
こんばんは、探しても探しても見つからないのでこちらで質問させて頂きます。

私は最近、DirectX8でゲームを作りたいと思い
HPを参考に勉強しているのですが、作り始めてすぐに壁にぶち当たってしまいました。
それは、d3dx8.hというファイルがDirectX9 SDKに入っていないのです。
参考にしているHPでは上記のファイルがインクルードされていて、どうしてもうまくいきません。

私のグラフィックボードはGeForceTi4800なので、DirectX8でどうしても作りたいのです。
どなたかd3dx8.hを手に入れる方法、またはd3dx8.hが無くても代わりにこれをインクルードすればいい、などの
解決法を教えてもらえませんか?お願いします。

失礼しました。

20 :デフォルトの名無しさん:2007/01/09(火) 20:47:15
>>19
それはさ。DirectX8なんかで作ろうと思ったのが運の尽きってことさw
あと、なんか勘違いしてない?
特にこの一文

>私のグラフィックボードはGeForceTi4800なので、DirectX8でどうしても作りたいのです。

「GeForceTi4800なので、DirectX8でどうしても作りたい」とか言ってるけど全く意味不明。
どうしてGeForceTi4800だとDirectX8で作らないといけないの?
あらかじめいっとくけど関係ないんだけど。
素直にDirectX9で作ればOKと言っておく。

このままDirectX8で作りたいっていうならこんな程度のことも自分で解決できないようじゃ。
無くなったヘッダーやらライブラリやらヘルプやらサンプルやら自分でかき集めてこれないだろ?
素直にやめとけと思う。

21 :デフォルトの名無しさん:2007/01/09(火) 21:19:46
DirectX9で作ればおkなのですね。
GeForce4はDirectX8世代だったことから
DirectX9のプログラムは正常に動かないのではないかと思ってました。
ご返答ありがとうございました。

22 :デフォルトの名無しさん:2007/01/10(水) 18:53:56
スレ違いかもしれませんが、ここで質問させてください。

非DirectXアプリケーションでマウスをグローバルフックして特定のマウスイベントを監視する
プログラムを作っています。
マウスが通常のウインドウ上にある場合は問題ないのですがDirectXを使ったウインドウ上にある
場合、フックはされるのですがマウス座量がボロボロの値(マイナス値とかありえない値)
になってしまいます。
フック方法は SetWindowsHookEx() API の WH_MOUSE_LL を使ったやり方で、DirectXは使っていません。

やりたいことは、マウスの正確な動きをログに取っておきたいのです。
マウスイベントは参照しているだけで、内容を変えるとか無効にするというような加工はしません。

そこで質問なのですが
1)別プロセスからDirectXアプリケーションウインドウのマウスイベントを得るには、特別な
  方法があるのでしょうか? それとも、そもそも無理なのでしょうか?
2)無理な場合、マウスがあるウインドウがDirectXのウインドウなのかどうかを調べる方法は
  あるでしょうか?

OSと開発環境はこんな感じです。どうかよろしくお願いします。

WindowsXP Home Edition SP2
DirectX 9.0c

VisualStudio .NET 2002


23 :デフォルトの名無しさん:2007/01/10(水) 23:38:41
ネットゲームのチートスレとかの方が詳しい人がいるんじゃないかな

24 :デフォルトの名無しさん:2007/01/14(日) 00:45:27
質問させていただきます。

1フレームの間に1つの同じ三角ポリゴンを同じ座標に500回描画した時
(DrawIndexedPrimitiveを1フレームで500回呼んだ)

500ポリゴンのメッシュを描画した時を比べてみたら、
同じ500ポリゴンを描画しているはずなのに前者はフレームレートが
極端に下がってしまいました。

同じ座標に同じ三角形を重複して描画してしまうと
遅くなってしまうものなんでしょうか?
考えられる原因を教えてもらえないでしょうか?
よろしくお願いします。

25 :デフォルトの名無しさん:2007/01/14(日) 07:21:27
1)秋葉原に1回行って、500本のエロゲーを買う。
2)秋葉原に500回行って、都度一本づつエロゲーを買う。

26 :24:2007/01/14(日) 13:09:23
>>25
DrawIndexedPrimitive、DrawPrimitiveが重いってことを
言ってるのだろうけど、500回ぐらいで劇的に重くならないようです。
書き方が悪かったのかもしれません。申し訳ない。

急に重くなる時は、「カメラの近くに存在するポリゴンを
重複して描画する」時であり、具体例を出すとこれ↓

カメラは( 0.0f, 0.0f, -10.0f)に存在し、原点の方向を見ている。
描画する四角形の4頂点は、
D3DXVECTOR3(-1.5f, 1.5f, 0.0f );//頂点@
D3DXVECTOR3( 1.5f, 1.5f, 0.0f );//頂点A
D3DXVECTOR3(-1.5f, -1.5f, 0.0f );//頂点B
D3DXVECTOR3( 1.5f, -1.5f, 0.0f );//頂点4

for(int i=0; i<500; i++){
//同じ四角形をループで500回描画します
 pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
}

こんな感じの簡単なコードを書くと急にFPSが5ぐらいになってしまいます。
また、この状態で、カメラをポリゴンから遠ざけるためにカメラの位置を
(0,0,-50.0f)ぐらいにするとなぜか、FPSは75ぐらいに回復する。
zバッファ処理を疑ってみましたが、zバッファ
SetRenderState(D3DRS_ZENABLE, true)をON、OFFと切り替えても
遅いのは変わらない。

いろいろ試してみましたが、どうも原因の検討がつきません。
どなたか原因をご存知の方はいらっしゃらないでしょうか?
よろしくおねがいします。

27 :デフォルトの名無しさん:2007/01/14(日) 14:00:03
1)画用紙に小さい四角を500回描く
2)画用紙いっぱいの四角を500回描く

絵の具をたくさん消費するのはどっち?

28 :デフォルトの名無しさん:2007/01/14(日) 15:20:21
>>27
なるほど。ポリゴンの塗りつぶし処理も結構手間が
かかっていると言うことですね。

つまり、ポリゴン数だけでなく、
画面に表示されるポリゴンの大きさによっても、
実行スピードが変わると言う認識で良いと言うことですよね?


29 :デフォルトの名無しさん:2007/01/16(火) 02:36:14
フルスクリーン時のデバッグって、皆さんどうやってます?
デバッガが使えなくて激しくダルイのですが。

30 :デフォルトの名無しさん:2007/01/16(火) 04:04:20
マルチスクリーン

31 :デフォルトの名無しさん:2007/01/16(火) 07:47:53
>>22
亀なうえに解決法は書けませんが、おそらくDirectInputで
マウス入力を取得するときに実マウスカーソルを無効にする方法と
して、そのアプリがマウス座標を画面外に飛ばしてるんじゃないでしょうか?

32 :デフォルトの名無しさん:2007/01/16(火) 23:03:47
>>29
リモートデバッガを利用する。

33 :デフォルトの名無しさん:2007/01/16(火) 23:53:18
自宅では電気代が怖いよね


34 :デフォルトの名無しさん:2007/01/17(水) 03:57:24
>>30,32
機材の必要の無い方法はないもんですか?

35 :デフォルトの名無しさん:2007/01/17(水) 04:47:31
8以降はフルスクリーンかウィンドウかなんてあまり気にする必要ないから、
俺はデバッグ時は基本的にウィンドウモードにしてるよ。

36 :デフォルトの名無しさん:2007/01/17(水) 19:43:11
5以前はデバッガが効かなかった。

37 :デフォルトの名無しさん:2007/01/20(土) 13:12:18
若いの オラが村では派遣労働の問題を口にしちゃなんねーだ
お前さんはまだわけぇから言いたいこともあるべぇ
だべな、派遣問題を口にするとムキになって怒る者がおるでよぉ
問題の指摘は駄目だっぺぇ
派遣のことは口にしちゃなんねぇ
この村みたいな民度ゼロの会社で現実忘れるためはよ
北朝鮮と一緒でよ、駄目のものを駄目と言ってはなんねえだべさ
タブーを口にしちゃいけねぇだ


38 :デフォルトの名無しさん:2007/01/20(土) 14:09:59
トランスフォーム済み(数値などの2D)の画像を表示させているのですが
ビデオカードが違うとテクスチャのUV値が微妙に狂うのはどう対応すれば宜しいのでしょうか。
用意している画像は512x512のPNG形式(読み込みも512四方)
Radeon9200では1ドットも狂わず画像の一部分を切り取っているのに、
GeForce5950で見ると一回り小さい範囲で切り取られているため画像が崩れて見えます。
逆にGeForce5950に合わせて作るとRadeon9200でUV値が一回り大きく取られて崩れて見えます。
これはRenderStateで何か設定すれば直るのでしょうか。

39 :デフォルトの名無しさん:2007/01/20(土) 14:31:36
>>38
UVの補正をTweakツールでできる場合があるが、それはユーザー任せ。
Windowsでは基本的に公式の仕様に準拠して作ること。
あと、たった2個の比較で判断しないこと。もっと多く調べれば偏りが出るものだ。
完璧主義にならず、特定の機種だけの微妙な不具合は切り捨てる勇気を持て。


40 :デフォルトの名無しさん:2007/01/20(土) 15:18:14
>>39
レスありがとうございます。
MSゴシック12で「0123456789」と数値を作って表示させると
文字幅が1ピクセルなので認識できないほど崩れてしまいます。
表現上太くはしたくないとか表示させたい画像細かい場合、
微妙というレベルを超えて表示されますがやはり妥協点なのでしょうか。

41 :デフォルトの名無しさん:2007/01/20(土) 15:47:54
そのクラスのビデオカードだと、精度が9bitの可能性が高いから
テクスチャを256*256に落としてみるとか。

42 :デフォルトの名無しさん:2007/01/21(日) 07:48:39
>>38
どんなコードなの
うちは古いnVIDIA(geforce4)でテストしてるけどその辺の問題ないよ

43 :デフォルトの名無しさん:2007/01/21(日) 14:49:10
DirectX SDKを初めてダウンロードしようとしている者ですが
よく調べたところ
http://www.microsoft.com/japan/msdn/directx/downloads.aspx
ここにWindows98ではサポートしていないと書かれていました
うちにはWindows98しかないのでDirectX 9.0b SDK (2002)を
ダウンロードしようと思いましたがマイクロソフトのページではできませんでした

OSを買い換えるしか方法はないのでしょうか?
他に方法があれば教えてください

44 :デフォルトの名無しさん:2007/01/21(日) 15:28:28
>>43
そんな状況ならPC買った方がトータルでいい希ガス
DirectXで3DやるならノートPCとかデスクトップで箱が小さくてグラボが交換できないのは買っちゃ駄目。

45 :デフォルトの名無しさん:2007/01/21(日) 15:40:07
>>44
レスありがとうございました
できれば私もそうしたいのですが事情があってできないのですorz
なんとかしてWindows98でDirectX SDKを使うことはできないでしょうか?
自分でも調べてみましたがよくわからないんです


46 :デフォルトの名無しさん:2007/01/21(日) 16:08:31
古めのSDKが入ってる書籍でも探してみたら?

47 :デフォルトの名無しさん:2007/01/21(日) 16:15:49
古本屋でC Magazineのゲーム開発か3Dの特集やってる号をさがすとか


48 :デフォルトの名無しさん:2007/01/21(日) 21:21:44
>>46>>47
わかりました
そうしてみます
回答ありがとうございました

49 :デフォルトの名無しさん:2007/01/29(月) 09:46:35
DirectX SDKをダウンロードする際、過去のバージョンがかなり掲載されていますが、
一番最新のを導入しておけば問題はないのでしょうか?
例えばcyberlibrary等のラッパーはFebruary 2005のバージョンを落とすように書かれてありますが
最新では不都合あるとかあるんでしょうか?


50 :デフォルトの名無しさん:2007/01/29(月) 13:49:41
ラッパライブラリに疑問があるならマニュアルやFAQを調べて
解らなければ作者やMLで聞いてみればいいんじゃないの。
ライブラリを一番理解しているのは、大抵は開発者なんだし。

51 :デフォルトの名無しさん:2007/01/30(火) 09:03:11
ある点を原点を中心に回転させた位置に持っていくにはどうすればいいでしょう?
今は

D3DXVECTOR3 old_position(0.0f, 0.0f, 1.0f);
D3DXMATRIXA16 mat, mat_trans, mat_roty;

D3DXMatrixTranslation(&mat_trans, old_position.x, old_position.y, old_position.z);
D3DXMatrixRotationY(&mat_roty, D3DXToRadian(45.0f));

mat = mat_trans * mat_roty;
D3DXVECTOR3 new_position = D3DXVECTOR3(mat._41, mat._42, mat._43);

こんなことをやってるんですが…

52 :デフォルトの名無しさん:2007/01/30(火) 16:54:41
>>51
new_position = old_position * mat_rotyだけでいい。

53 :デフォルトの名無しさん:2007/01/30(火) 21:05:32
そんな技が!ありがとうございました

54 :デフォルトの名無しさん:2007/01/31(水) 07:46:56
D3DXVec3TransformCoord(&new_position, &old_position, &mat_roty)


55 :デフォルトの名無しさん:2007/01/31(水) 16:13:32
よく市販のゲームで「DirectX9.0c以降」などと表記されていますが
これはSDKのどのバージョンでビルドされているのでしょうか?

56 :デフォルトの名無しさん:2007/01/31(水) 19:49:15
>>55
9.0cの何れかのバージョン
DLLを見ると細かいバージョンわかるぞよ

57 :デフォルトの名無しさん:2007/01/31(水) 23:44:47
DirectShowってなくなったんですか?

58 :デフォルトの名無しさん:2007/02/01(木) 00:43:27
Platform SDKに移管

59 :デフォルトの名無しさん:2007/02/01(木) 01:13:52
>>58
マジすか。
ありがとうございます。

60 :デフォルトの名無しさん:2007/02/01(木) 10:19:17
HIDの制御に参考になるページか書籍でよいものありませんか?

61 :デフォルトの名無しさん:2007/02/01(木) 17:03:16
他のアプリケーションがオーバーレイを使っているなどして
オーバーレイで表示できない場合があるじゃないですか?
2枚目のオーバーレイは真っ黒表示になってしまったり。。
オーバーレイはもうこれ以上使えませんよ、みたいな
事を知る方法ありませんか?
ちなみにdwCurrVisibleOverlaysフラグは常にゼロみたいでした。
(このフラグっていったいなんだろ。。)



62 :デフォルトの名無しさん:2007/02/01(木) 17:21:17
PlatformSDK入れたら
Microsoft Platform SDK for Windows 2003 Server SP1
とかいうのがインストールされた。
俺のOSはWinXPSP2だ。
XPでDirectShowを実現するのは無理のようだ。

63 :デフォルトの名無しさん:2007/02/01(木) 17:54:15
はいはいアホスアホス

64 :PPP:2007/02/01(木) 18:00:46
質問なんですが、MeshObjectをCreateする処理で最大頂点数が65534個
を超えるものに対して、オプションでオプションにD3DXMESH_32BITを
つければいいと書いてありましたが、PCがフリーズします。
何か解決策があればご教授お願いします。


65 :デフォルトの名無しさん:2007/02/03(土) 00:50:28
5とか6とか7とかの時代の知識で止まってて、最近勉強を再開したのですが一つお聞かせください。
DirectXのインターフェイスなのですが、dllの静的リンクを避ける場合等にはCoCreateInstanceや
関連インターフェイスからのQueryInterfaceで作成することができる(できていた)と理解しているのですが、
DX9の場合、IDirect3D9の作成にはDirect3DCreate9を使うしかないということでよいのでしょうか?
そしてdll静的リンクをしたくない場合はLoadLibraryを使えということなのでしょうか?
(そもそもLoadLibaryでできるんでしょうか。d3dを静的リンクした別dllを用意して(ryとかする必要あり?)

最初からDirectX9入ってない環境なんてお呼びじゃないんだぜ、と決め打ちするのが良いのでしょうけれど…

66 :デフォルトの名無しさん:2007/02/03(土) 03:21:21
>>65
QueryInterfaceは7あたりから廃止されたかな。

D3DはLoadLibraryで使えるけど、面倒ならDLLの遅延ロードを利用するのが楽かも。
遅延ロードはVC++6.0から追加された機能で、DLLの関数が初めて呼ばれた時点で
DLLが読み込まれる。このときDLLが存在しなければ例外が発生する。
例外をキャッチすれば、DLLが無いシステム上でもそのまま続行可能。

ただ、Direct3Dの場合はDLLがエクスポートしている関数は1つしか利用しないから、
LoadLibrary&GetProcAddressでも大した手間じゃないけど。

DirectX9はリリースされてからかなり時間が経ってるから、入ってないシステムは
切り捨てで全く問題ないと思う。
NT4.0とかをサポートしたいなら、最初からDirectX9なんて使わない方がいい。

67 :65:2007/02/03(土) 13:11:46
>>66
丁寧な回答有難うございます。

なるほど、遅延ロードという手もありますね。すっかり失念していて気付きませんでした。
COMの癖になんでCo(ryで作成できないんだよ!と思っていたのですが、何やらDirectXのCOMは
独自の道を歩みつつあるようなのですね…。
確かに、今更DirectX9が入っていない環境を対象にして(9相当の)代替機能を考えること自体が
あまり現実的ではないようですし、この辺は昔ほど神経質にならずともよいようですね(目的にもよるだろうけれど)。

68 :デフォルトの名無しさん:2007/02/07(水) 11:17:15
はじめまして。皆様のお知恵を拝借できませんでしょうか。
DirectShowを使ってUSBカメラからAVIファイルを作成したく、Web上で見つけたサンプルをビルドしてみました。
しかし、ICaptureGraphBuilder2が定義されて無い、とコンパイルエラーになってしまいます。
パスを登録し、dshow.hをインクルードするだけではダメなのでしょうか。
試しにICaptureGraphBuilder2が記載されていると思われるstrmif.hも記述してみたのですが同じでした。

環境は
WinXP(SP2)/VC++(6)
SDKは
dxsdk_dec2006.EXE
5.2.3790.2075.51.PlatformSDK_Svr2003R2_rtm.img
です。
もしかして、VC6に対応していない版を使用してしまっているのでしょうか?
なお、サンプルは
ttp://www.geekpage.jp/programming/directshow/video-capture-save-avi.php
を参考にさせていただいております。

69 :デフォルトの名無しさん:2007/02/07(水) 11:42:14
>>68
ややスレ違い

DirectShowと戦うスレ Part 2
http://pc10.2ch.net/test/read.cgi/tech/1162913156/

一応応えておくと >> http://pc10.2ch.net/test/read.cgi/tech/1162913156/9-
VC6は標準準拠度にも問題あるし移行することをお勧めするが..

70 :デフォルトの名無しさん:2007/02/09(金) 07:06:15
D3DXのDLLのバージョンが違って動作しない問題について質問です

・D3DXがstaticなライブラリで提供されていたころのDirectXSDKを使えば
 ランタイムライブラリを再頒布しなくても大丈夫なのでしょうか?
・上の考えがあってる場合、どのバージョンのSDKを使うのが適当でしょうか?
・一般に売られているPCゲームではこの問題にどのように対処しているのでしょう?

よろしくお願いします。。。

71 :デフォルトの名無しさん:2007/02/09(金) 07:12:12
exeと同じところかに必要なDLLを置いておく。(DLLを別の場所にする方法もあるけど)

72 :デフォルトの名無しさん:2007/02/09(金) 07:16:04
一般に売られているPCゲームではランタイムライブラリも再頒布しますが何か?

73 :デフォルトの名無しさん:2007/02/09(金) 10:09:30
>>71
配布するときにそれだと問題にならないんでしょうか?
調べてみるとライセンス的にグレーだという話があるみたいですが

>>72
そうだったんですか・・・!
実際に私のPCで調べてみるとd3dx9_24〜30.dllまでが勝手に入っていました
SDKはApril2006しか入れてないのでゲームのインストーラが勝手にぶち込んだみたいですね

74 :デフォルトの名無しさん:2007/02/09(金) 10:29:52
>>73
>調べてみるとライセンス的にグレーだという話があるみたいですが
どこで調べたのか

75 :デフォルトの名無しさん:2007/02/09(金) 10:35:48
「d3dx」とかでぐぐりました

http://printf.jugem.jp/?eid=670
ここの人がそういうことを言ってますが、どうなんでしょう・・・?

76 :デフォルトの名無しさん:2007/02/09(金) 11:05:49
>>75
そりゃDLL単品はダメだけど再配布パッケージも添えれば何の問題もない

77 :デフォルトの名無しさん:2007/02/09(金) 12:05:01
まあ、配布する手段によっては再頒布を一緒に入れるのはキツイかもしれんが
そういう場合はすっぱり諦めてインストールを促すか、Dec2004までで我慢しろってことだな

78 :デフォルトの名無しさん:2007/02/10(土) 17:51:51
つまり、CDやDVDの中にランタイムを入れておけば
自分のゲームのexeのとなりにもD3DXのDLLを置いておけるってこと?


79 :デフォルトの名無しさん:2007/02/10(土) 18:40:53
>>78
よくわからんけどそういう裏技にはあんまりやさしくないと思う。
本質をわざとはずしたようなことやると後々うるさいから辞めた方がいいと思う。
ランタイムインストーラーを自動で勝手に起動するようにしてうながすほうがはるかに楽だぞ。多分。

80 :デフォルトの名無しさん:2007/02/10(土) 19:17:55
directxsetupというのを使うと幸せになれるみたいだ

81 :デフォルトの名無しさん:2007/02/10(土) 19:21:31
幸せになれませんでした

82 :デフォルトの名無しさん:2007/02/11(日) 01:54:27
質問します
マイクロソフトからDirectX9をダウンロードしても
再起動の表示が出ませんどうすればいいですか?

83 :デフォルトの名無しさん:2007/02/11(日) 02:09:00
自分がアホであることを認識する

84 :デフォルトの名無しさん:2007/02/11(日) 02:15:54
>>82
再起動しなくていいなんてラッキーじゃん

85 :デフォルトの名無しさん:2007/02/11(日) 06:19:04
>>82
インストールしてみれ

86 :デフォルトの名無しさん:2007/02/11(日) 10:38:38
>>85インストールしましたがコンポーネントを使用する準備ができました
と表示されるだけです

87 :デフォルトの名無しさん:2007/02/11(日) 11:22:13
        ,. -‐  ̄  ̄ ̄ ` ヽr―‐ 、
   `ー--‐r'´    /         \::::::>
      /    / / | !  ヽ ヽ   ヽ:::::\
      /  !  / / | |  !  ヽ !    |ヽ ̄
     /  1 ,斗t 7  !. | Tiト、 .!    ! レ--、____
     / / |/ V 、   ヽ| __ヽ \|   ! | _ -、__}   フヒヒwwサーセンwww
    / ∧ | r ニミ     frぅミヽ. |   ! |//≦三}
   /  |  |/ ハ__ハ     {r、_!} レ    !ハ/:::::::::::\
   |   |⌒| Vr_ソ 、   Vrソ |    「}く:::::::::::::::::::::::\
   | !  ハ | ::::  r--- z   :::: |    |ノ \:::::::::::::::::::;∧
   | !  ! 弋!    i    |    |    |__ノ::::::::::::::::::::::::ハ
   ∨ ∧ i 人.   |    }    V   !::::::::::::::::::::::::::::::::::::}
    _\| > へ>、_`  '  _ イ  \ハ/:::::::::::::::::::::::::::::::/
  /==、 、.   \}  ¨ ´ ハ     //:::::::::::::::::::::::::::/
<ユ二ー、 ヽヽ  ∧_r‐ニニミ }   //|::::::::::::::::::::::/
  /⌒\ \ \\ ∨::Vフ// ///::::::::::>' ̄
. /::::::::::::::::ヽ ヽ  \_ミヘ:::::::/ </ /:::::/
/:::::::::::::::::::::ヽ:::∨ ー‐ >‐>く__ /::} ̄
:::::::::::::::::::::::::::ヽ:::>―く::::(___人::r‐‐ュ::::|
::::::::::::::::::::::::::::::|:::::::::::::::::\:::/:: \::::::::::|
::::::::::::___:::__:::|:::::::::::::::::::::::::{:::   \::ハ
rァ/ 、 、 、 \:::::::::::::::::::::::\    \|


88 :デフォルトの名無しさん:2007/02/11(日) 11:42:44
>>86
OSのインストールからやりなおしだな。
再起動表示がないときはインストールが中途半端な状態で終わってるから
一度OSをクリアしないと駄目だ。

89 :デフォルトの名無しさん:2007/02/11(日) 11:49:00
コントロールパネルの部分でテストしてみたら?

90 :デフォルトの名無しさん:2007/02/11(日) 12:29:59
>>88初期化?
>>89ファイル名を指定して実行ってこと?

91 :デフォルトの名無しさん:2007/02/11(日) 12:32:54
>>90
ああ、もう、OSの再インストールしか残って無いな

92 :デフォルトの名無しさん:2007/02/11(日) 12:43:39
ばーか

93 :デフォルトの名無しさん:2007/02/11(日) 15:24:13
c++/CLIでDXを使いたいのですが、
自作のMeshクラスを下のように作ってメッシュを読み込もうとすると
'D3DXLoadMeshFromXA' : 7 番目の引数を 'cli::interior_ptr<Type>' から 'DWORD *' に変換できません。
とエラーがでます。こういう場合はどうやって書いたらよいのでしょうか?

ref class Mesh
{
private:
IDirect3DDevice9*pd3dDev;
ID3DXMesh*pMesh;
LPDIRECT3DTEXTURE9*pMeshTextures;
D3DMATERIAL9*pMeshMaterials;
DWORDdwNumMaterials;

public:
HRESULT Load(char* filename);
〜略
}

HRESULT Mesh::Load(char* filename)
{
〜略〜

hr = D3DXLoadMeshFromX(
filename,D3DXMESH_SYSTEMMEM,pd3dDev,NULL,&pD3DXMtrlBuffer,NULL,&dwNumMaterials,&pMesh);

〜略
}

94 :93:2007/02/11(日) 15:31:58
ちなみにマネージドDXではなくて普通のDXです。

95 :デフォルトの名無しさん:2007/02/11(日) 15:45:44
>>93
{
pin_ptr<DWORD> p = &dwNumMaterials;
Func(p);
}
多分こうかしら。というかC++/CLIって今どうなのかしらね。

96 :93:2007/02/11(日) 15:58:29
>>95
ありがとうございます。
でも同じエラーがでました。。。

97 :デフォルトの名無しさん:2007/02/11(日) 16:38:48
>>95
スタックに自動変数積んで、それのアドレスを渡してからメンバフィールドにコピー。

たぶんマネージ型のメンバとして持つとGC回収(もしくはメモリ移動)の可能性があるから
そのままアドレスが渡せないんじゃないのかな。
俺もよく忘れてそのエラー頻繁に見るよ……。
それとC++/CLIの質問はマネージ関連のスレでした方が良いかと。
見た目が似せてあるだけで全然違う言語だこりゃ。

98 :97:2007/02/11(日) 16:42:24
アンカミス
- >>95
+ >>93

99 :93:2007/02/11(日) 16:58:38
>>97
なるほど、うまくいきました!(多分)
とりあえずここのエラーは消えました。
ありがとうございました。

100 :デフォルトの名無しさん:2007/02/11(日) 20:21:10
描画速度についての質問なんですが、
インデックスバッファと頂点バッファを用いて描画するのと、
頂点バッファのみ(予めインデックスデータを参照し配列を作っておく)では
どちらが速いですか?

101 :デフォルトの名無しさん:2007/02/11(日) 22:26:33
>>100
やってみりゃいいじゃん。
俺の予想としてはあんまりかわらないんじゃないかと・・・

102 :デフォルトの名無しさん:2007/02/11(日) 22:37:22
最近のGPUではキャッシュの都合上前者が有利とよく言われている。その程度。

103 :68:2007/02/12(月) 15:27:17
>>69
 お礼を戦う〜に誤爆してしまいましたが、改めてお礼と報告です。
2003/Summerを使用し、VC6でビルドおよび動作させることができました。
ありがとうございました。
VC2003/2005にアップはだんだんと進めていかないと行けないようですが、なかなか難しいものですね。

104 :デフォルトの名無しさん:2007/02/20(火) 15:07:36
すみません。DirectX(Summer 2004)ていうのをみたの
ですが、他のはDecember Aprilとかなのに
なぜこれだけSummerなのですか?


105 :デフォルトの名無しさん:2007/02/20(火) 15:43:45
>>104
デヴェロッパのストレス発散

106 :デフォルトの名無しさん:2007/02/23(金) 00:56:25
DirectInputのSetCooperativeLevelがDISCL_BACKGROUNDで動いてるロガーがあるのですけど、
一時的にそっちからマウスやキーの情報を取得できないようにする方法ってないでしょうか?

107 :デフォルトの名無しさん:2007/02/24(土) 04:49:17
ネットワークカメラの画像取り込みを、これから勉強したいと思っております。
C++も初級レベルが、よろしくお願いします。

ttp://www.katolab.ee.kagu.sut.ac.jp/programing/capture.htm
・上記のリンクの図にUSBカメラから矢印が出てるデバイスフィルタ(IBaseFilter)
がありますが、このあたりをネットワークカメラ用になにかすると、
ほとんどプログラム変えないでもネットワークカメラの
画像も取り込めるのでしょうか?
USBカメラに関しては、いくつか解説してあるページ見つかりましたが、
ネットワークカメラの画像を取り込むには、なにから勉強すれば
良いのかという段階なんです。

・ネットワークカメラ用のサンプルプログラムの乗ってる本や
ページなどありますでしょうか。

スレ違いでしたら、誘導していただけますと助かります。
よろしくお願いします。

108 :デフォルトの名無しさん:2007/02/24(土) 06:24:52
>>107
DirectShowと戦うスレ Part 2
http://pc10.2ch.net/test/read.cgi/tech/1162913156/

109 :デフォルトの名無しさん:2007/02/24(土) 11:13:16
>>107
スレ教えていただきありがとうございます。
ネットワークカメラもDirectShowを使うんですね。


110 :デフォルトの名無しさん:2007/02/27(火) 02:57:13
モーショントラックが二つ存在するxファイルの再生なんですが、


if(キーが傾いている)
  トラック0をFALSE
  トラック1をTRUE

else if(キーが傾いていないアイドル状態)
  トラック0をTRUE
  トラック1をFALSE

でトラックの切り替えを行おうとしたのですが、
これではif文にくるたびに、切り替えが行われモーションが再生されているようには見えないです。

アイドル時と非アイドル時を判定し、トラックを切り替えたいのですが、
どのように書けば良いでしょうか?宜しくお願いします。

111 :デフォルトの名無しさん:2007/02/27(火) 08:42:49
DirectShowのプログラムを始めたいと思っています。
今までC/C++では、コンパイルにBorlandのC++Compiler 5.5を利用していたのですが、
DirectShowのプログラムもこれでコンパイルできるでしょうか?
それともVCでないとダメでしょうか?

112 :デフォルトの名無しさん:2007/02/27(火) 09:08:12
>>111
試しにやってみようという気は0bitもないのでつか?

113 :111:2007/02/27(火) 17:43:29
>>112
できました。
ありがとうございました。

114 :デフォルトの名無しさん:2007/02/27(火) 19:19:43
DirectShowのプログラムをボーランドのC++コンパイラでコンパイルしようとしたところ、

〜>bcc32 test.cpp

Fatal: オプションが必要 : LD:\Program Files\Microsoft Platform SDK\Lib

というエラーが出ました。
どんなオプションが必要なのでしょうか?

115 :114:2007/02/28(水) 11:00:50
自己解決しました。

116 :デフォルトの名無しさん:2007/02/28(水) 12:37:24
Visual C++ 2005 Express EditionでDirectXを扱えますか?

117 :デフォルトの名無しさん:2007/02/28(水) 12:39:39
ます

118 :116:2007/02/28(水) 12:52:14
じゃあインストールしてみます。
Cをわずかに理解しているだけでBMSプレーヤーが作れるだろうか・・・

119 :デフォルトの名無しさん:2007/02/28(水) 13:21:58
DirectX使うなら、自分がCしか使わないとしても
拡張子はcppにして、C++としてコンパイルしないと、面倒だからね。

39 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)