■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

【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++としてコンパイルしないと、面倒だからね。

120 名前:デフォルトの名無しさん :2007/03/01(木) 01:50:46
Zバッファを使いたいのですが
pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
以外に設定するものはあるのでしょうか。
Xファイル2つを表示させると後のものが必ず上に表示されます(同一のオブジェクトでも後に描画されたパーツが上に)。
何か設定を逃していると思うのですが、もしかすると別の問題なのでしょうか。

121 名前:デフォルトの名無しさん :2007/03/01(木) 02:10:06
1.Zバッファを作成し忘れてる。
 →初期化で自動的に作る(D3DPRESENT_PARAMETERS)
 →明示的に作って設定(pDevice->CreateDepthStencilSurface()とpDevice->SetDepthStencilSurface())

2.描画対象のZ値が完全に一致してしまっている。
 →データを見直せ

3.どっかでエラー吐いたりハードが対応してなかったり
 →エラーチェック。このPCでは利用できません

122 名前:デフォルトの名無しさん :2007/03/01(木) 11:29:33
>>120
射影行列のニアクリップの距離を0にしていないか?

123 名前:120 :2007/03/01(木) 14:00:35
>>121,122
レスありがとうございます。お蔭様で解決できました。
>>122の最近距離は0ではなく0.1だったのですが、あまりにも大きな物体を遠くから見てたのでおかしくなってたようです。
今まで0.1で使っていて不具合が無かったので、こういう事態になるとは思いませんでした。

124 名前:デフォルトの名無しさん :2007/03/01(木) 14:48:35
DrawIndexedPrimitiveの引数について教えてください。

x, z が 256*256 の heightfield を表示しようとして

DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 256*256, 0, (256-1)*(256-1)*2*3); とすると
GeForce4MX(最大インデックス数=65535)なので頂点数・インデックス数が多すぎと言われました。

そこで、頂点数を x, z = 5*5に減らして
DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 5*5, 0, (5-1)*(5-1)*2*3); とすると正常に表示されます。

ですが、最終的には大きなheightfieldを表示したいので、zの1行ずつ表示しようと考えました。
それで↓のようにしてみたのですが、表示がおかしくなってしまいました。
for (int i = 0; i < height - 1; i++){ // ここでのheightはzの数です。この例では5です
DrawIndexedPrimitive(
D3DPT_TRIANGLELIST,
i * height, 0, height*2,
0, (height - 1) * 2 * 3
}
ヘルプとかgoogleで探したいろんなサイトの説明を読んでみたりはしたのですが
DrawIndexedPrimitiveの引数になにを入れればいいのかよく理解できませんでした。
http://www.dwahan.net/nyaruru/programming/dipmini.png とか見ました。)

↑のようにzの1行ずつする場合、どう書けばいいんでしょうか? よろしくお願いします。

125 名前:デフォルトの名無しさん :2007/03/01(木) 15:56:36
>>124
まずはC言語の・・・・・

126 名前:デフォルトの名無しさん :2007/03/01(木) 16:14:58
>>125
うしろの);がないとか、pDev->がないとかそゆこと?
それは実際のプログラムには書いてあります。

127 名前:デフォルトの名無しさん :2007/03/01(木) 17:06:24
HLSLやろうと思ってネットでサンプル落としてコンパイルかけたんですが、
PassメソッドはID3DXEffectインターフェースのメンバではない、というエラーが出ます。
これが解決できません。
VS2002で作られたサンプルをVS2005で動かそうとしているからなのか、DirectXのバージョンの問題なのか、
どちらかかなあとは思うんですが。わからないです。

128 名前:デフォルトの名無しさん :2007/03/01(木) 17:26:57
>>127
DirectX

129 名前:127 :2007/03/01(木) 17:44:39
これどうすればいいんですか?

130 名前:デフォルトの名無しさん :2007/03/01(木) 17:56:53
>>123
ニアクリップとファークリップは、比率が重要。
zf/znが小さいほどZバッファの精度がよくなる。

基本はニアクリップをできるだけ遠く、ファークリップをできるだけ近くする。
zf/znが1000くらいならあまり問題は起こらないかな。

Zバッファは手前は物凄く精度が高く、遠くになるほど劇的に精度が落ちる性質がある。
znやzfの調節では対応しきれないようなら、Wバッファを使ってみるといい。

それと、D3DRS_ZENABLEのパラメータはTRUE/FALSEじゃなくて、D3DZBUFFERTYPEだよ。
数値的にはD3DZB_FALSE = FALSE = 0, D3DZB_TRUE = TRUE = 1で一緒だが。

131 名前:デフォルトの名無しさん :2007/03/01(木) 18:18:00
>>124
引数の意味は
http://msdn2.microsoft.com/en-us/library/bb147325.aspx
このScenario 3〜4の図が分かりやすいかと。
コードも合わせて見ると分かりやすい。

BaseVertexIndexはVertexBufferの中の開始位置(オフセット)。
BaseVertexIndexの位置の頂点がインデックス0になる。

MinIndexは、このコールで使用するインデックスの最小値。
最適化に関係するだけなので、分からなければ0でいい。

NumVerticesは使用する頂点の数。(インデックスの最大値と最小値の差+1)
MinIndexとNumVerticesは面倒なら0とVBの頂点数のままでいい。

StartIndexはインデックスバッファの開始位置のオフセット。

132 名前:デフォルトの名無しさん :2007/03/01(木) 18:38:06
>>124
表示がおかしくなった原因はPrimitiveCountじゃないの?
これは(height - 1) * 2だと思うが。(そもそも5*5の方もおかしい)

ついでに言うと、普通はこういうやり方じゃなくて、同じテクスチャを
使用しているマスだけを選んで動的にVertexBufferを作って行くようにする。

133 名前:127 :2007/03/01(木) 18:50:04
自己解決しました。
BeginPass,EndPassを使えばよかったみたいです。

134 名前:デフォルトの名無しさん :2007/03/01(木) 19:37:11
>>131
レスありがと〜。 まだmsのサイト全部は読みきれてないけど;

>>132
俺もおかしいとは思ってたw
普通のやり方がまだわかってなくておかしいとは思うけど、DirectXは最近はじめたばっかりなんで許してw
でも、同一テクスチャだけまとめて・・・ってのは、なるほど〜と思った。 ありがと。

で、まだ解決には至ってないんだけど、ぼーっと眺めてても理解が進まないし
ループを展開してとりあえず2行分ならべて書いてみようと思って
>>131がしてくれた説明をじぶんなりの理解(動いてないから曲解してるかも)で↓のように
DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0*width, 0, width*2, 0, (width-1)*2); // 1行目
DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 1*width, 0, width*2, (width-1)*2*3, (width-1)*2); // 2行目
書いてみたものの、1行目は表示されるけど、2行目が表示されない。
なにか根本的に勘違いしてる(and/or理解してない)のかもしれない。

135 名前:デフォルトの名無しさん :2007/03/02(金) 23:53:44
D3DXIntersect の具体的な使い方について、書かれている書籍ってないですか?

136 名前:デフォルトの名無しさん :2007/03/03(土) 23:11:10
衝突判定の類は、D3DXに頼らず自分でロジックを組むところから始めた方がいい。
理解が中途半端だと結局あらゆるところで躓く。

137 名前:デフォルトの名無しさん :2007/03/04(日) 07:44:46
>>136
いやそれでは答えになってないしょう?
こっちはいろいろ考えて D3DXIntersect に落ち着いたのに、それを否定される筋合いはありません。

138 名前:デフォルトの名無しさん :2007/03/04(日) 07:56:45
MSDNのヘルプでも見て引数を知って、後は実際に試してみればいいと思うんだが…
基本的に対象とするメッシュと視線レイを与えて引数で結果を得るだけのものだし。

具体的な使い方も分からずに選択するのがいろいろ考えた結果なのか?

139 名前:デフォルトの名無しさん :2007/03/04(日) 08:54:28
>>138
具体的な使い方が書かれてるのが知りたいんです。
解説に動くプログラムが添えてあって、すぐ試せるようなのが理想です。
自分で最初から考えるよりすでにあるものをコピペしたほうが、確実だし時間もかからないですよね。
労力を金で買いたいと言ってるのに、「自分でやれ」はおかしいでしょう?

140 名前:デフォルトの名無しさん :2007/03/04(日) 08:59:57
プログラマを雇った方が確実だな

141 名前:デフォルトの名無しさん :2007/03/04(日) 09:04:16
技術は金では買えないから、技術者を雇うというのが正解。
頭が悪いのはどうにもならん。

142 名前:デフォルトの名無しさん :2007/03/04(日) 11:23:06
おまえら本当に頭が極端だなw
じゃ本と同じ値段で雇えるプログラマ教えろ、だろ次は

143 名前:デフォルトの名無しさん :2007/03/04(日) 11:27:28
>>135
ないよ

コレで満足?

144 名前:デフォルトの名無しさん :2007/03/04(日) 11:31:18
>>140-141
自分がプログラマだからここに聞きに来てるんですけど。それに丸投げしようとは思ってません。
正直言いますと3Dゲームを作るのは初めてですが、仕事なので仕上げないといけないんです。
まだマスターアップまで3週間あるとはいえ、なるべくなら短い時間で作りたいんですよ。

>>142
まさに正論ですね。

>>143
そうですか。ゲ製作で聞いたほうがよさそうですね。

145 名前:デフォルトの名無しさん :2007/03/04(日) 11:38:31
>>144を雇っている会社は、そのぶん有能な技術者を雇う人件費を損失している。
今後も無能なのに寄生して、会社に損害を与え続けるんだろうな。

146 名前:デフォルトの名無しさん :2007/03/04(日) 12:07:56
ゲ製作技術板にまで迷惑をかける気か。最低の人間だ。

147 名前:デフォルトの名無しさん :2007/03/04(日) 12:40:36
幾ら短期間で仕上げるのが目的とはいえ、この程度の仕様の関数に具体的なソースもクソもないだろ
D3DXのアニメーション周りとか、内部的にややこしい(又はめんどくさい)処理が必要なものなら
まだ使いまわしたいってのは分かるし、実際に有用かもしれないが…

仮にD3DXIntersectの完全なサンプルソースがあったとしても、それを使いまわせるような人なら
そもそも関数の仕様を見た段階で何も考えずに実装できそうなものだが。その程度の処理しかしてないんだし。

148 名前:デフォルトの名無しさん :2007/03/04(日) 12:57:34
じゃあ質問の仕方をかえます。D3DXIntersect をどう使えばいいのか教えて下さい。
与える引数は3つですよね?
 pMesh 地形マップのメッシュ BattleMap
 pRayPos カメラの座標 D3DXVECTOR3(CamX,CamY,CamZ)
 pRayDir カメラの向き D3DXVECTOR3(0,0,1)
関数は正常に動いてるのに、なぜか思ったような結果になりません。
目の前に山があるのに、カメラが前進すると山の中に入ってしまいます。

149 名前:デフォルトの名無しさん :2007/03/04(日) 15:02:55
>>136
やはり近道探すより自分であれこれ悩みまくった方が賢明ですね。
とりあえず、D3DXIntersect使って接触してるかなどは判定できるようになれたので
あとはトロトロやってみます。。

150 名前:デフォルトの名無しさん :2007/03/04(日) 17:27:02
シェーダーなんですが、REFだとものすごく重いんだけど、
思ったとおりの描画をしてくれるのに、HALだとただの
フォンシェーディングっぽくなってしまうのは何ででしょう?
GPUはRADEONX1950とGeForce6800で確認しましたが同じでした。

REFとHALって同じコードでも違う演算するんですか?

151 名前:デフォルトの名無しさん :2007/03/04(日) 17:30:19
すべての機能が使える仮想環境と一部使えない実環境だからでは?

152 名前:150 :2007/03/04(日) 17:36:08
>>151
早速のレスありがとうございます。

なるほど。
ということは、シェーダーでGPUのサポートしていない命令を使ってしまっているということですかね?

153 名前:デフォルトの名無しさん :2007/03/04(日) 17:57:40
>>152
たぶんシェーダが問題なのではなく、RenderState等だと思う。
シェーダに問題があれば、コンパイル時にエラーが出るんじゃないかな。
シェーダのコンパイルでエラー出てないよね?

RenderStateやSamplerStateは影響するものは全て自分で設定しないと駄目。
default値をあてにしてはいけない。ドライバで勝手に変えてる設定も多い。

HALとREFでは使える機能に差はあるが、使える範囲内で使う分には基本的に
動作に違いはないよ。(そのためのリファレンスラスタライザだし)

154 名前:150 :2007/03/04(日) 18:04:25
>>153
ありがとうございます。

なるほど。確かにシェーダーのコンパイルでエラー出ませんね。
ちょっと全部のRenderState見直して設定してみます。

155 名前:デフォルトの名無しさん :2007/03/05(月) 10:26:27
DirectXでAVI等の動画ファイルを再生する関数などはあったとおもうんですけど、
となるとゲームとか作って配布する際にAVIファイルを丸出しにしないといけません。
それはいやなので、どうにかその生ファイルが見えない形にして
配布したいのですが、そういう場合はどういった方法がありますか?

156 名前:デフォルトの名無しさん :2007/03/05(月) 11:01:48
>>155
暗号化する

157 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 13:12:02
>>156
ありがとうございます。暗号化は一つの方法としてあると思うんですが
ファイルの暗号化自体のプログラムについてはおいて置くとして、
まず動画ファイルを読み込んで再生するために
MDXを使う場合はnew Video(path);のようにファイル名を渡さないといけません。
プラットフォームSDKにもAVIFIELOPEN等、動画再生の関数があるみたいですが、
これもファイル名を指定して読み込んだりするようです。
なので暗号化したファイルを読み込み→再生する間の部分で
どういう事をすればよいのかが想像できないというか、分かりません。
その辺の事を教えていただけないでしょうか。

158 名前:デフォルトの名無しさん :2007/03/05(月) 13:15:24
バイナリを自前で読んで暗号を解除した後、デコーダのインタフェイスに渡して再生。

159 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 13:38:47
>>158
暗号解除までのやり方はなんとなく想像がついていますが、
例えばこれが元もとAVI形式のファイルだった場合に
>デコーダのインタフェイスに渡して再生。
この辺がどうすればいいのか分かりません。
復号化したAVIのバイナリデータを渡したら再生してくれる
関数かなんかがどこかに用意されてるんでしょうか?

160 名前:デフォルトの名無しさん :2007/03/05(月) 13:42:25
DirectShow

161 名前:デフォルトの名無しさん :2007/03/05(月) 13:58:54
まずは、自前で普通のファイルを対象としたストリーミングを組んでごらん。

162 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 14:23:20
図々しくてすいませんが余裕がないんで端的に教えて欲しいんですけど、
要するに復号化したデータを渡す関数等がDirectShowにあるなら
名前を教えてください。調べてみたところどれも普通に〜.aviとか
ファイル名で指定してるようなので、どうしたらいいのかさっぱりわかりません。

163 名前:デフォルトの名無しさん :2007/03/05(月) 14:34:49
161と同じで、とりあえず組め。
そしたら『普通に〜.aviとかファイル名で指定してる』の意味がわかるから。

164 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 15:11:28
でも最終的にファイル名を指定して渡さなきゃいけないんですけど・・・
自分で暗号化したファイルを読み込んで複合化して、
それをどうやってその関数に渡したらよいのですか?

165 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 15:24:27
・・・自分で組んでみろというのが
私にそこから何を得る事を期待してそういって頂いているのかがわかりません。
例えば適当なバイナリのテキストファイルを読み込んで
暗号化したり複合化したりというのは、やろうと思えばできると思います。
でもデータはメモリの上で操作しているわけで、、、
再生関数などに渡す必要があるのは「ファイル名」でして・・・
複合化したデータをファイルに書き出したりするのはできますが、、、。
複合化したデータを一旦.aviで書き出してそれを再生関数に渡せといっているのか、、、それはないですよね?

166 名前:デフォルトの名無しさん :2007/03/05(月) 16:01:49
複合化したaviファイルのヘッダ部分からcodec情報等を取り出して、
適切なソースフィルターを作成してバイナリーストリームを流し込み再生する。

167 名前:デフォルトの名無しさん :2007/03/05(月) 16:57:04
フィルタグラフの勉強からやり直して来い

168 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 17:58:55
では普通のファイルを再生する奴を作って
そこから何かを得られる事に期待します・・・
ありがとうございました。

169 名前:デフォルトの名無しさん :2007/03/05(月) 21:09:41
こいつは何で拡張子に囚われてるんだ?春休みだからか。。。

170 名前:デフォルトの名無しさん :2007/03/05(月) 21:21:07
初心者相手に嫌みか

171 名前:名無しさん@お腹いっぱい。 :2007/03/05(月) 21:37:41
>>169
どんな形式のファイルを渡しても
勝手に解釈して読み込んで表示してくれる便利な関数があったら
ぜひ使いたいので教えてください。お願いします。

172 名前:デフォルトの名無しさん :2007/03/05(月) 22:53:22
つ [チャンクヘッダ]
全部とはいかんがな。

173 名前:155 :2007/03/06(火) 11:26:03
昨日から引き続き恐縮ですが、やはり「メモリ上のデータ」を渡す方法が分かりませんでした。
普通に「ディスク上の.aviファイル」を再生するのは
フィルタグラフを作るまでもなくRenderFileで簡単にできました。
しかし今回は暗号化されたファイルを復号化して再生することが目的です。
なので次にttp://www.firefly-vj.net/dshow/graph/make.html
を参考にしつつ自前でフィルタグラフを構築して再生してみようと思ったんですけど、
結局ここでもAddSourceFilterの部分で「ファイルからロード」してるので
「復号化したメモリ上のデータ」からフィルタを作る方法が分かりませんでした。

>バイナリーストリームを流し込み再生する。
ここ↑がどうすればよいのか分かりません。
どなたか教えてください。お願いします。

174 名前:デフォルトの名無しさん :2007/03/06(火) 12:02:59
>適切なソースフィルターを 作 成 してバイナリーストリームを流し込み再生する。

175 名前:デフォルトの名無しさん :2007/03/06(火) 12:06:15
暗号化したaviを復号するソースフィルタを作ればいいんじゃね?

176 名前:155 :2007/03/06(火) 12:19:39
えー!!そこから!!!???
そういうことですか・・・
果てしなくめんどくさそうですねこれは・・・
勉強します。ありがとうございました。

177 名前:デフォルトの名無しさん :2007/03/06(火) 13:09:05
ReadFileでもフックするか?www
そっちも面倒そうだけどな。

178 名前:155 :2007/03/06(火) 13:12:42
なんかもう既に手におえなそうな雰囲気なんで挫折気味なんですけど、
「暗号ファイル→復号→DS」以外の方法はないものですか。

179 名前:デフォルトの名無しさん :2007/03/06(火) 13:15:23
暗号化しない。

180 名前:デフォルトの名無しさん :2007/03/06(火) 13:17:03
復号化して一時ファイル作ってそれを読み込む。

181 名前:デフォルトの名無しさん :2007/03/06(火) 13:17:41
1. とりあえずファイルの先頭4バイトだけ弄くっておく。
2. 再生直前になったら先頭4バイトを元に戻す
3. DirectShow で再生する。
4. 終わったらまた4バイトを弄くっておく。

182 名前:155 :2007/03/06(火) 13:25:37
>>179-181
この辺が身の丈にあってるというかスキル的に妥当な線かもしれません。
試してみます。ありがとうございました!!

183 名前:デフォルトの名無しさん :2007/03/06(火) 13:31:09
>>182
memfile.cpp

184 名前:155 :2007/03/06(火) 14:37:16
>>183
サンプル発見。これなら頑張れば分かるかもしれません。
ありがとうございます!

185 名前:デフォルトの名無しさん :2007/03/06(火) 15:00:56
>>181
異常終了したときにavi丸出しになり、
次から再生できなくなるという罠か。

186 名前:デフォルトの名無しさん :2007/03/06(火) 15:09:23
DirectShowなんて使わないという選択肢もある。

187 名前:デフォルトの名無しさん :2007/03/06(火) 23:38:32
答えが出たな。。。

188 名前:155 :2007/03/07(水) 05:22:23
参考までに、DS使わなかったら何を使えばいいですか。
メモリ上のバイナリデータをDSより簡単に再生する方法がありますか。

189 名前:デフォルトの名無しさん :2007/03/07(水) 07:14:03
video for windows

190 名前:デフォルトの名無しさん :2007/03/08(木) 18:04:27
SetStreamSource()の第4引数でデータサイズをしてすると思うのですが
ここで指定するデータサイズの上限ってあるのでしょうか?
構造体
D3DXVECTOR4を16個メンバとして持っている構造体のデータサイズ(sizeofで)を指定すると
stream stride is too big. Check device caps.
SetStreamSource failed.
とエラーが出ます。
御願いします。

191 名前:デフォルトの名無しさん :2007/03/08(木) 18:42:59
>>190
ビデオカードによって頂点数・インデックス数に制限がある。
GetDeviceCapsでMaxVertexIndexとかMaxPrimitiveCountとかみるか、
(SDKDir)\Samples\C++\Direct3D\ConfigSystemにある
CardCaps.xlsってのを見るといろいろ書いてある。


192 名前:190 :2007/03/08(木) 18:46:00
>>191 って、書いたけど1個の頂点のサイズのことかな。
それだとMaxStreamStrideだね。 でもそんなのなったことないから
解決するかどうかは知らん。

193 名前:デフォルトの名無しさん :2007/03/08(木) 18:46:37

名前190ってしたけど間違い191ね。

194 名前:190 :2007/03/08(木) 19:00:11
>>191-193
CardCaps.xlsの私の使っているグラボを見るとMaxStreamStrideが255となってました。
D3DXVECTOR4 15個はOKなんのに16は駄目な理由が分かりました。
有り難うございますm(_ _)m

さて、どうしたらしいものか・・・

195 名前:デフォルトの名無しさん :2007/03/08(木) 19:21:14
>>194
255は無いだろ、常識的に考えて・・
と思ったけど、俺のカードは508だった
うざいなD3DCAPSは

196 名前:デフォルトの名無しさん :2007/03/08(木) 23:27:46
しかもCardCaps.xls内のグラボは頂点1つにつき最高16データしか送れないみたいだな・・・
4バイト4要素が指定できる最大サイズの型だから
16*16=256でMaxStreamStride256よりでかくても意味なくね?

197 名前:デフォルトの名無しさん :2007/03/08(木) 23:46:08
>>178
DirectShowにあるAsyncというソースフィルタのサンプルで
AVIファイルを開いて再生って出来る?
出来るならAsyncを改造するだけで出来そうだね。
ちょっとデータの一部をXORしたりして
再生できないようにするだけで目的は達成できそうだし。

独自のI/FでXORする値を指定するようにすれば
専用アプリなしのグラフエディットで再生させることも出来なくできるし。

ソースフィルタとスプリッタが一体なやつだと
この手は使えないかもしれないが
AVIはできたような気がする。

出来なかったらごめんね。

198 名前:デフォルトの名無しさん :2007/03/09(金) 00:21:26
>>196
ん?最高16ってMaxStream?
それはストリーム16本ってことだと思うけど。
1本のストリームに何頂点おくれるかは、
MaxPrimitiveCountとかIndexedならMaxVertexIndexの方だと思うけど。

199 名前:デフォルトの名無しさん :2007/03/13(火) 19:16:55
HLSLの頂点シェーダに頂点情報を引数として渡すのにSetVertexDeclarationは必要ですか?
頂点座標とかを直打ちした板ポリみたいなのに適用するときはないとダメっぽかったんですけど、
Xファイルに頂点シェーダを適用するときはやらなくてもちゃんと動いたので、
必要なときと必要でないときの違いはあまりわかりません。
Xファイルだけ特殊ってことなんでしょうか?

200 名前:デフォルトの名無しさん :2007/03/13(火) 20:46:30
>>199
必要
まあ本当なら、不要な情報なんだけれど
D3Dがよこせと言っているんだから仕方ない。

>>Xファイル
これが何を指しているかは不明だが
D3DXのヘルパオブジェのことなら
あれは内部的に呼び出してる。



201 名前:デフォルトの名無しさん :2007/03/14(水) 11:28:14
メイプルストーリーってDX9で作ってるんですか?
どう見ても2Dなんですけど

202 名前:デフォルトの名無しさん :2007/03/14(水) 11:41:36
>>201
2DだとDirectX使っちゃダメみたいな言い方だな。
何で作ってるかなんて知らないけど。

203 名前:デフォルトの名無しさん :2007/03/14(水) 11:52:27
>>201
なんでDX9で2Dゲーム作ったらダメなの?
DX10かもよwwww

204 名前:デフォルトの名無しさん :2007/03/14(水) 11:55:37
DirectDraw使ったらだめですか
DirectSoundもDirectInputもだめですか>>201

205 名前:デフォルトの名無しさん :2007/03/14(水) 19:34:58
頂点を作成するための関数IDirect3DDevice9::CreateVertexBuffer
の利用法を指定する引数Usageについての質問です。
ヘルプを読むとD3DUSAGE 定数を指定すると書いてあり、
今まで、D3DUSAGE_WRITEONLYとかを指定していたわけですが、
今日、ふとヘルプをよく読んでいたら、ヘルプの[注意]の所に、

>頂点バッファを作成するとき、CreateVertexBuffer は利用法パラメータを使って、ハードウェアとソフトウェアのどちらで頂点を処理するか決定します。

>CreateDevice が D3DCREATE_HARDWARE_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 を使う必要があります。
>CreateDevice が D3DCREATE_SOFTWARE_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使う必要があります。どちらの値でも、頂点はソフトウェアで処理されます。
>CreateDevice が D3DCREATE_MIXED_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使えます。

こんなことが書いてあり、これを読む限り、引数のUsageの所は、
0かD3DUSAGE_SOFTWAREPROCESSINGを使えと自分は解釈しました。

しかし、これじゃあ、D3DUSAGE_WRITEONLYとかは使ってはいけないことに
なってしまう・・・
DirectXの解説本とかでは、普通にD3DUSAGE_WRITEONLYとかを使っている・・

これは、どのように解釈することが正しいのでしょうか?

よろしくおねがいします。

206 名前:デフォルトの名無しさん :2007/03/14(水) 20:47:48
>>205
D3DUSAGEの項みろよ

207 名前:デフォルトの名無しさん :2007/03/14(水) 20:54:59
>>202-204
いちいち釣られるな

208 名前:デフォルトの名無しさん :2007/03/14(水) 21:57:58
>>206
D3DUSAGE定数の意味を聞いてるわけじゃないんですよ

[注意]の部分の説明は、
CreateDevice関数の引数で D3DCREATE_HARDWARE_VERTEXPROCESSING
を使ったら、CreateVertexBufferのUsageの引数に「0」を使う必要があると
書いてある。

この言い分だと、「0」以外の定数は使えないということになるけど、
実際は、サンプルとかでは「0」以外の定数をUsageに指定しています。
これはおかしくはありませんか?
[注意]が間違っているのか、サンプルが間違っているのか
どちらでしょう?

と言うことを質問しにきたんです。


209 名前:デフォルトの名無しさん :2007/03/14(水) 23:11:29
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/createvertexbuffer.asp
> ただし、使用法が必要な場合は、1 つまたは複数の D3DUSAGE 定数の組み合わせを使用する

210 名前:デフォルトの名無しさん :2007/03/14(水) 23:22:17
>>208
それは、exciteでの翻訳なので当てになりません。

211 名前:デフォルトの名無しさん :2007/03/15(木) 03:12:24
セカンドライフみたいに3Dの上にブラウザを重ねて表示させるのってどうやってるんですか?


212 名前:デフォルトの名無しさん :2007/03/15(木) 03:28:12
ブラウザ表示させればおk

213 名前:デフォルトの名無しさん :2007/03/15(木) 03:35:49
>>212
サンプルかなにかどっかにないもんでしょうか?

214 名前:デフォルトの名無しさん :2007/03/15(木) 23:47:50
DirextXの初期化などのソースコードは皆さんはどうしていますか?
何箇所かサイトを巡ったところ細かいところで違うような気がしたのですが
初期化などはその都度必要な事だけを書いているのでしょうか?
または、MSのほうで初期化ライブラリなどがあるのでしょうか?

215 名前:デフォルトの名無しさん :2007/03/16(金) 00:00:59
必用なことを書かないでどうする?

216 名前:デフォルトの名無しさん :2007/03/16(金) 00:23:55
初期化なんて一本アプリを作るうちの0.001%くらいのもんだろう。
くだらんこと悩まずにさっさと書いちまえ。


217 名前:デフォルトの名無しさん :2007/03/16(金) 00:27:18
初期化は大切だろ…
自分の環境だけで動かすんだったら0.001%かもしれんが

218 名前:デフォルトの名無しさん :2007/03/16(金) 01:12:01
初期化を既存のコードで代用しようとするな!ぼげぇ!

219 名前:デフォルトの名無しさん :2007/03/16(金) 03:05:19
>>217
いやいや、自分が満足できる初期化コードを1回書いたら
後から何かすることなんてそう頻繁にはないってことだろ

220 名前:デフォルトの名無しさん :2007/03/16(金) 05:04:13
毎回シコシコ書きなおしてるかと。
以前のを代用できるところは代用するよな。
ゲームなら、UIとかも代用できる
ウェイ!

221 名前:デフォルトの名無しさん :2007/03/18(日) 01:11:40
HLSLで
たとえばalphablend=trueが記述されていて、ほとんどはそれを用いるけれど稀にfalseにしたいとか
lightingのon/offの違うのを見たいとか
いちいち別バージョンを作らなくてはならないんでしょうか。
組み合わせが爆発しないんでしょうか?

222 名前:デフォルトの名無しさん :2007/03/18(日) 01:57:59
int g_fillMode = 2; // D3DFILL_WIREFRAME

technique T { pass P { fillMode = g_fillMode;}}
------------------------------------------
pEffect->SetInt( "g_fillMode", D3DFILL_SOLID);


223 名前:デフォルトの名無しさん :2007/03/18(日) 02:43:25
こことここ↓
http://pc11.2ch.net/test/read.cgi/tech/1173535400/
ってどうちがうんだ?

あ、向こうは超初心者か。。

224 名前:デフォルトの名無しさん :2007/03/20(火) 02:40:56
2Dの描画部分で自分のPCでは、ちゃんと表示されるのですが、
ほかのひとPCでは、Clear()部分しか表示されません。

2D表示方法は板ポリゴンに、テクスチャをはっています。
SetTexture,SetFVF,DrawPrimitiveUPは成功しています。
開発環境はWinXPSP2 VC++2005とDirectX2006decです。

225 名前:デフォルトの名無しさん :2007/03/20(火) 03:03:55
>>224
ライティングをOFFにしてないとか?

226 名前:224 :2007/03/20(火) 03:12:45
ライティングOFFにしましたが、やはり表示されませんでした。

227 名前:224 :2007/03/20(火) 14:00:28
解決しました。
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat= D3DFMT_D16;

上のコードを削除すればすべての環境で動くようになりました。
参考までに自分のビデオカードは、RADEON X700です。
ClearではZバッファを使用していないので、不具合が生じたと思います

228 名前:デフォルトの名無しさん :2007/03/20(火) 14:21:39
>ClearではZバッファを使用していないので、不具合が生じたと思います

なんていうか EnableAutoDepthStencil = TRUE なら
Zバッファはちゃんとクリアしないといけないでしょ。

229 名前:デフォルトの名無しさん :2007/03/20(火) 17:04:55
すいません、テクスチャオブジェクトを描画クラスのデストラクタ内で
開放するように記述すると、プログラム終了時にVC++が
デバッグ欄にメモリエラー報告しまくるんですが、
テクスチャの開放のタイミングはいつが適切なんでしょうか?
教えてください。

開発環境はVC++2005pro、DirectX9です。

D3DXCreateTexture()関数呼び出し直後や描画毎などに
開放した場合、メモリエラーは発生しません。

230 名前:デフォルトの名無しさん :2007/03/20(火) 17:08:01
D3Dデバイス解放より前

231 名前:デフォルトの名無しさん :2007/03/20(火) 17:08:12
また、デストラクタ内では頂点バッファの開放も
行っていますが、こちらは問題なしです。

232 名前:229 :2007/03/20(火) 18:07:32
解決しました。
ありがとうございます。

233 名前:デフォルトの名無しさん :2007/03/28(水) 17:06:28
Direct3D(DirectX9.0)について質問です。
テクスチャーを2600*2600などという大きいものにしたところ、どうやらビデオカードの限界だったらしく2048*2048に大きさが丸め込まれてしまいました。

それは構わないのですが、丸めこむときの挙動が
「はみでた部分を削除」なようなのです。
これは仕様に基づいた動作(他のビデオカードで丸め込まれた時も同じ挙動をする)なのでしょうか?

なんとなくイメージで「テクスチャーサイズ限界を超えた場合、限界サイズに収まるように勝手に画像が勝手に縮小される」のではないかと思っていたのですが…。(このイメージに根拠は無いです)

234 名前:デフォルトの名無しさん :2007/03/28(水) 17:19:27
>>233
テクスチャを2は累乗で表される幅と高さにしないとダメ
4096*4096でテクスチャを用意し、
2600*2600の部分だけ表示させればよい。

235 名前:デフォルトの名無しさん :2007/03/28(水) 17:25:25
>>234
お返事ありがとうございます。
確かに2の累乗しかサポートしていないボードがほとんどのようですね。

ただ、どうやら私のボードは2048*2048が限界らしいのです。

例えば800*600のテクスチャーは、読み込んだときに1024*1024になることを確認済みです。
描画するとき、tu=(1.0f * nX / 800)ではなく tu=(1.0f * nX / 1024)とすることで思ったとおりの描画ができていました。

ですが今回2600*2600を読ませたときは、期待通り4096*4096にしてくれなかったのです。
「それならきっと、(多少テクスチャが汚くなるけど)縮小して収めてくれてるだろう」と思ったら、切り捨てられていたのです。個人的にはちょっとびっくりでした。

236 名前:デフォルトの名無しさん :2007/03/28(水) 17:27:24
4096*4096に対応しているカードは知らないな
普通に考えてそんなにいらないしな

237 名前:デフォルトの名無しさん :2007/03/28(水) 17:33:56
自己解決できました。
報告させていただきます。

D3DXCreateTextureFromFileInMemoryEx

Filter引数に
D3DX_FILTER_NONE を指定していたからでした。
D3DX_FILTER_LINEAR を指定することで想定どおりとなりました。

ただ、限界を超えていないときにも(2の累乗以外の画像を読み込むと)、確保したサイズに強制的にあわせるようです。
つまり、無駄に「一旦引き伸ばしてテクスチャとして持ち、その後縮小して表示」することになるのでアンチエイリアシングが行なわれてしまうようです。
ドット絵のようなものは、素直に2の累乗にしたり、小さめの画像D3DX_FILTER_NONE読み込みしたほうが良いと思われます。


238 名前:デフォルトの名無しさん :2007/03/28(水) 19:09:16
基本やね

239 名前:デフォルトの名無しさん :2007/03/28(水) 20:19:23
>>237
それはD3DXのヘルパ関数の挙動だろ、D3Dやボードの挙動じゃない。
また2のn乗の制限や最大解像度は、全てCAPSから得られるので
そっちを根拠とすべき。

240 名前:デフォルトの名無しさん :2007/04/03(火) 21:12:27
質問。
D3DXCreateTextureFromFileExでD3DX_FILTER_NONEを指定して画像を読み込みました。
その後
m_pD3DDEV->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);
を設定した上で画像を矩形ポリゴンに貼り付けて表示したところ、なんだか不自然な挙動をします。

等倍の時はいいのですが、縮小されるように矩形ポリゴンの大きさを小さくしていくと、
テクスチャが黒ずんだり、さらに小さくするとテクスチャが透けたり、
D3DXCreateTextureFromFileExでD3DX_FILTER_LINEARを指定してやると、綺麗に縮小表示されます。

テクスチャの読み込みと、SetSamplerStateでの設定は、両方D3DX_FILTER_LINEARにしてやらないといけないのでしょうか?
両方D3DX_FILTER_NONEにしても想定通り縮小表示されたのですが、アンチエイリアシングがかからないためかなり荒かったです。 

241 名前:デフォルトの名無しさん :2007/04/03(火) 23:21:49
>>240
どうでもいいが、SetSamplerStateで使うのはD3DX_FILTER_LINEARじゃなくてD3DTEXF_LINEARな

242 名前:デフォルトの名無しさん :2007/04/03(火) 23:34:34
>>240
D3DXCreateTextureFromFileEx のフィルタってFilterとMipFilterの2つあって、
Filter は 画像->テクスチャでサイズが違う時とかに掛けるフィルタだから
同サイズならNONEでもいけるかもしれないけど、
MipFilter は NONEだとまともなミップマップにならないわね。

243 名前:デフォルトの名無しさん :2007/04/04(水) 04:00:30
App.pDirect3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, App.hWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dparamet,&App.pDevice );
App.pDirect3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, App.hWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &App.PresentParameter, &App.pDevice );

D3DXCreateFont( dev, 32, 16, FW_NORMAL, 0, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_SCRIPT, TEXT("MS Pゴシック"), &font)

DirectX9.0cで、上記のCreateFontを実行すると、上のCreateDeviceでデバイス生成済みの場合は正常にフォントが作成できますが(ただし動作が遅すぎる)、
下のCreateDeviceを使った場合に、フォントの作成に失敗します

テスト環境はWindowsXP、グラフィックカードはIntel 82815(オンボード)、ドライバは最新版です
グラフィックカードは、DirectX9.0cに完全には対応してませんが、それが原因でしょうか。フォント作成で失敗するのが不可解です

オンボードなど多くの環境でできる、2D表示のRTSのネットゲーム(百人以上のユーザを想定)を作ってますが、
DirectXのバージョンを下げるなら、どのバージョンが適してるでしょうか

244 名前:243 :2007/04/04(水) 04:05:09
CreateDeviceの後ろから2つ目の引数が違ってますが、同じにしても同様でした

245 名前:デフォルトの名無しさん :2007/04/04(水) 11:22:43
>>243
関係ないと思うけど
×"MS Pゴシック"
○"MS Pゴシック"ね

246 名前:デフォルトの名無しさん :2007/04/08(日) 22:32:30
スプライトの反転表示ってどうやるんですか?

247 名前:デフォルトの名無しさん :2007/04/08(日) 23:18:40
反転といっても、
△→▽
□→■
色々あるんだがな。
しかもスプライトという用語自体がいったい何を指すのか不明だし。

248 名前:デフォルトの名無しさん :2007/04/08(日) 23:28:08
ヨ→E
みたいな反転。



249 名前:デフォルトの名無しさん :2007/04/08(日) 23:50:55
反転はメインヒロインが非処女と判明したときの演出に使います


250 名前:デフォルトの名無しさん :2007/04/08(日) 23:58:05
>>248
UVの開始と終了の値を逆にする


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.