【C++】 DirectX初心者質問スレ Part12 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ 【C++】 DirectX初心者質問スレ Part11 【C】
http://pc8.2ch.net/test/read.cgi/tech/1159456184/
We wish you a Merry Christmas.
4 :
デフォルトの名無しさん:2006/12/28(木) 21:08:38
Alt+Enterでフルスクリーンにできるゲーム作ってるんだが、
一回目起動して普通の状態からAlt+Enterでフルスクリーンにしようとすると
スプライトのOnLostDeviceので例外が発生する。
そのまま描画させると一応表示はされるんだがたまに表示がおかしくなる。
二回目は例外も発生せずに普通に表示される。
D3DXFontを使ってからおかしくなった。
D3DXFontもちゃんとOnLostDeviceしてる。
OnResetDeviceも両方やってる。
原因に心当たりのある方いませんか?
環境を忘れた
スマソ
Windows Vista RC1(XP Proでやったときも起こった)
Visual C++ 2005 Academic
NVIDIA GeForce 6600
DirectX 9.0 2004 Dec
D3DXFont/D3DXSprite関連の解決方→そんなの使うな。自分で作れ。
>>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つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□偽装派遣先の社員の意見にはたとえ間違っていても反対しない
□偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□偽装派遣先社員より自分の生涯収入が低いのは当然だ
□偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
全問正解したのでなにかください
つ VisualStudio .NET 2002
>>11 早く自分の会社へ帰れ!!
でないと人間腐るぞ!
え?えっ…?
何これ?デジャビュ?
>>8-10 俺も昔そういうのに悩まされて、Xファイルを使うのやめて自作フォーマットにした。
Xファイルの仕様とかインタフェース覚えるよりフォーマット自作した方が
大分早い気がする俺ガイル
ツールどーすんの
こんばんは、探しても探しても見つからないのでこちらで質問させて頂きます。
私は最近、DirectX8でゲームを作りたいと思い
HPを参考に勉強しているのですが、作り始めてすぐに壁にぶち当たってしまいました。
それは、d3dx8.hというファイルがDirectX9 SDKに入っていないのです。
参考にしているHPでは上記のファイルがインクルードされていて、どうしてもうまくいきません。
私のグラフィックボードはGeForceTi4800なので、DirectX8でどうしても作りたいのです。
どなたかd3dx8.hを手に入れる方法、またはd3dx8.hが無くても代わりにこれをインクルードすればいい、などの
解決法を教えてもらえませんか?お願いします。
失礼しました。
>>19 それはさ。DirectX8なんかで作ろうと思ったのが運の尽きってことさw
あと、なんか勘違いしてない?
特にこの一文
>私のグラフィックボードはGeForceTi4800なので、DirectX8でどうしても作りたいのです。
「GeForceTi4800なので、DirectX8でどうしても作りたい」とか言ってるけど全く意味不明。
どうしてGeForceTi4800だとDirectX8で作らないといけないの?
あらかじめいっとくけど関係ないんだけど。
素直にDirectX9で作ればOKと言っておく。
このままDirectX8で作りたいっていうならこんな程度のことも自分で解決できないようじゃ。
無くなったヘッダーやらライブラリやらヘルプやらサンプルやら自分でかき集めてこれないだろ?
素直にやめとけと思う。
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
ネットゲームのチートスレとかの方が詳しい人がいるんじゃないかな
質問させていただきます。
1フレームの間に1つの同じ三角ポリゴンを同じ座標に500回描画した時
(DrawIndexedPrimitiveを1フレームで500回呼んだ)
と
500ポリゴンのメッシュを描画した時を比べてみたら、
同じ500ポリゴンを描画しているはずなのに前者はフレームレートが
極端に下がってしまいました。
同じ座標に同じ三角形を重複して描画してしまうと
遅くなってしまうものなんでしょうか?
考えられる原因を教えてもらえないでしょうか?
よろしくお願いします。
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と切り替えても
遅いのは変わらない。
いろいろ試してみましたが、どうも原因の検討がつきません。
どなたか原因をご存知の方はいらっしゃらないでしょうか?
よろしくおねがいします。
1)画用紙に小さい四角を500回描く
2)画用紙いっぱいの四角を500回描く
絵の具をたくさん消費するのはどっち?
>>27 なるほど。ポリゴンの塗りつぶし処理も結構手間が
かかっていると言うことですね。
つまり、ポリゴン数だけでなく、
画面に表示されるポリゴンの大きさによっても、
実行スピードが変わると言う認識で良いと言うことですよね?
フルスクリーン時のデバッグって、皆さんどうやってます?
デバッガが使えなくて激しくダルイのですが。
マルチスクリーン
>>22 亀なうえに解決法は書けませんが、おそらくDirectInputで
マウス入力を取得するときに実マウスカーソルを無効にする方法と
して、そのアプリがマウス座標を画面外に飛ばしてるんじゃないでしょうか?
自宅では電気代が怖いよね
>>30,32
機材の必要の無い方法はないもんですか?
8以降はフルスクリーンかウィンドウかなんてあまり気にする必要ないから、
俺はデバッグ時は基本的にウィンドウモードにしてるよ。
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で何か設定すれば直るのでしょうか。
>>38 UVの補正をTweakツールでできる場合があるが、それはユーザー任せ。
Windowsでは基本的に公式の仕様に準拠して作ること。
あと、たった2個の比較で判断しないこと。もっと多く調べれば偏りが出るものだ。
完璧主義にならず、特定の機種だけの微妙な不具合は切り捨てる勇気を持て。
>>39 レスありがとうございます。
MSゴシック12で「0123456789」と数値を作って表示させると
文字幅が1ピクセルなので認識できないほど崩れてしまいます。
表現上太くはしたくないとか表示させたい画像細かい場合、
微妙というレベルを超えて表示されますがやはり妥協点なのでしょうか。
そのクラスのビデオカードだと、精度が9bitの可能性が高いから
テクスチャを256*256に落としてみるとか。
>>38 どんなコードなの
うちは古いnVIDIA(geforce4)でテストしてるけどその辺の問題ないよ
43 :
デフォルトの名無しさん:2007/01/21(日) 14:49:10
>>43 そんな状況ならPC買った方がトータルでいい希ガス
DirectXで3DやるならノートPCとかデスクトップで箱が小さくてグラボが交換できないのは買っちゃ駄目。
>>44 レスありがとうございました
できれば私もそうしたいのですが事情があってできないのですorz
なんとかしてWindows98でDirectX SDKを使うことはできないでしょうか?
自分でも調べてみましたがよくわからないんです
古めのSDKが入ってる書籍でも探してみたら?
古本屋でC Magazineのゲーム開発か3Dの特集やってる号をさがすとか
DirectX SDKをダウンロードする際、過去のバージョンがかなり掲載されていますが、
一番最新のを導入しておけば問題はないのでしょうか?
例えばcyberlibrary等のラッパーはFebruary 2005のバージョンを落とすように書かれてありますが
最新では不都合あるとかあるんでしょうか?
ラッパライブラリに疑問があるならマニュアルやFAQを調べて
解らなければ作者やMLで聞いてみればいいんじゃないの。
ライブラリを一番理解しているのは、大抵は開発者なんだし。
ある点を原点を中心に回転させた位置に持っていくにはどうすればいいでしょう?
今は
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);
こんなことをやってるんですが…
>>51 new_position = old_position * mat_rotyだけでいい。
そんな技が!ありがとうございました
D3DXVec3TransformCoord(&new_position, &old_position, &mat_roty)
よく市販のゲームで「DirectX9.0c以降」などと表記されていますが
これはSDKのどのバージョンでビルドされているのでしょうか?
>>55 9.0cの何れかのバージョン
DLLを見ると細かいバージョンわかるぞよ
57 :
デフォルトの名無しさん:2007/01/31(水) 23:44:47
DirectShowってなくなったんですか?
Platform SDKに移管
60 :
デフォルトの名無しさん:2007/02/01(木) 10:19:17
HIDの制御に参考になるページか書籍でよいものありませんか?
61 :
デフォルトの名無しさん:2007/02/01(木) 17:03:16
他のアプリケーションがオーバーレイを使っているなどして
オーバーレイで表示できない場合があるじゃないですか?
2枚目のオーバーレイは真っ黒表示になってしまったり。。
オーバーレイはもうこれ以上使えませんよ、みたいな
事を知る方法ありませんか?
ちなみにdwCurrVisibleOverlaysフラグは常にゼロみたいでした。
(このフラグっていったいなんだろ。。)
PlatformSDK入れたら
Microsoft Platform SDK for Windows 2003 Server SP1
とかいうのがインストールされた。
俺のOSはWinXPSP2だ。
XPでDirectShowを実現するのは無理のようだ。
はいはいアホスアホス
64 :
PPP:2007/02/01(木) 18:00:46
質問なんですが、MeshObjectをCreateする処理で最大頂点数が65534個
を超えるものに対して、オプションでオプションにD3DXMESH_32BITを
つければいいと書いてありましたが、PCがフリーズします。
何か解決策があればご教授お願いします。
5とか6とか7とかの時代の知識で止まってて、最近勉強を再開したのですが一つお聞かせください。
DirectXのインターフェイスなのですが、dllの静的リンクを避ける場合等にはCoCreateInstanceや
関連インターフェイスからのQueryInterfaceで作成することができる(できていた)と理解しているのですが、
DX9の場合、IDirect3D9の作成にはDirect3DCreate9を使うしかないということでよいのでしょうか?
そしてdll静的リンクをしたくない場合はLoadLibraryを使えということなのでしょうか?
(そもそもLoadLibaryでできるんでしょうか。d3dを静的リンクした別dllを用意して(ryとかする必要あり?)
最初からDirectX9入ってない環境なんてお呼びじゃないんだぜ、と決め打ちするのが良いのでしょうけれど…
>>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相当の)代替機能を考えること自体が
あまり現実的ではないようですし、この辺は昔ほど神経質にならずともよいようですね(目的にもよるだろうけれど)。
はじめまして。皆様のお知恵を拝借できませんでしょうか。
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 を参考にさせていただいております。
D3DXのDLLのバージョンが違って動作しない問題について質問です
・D3DXがstaticなライブラリで提供されていたころのDirectXSDKを使えば
ランタイムライブラリを再頒布しなくても大丈夫なのでしょうか?
・上の考えがあってる場合、どのバージョンのSDKを使うのが適当でしょうか?
・一般に売られているPCゲームではこの問題にどのように対処しているのでしょう?
よろしくお願いします。。。
exeと同じところかに必要なDLLを置いておく。(DLLを別の場所にする方法もあるけど)
一般に売られているPCゲームではランタイムライブラリも再頒布しますが何か?
>>71 配布するときにそれだと問題にならないんでしょうか?
調べてみるとライセンス的にグレーだという話があるみたいですが
>>72 そうだったんですか・・・!
実際に私のPCで調べてみるとd3dx9_24〜30.dllまでが勝手に入っていました
SDKはApril2006しか入れてないのでゲームのインストーラが勝手にぶち込んだみたいですね
>>73 >調べてみるとライセンス的にグレーだという話があるみたいですが
どこで調べたのか
>>75 そりゃDLL単品はダメだけど再配布パッケージも添えれば何の問題もない
まあ、配布する手段によっては再頒布を一緒に入れるのはキツイかもしれんが
そういう場合はすっぱり諦めてインストールを促すか、Dec2004までで我慢しろってことだな
つまり、CDやDVDの中にランタイムを入れておけば
自分のゲームのexeのとなりにもD3DXのDLLを置いておけるってこと?
>>78 よくわからんけどそういう裏技にはあんまりやさしくないと思う。
本質をわざとはずしたようなことやると後々うるさいから辞めた方がいいと思う。
ランタイムインストーラーを自動で勝手に起動するようにしてうながすほうがはるかに楽だぞ。多分。
directxsetupというのを使うと幸せになれるみたいだ
幸せになれませんでした
質問します
マイクロソフトからDirectX9をダウンロードしても
再起動の表示が出ませんどうすればいいですか?
自分がアホであることを認識する
>>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をクリアしないと駄目だ。
コントロールパネルの部分でテストしてみたら?
90 :
デフォルトの名無しさん:2007/02/11(日) 12:29:59
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です。
>>93 {
pin_ptr<DWORD> p = &dwNumMaterials;
Func(p);
}
多分こうかしら。というかC++/CLIって今どうなのかしらね。
96 :
93:2007/02/11(日) 15:58:29
>>95 ありがとうございます。
でも同じエラーがでました。。。
>>95 スタックに自動変数積んで、それのアドレスを渡してからメンバフィールドにコピー。
たぶんマネージ型のメンバとして持つとGC回収(もしくはメモリ移動)の可能性があるから
そのままアドレスが渡せないんじゃないのかな。
俺もよく忘れてそのエラー頻繁に見るよ……。
それとC++/CLIの質問はマネージ関連のスレでした方が良いかと。
見た目が似せてあるだけで全然違う言語だこりゃ。
98 :
97:2007/02/11(日) 16:42:24
99 :
93:2007/02/11(日) 16:58:38
>>97 なるほど、うまくいきました!(多分)
とりあえずここのエラーは消えました。
ありがとうございました。
描画速度についての質問なんですが、
インデックスバッファと頂点バッファを用いて描画するのと、
頂点バッファのみ(予めインデックスデータを参照し配列を作っておく)では
どちらが速いですか?
>>100 やってみりゃいいじゃん。
俺の予想としてはあんまりかわらないんじゃないかと・・・
最近のGPUではキャッシュの都合上前者が有利とよく言われている。その程度。
103 :
68:2007/02/12(月) 15:27:17
>>69 お礼を戦う〜に誤爆してしまいましたが、改めてお礼と報告です。
2003/Summerを使用し、VC6でビルドおよび動作させることができました。
ありがとうございました。
VC2003/2005にアップはだんだんと進めていかないと行けないようですが、なかなか難しいものですね。
すみません。DirectX(Summer 2004)ていうのをみたの
ですが、他のはDecember Aprilとかなのに
なぜこれだけSummerなのですか?
DirectInputのSetCooperativeLevelがDISCL_BACKGROUNDで動いてるロガーがあるのですけど、
一時的にそっちからマウスやキーの情報を取得できないようにする方法ってないでしょうか?
ネットワークカメラの画像取り込みを、これから勉強したいと思っております。
C++も初級レベルが、よろしくお願いします。
ttp://www.katolab.ee.kagu.sut.ac.jp/programing/capture.htm ・上記のリンクの図にUSBカメラから矢印が出てるデバイスフィルタ(IBaseFilter)
がありますが、このあたりをネットワークカメラ用になにかすると、
ほとんどプログラム変えないでもネットワークカメラの
画像も取り込めるのでしょうか?
USBカメラに関しては、いくつか解説してあるページ見つかりましたが、
ネットワークカメラの画像を取り込むには、なにから勉強すれば
良いのかという段階なんです。
・ネットワークカメラ用のサンプルプログラムの乗ってる本や
ページなどありますでしょうか。
スレ違いでしたら、誘導していただけますと助かります。
よろしくお願いします。
>>107 スレ教えていただきありがとうございます。
ネットワークカメラもDirectShowを使うんですね。
モーショントラックが二つ存在するxファイルの再生なんですが、
if(キーが傾いている)
トラック0をFALSE
トラック1をTRUE
else if(キーが傾いていないアイドル状態)
トラック0をTRUE
トラック1をFALSE
でトラックの切り替えを行おうとしたのですが、
これではif文にくるたびに、切り替えが行われモーションが再生されているようには見えないです。
アイドル時と非アイドル時を判定し、トラックを切り替えたいのですが、
どのように書けば良いでしょうか?宜しくお願いします。
DirectShowのプログラムを始めたいと思っています。
今までC/C++では、コンパイルにBorlandのC++Compiler 5.5を利用していたのですが、
DirectShowのプログラムもこれでコンパイルできるでしょうか?
それともVCでないとダメでしょうか?
>>111 試しにやってみようという気は0bitもないのでつか?
113 :
111:2007/02/27(火) 17:43:29
>>112 できました。
ありがとうございました。
DirectShowのプログラムをボーランドのC++コンパイラでコンパイルしようとしたところ、
〜>bcc32 test.cpp
〜
Fatal: オプションが必要 : LD:\Program Files\Microsoft Platform SDK\Lib
というエラーが出ました。
どんなオプションが必要なのでしょうか?
115 :
114:2007/02/28(水) 11:00:50
自己解決しました。
Visual C++ 2005 Express EditionでDirectXを扱えますか?
ます
118 :
116:2007/02/28(水) 12:52:14
じゃあインストールしてみます。
Cをわずかに理解しているだけでBMSプレーヤーが作れるだろうか・・・
DirectX使うなら、自分がCしか使わないとしても
拡張子はcppにして、C++としてコンパイルしないと、面倒だからね。
120 :
デフォルトの名無しさん:2007/03/01(木) 01:50:46
Zバッファを使いたいのですが
pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
以外に設定するものはあるのでしょうか。
Xファイル2つを表示させると後のものが必ず上に表示されます(同一のオブジェクトでも後に描画されたパーツが上に)。
何か設定を逃していると思うのですが、もしかすると別の問題なのでしょうか。
1.Zバッファを作成し忘れてる。
→初期化で自動的に作る(D3DPRESENT_PARAMETERS)
→明示的に作って設定(pDevice->CreateDepthStencilSurface()とpDevice->SetDepthStencilSurface())
2.描画対象のZ値が完全に一致してしまっている。
→データを見直せ
3.どっかでエラー吐いたりハードが対応してなかったり
→エラーチェック。このPCでは利用できません
>>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 うしろの);がないとか、pDev->がないとかそゆこと?
それは実際のプログラムには書いてあります。
127 :
デフォルトの名無しさん:2007/03/01(木) 17:06:24
HLSLやろうと思ってネットでサンプル落としてコンパイルかけたんですが、
PassメソッドはID3DXEffectインターフェースのメンバではない、というエラーが出ます。
これが解決できません。
VS2002で作られたサンプルをVS2005で動かそうとしているからなのか、DirectXのバージョンの問題なのか、
どちらかかなあとは思うんですが。わからないです。
129 :
127:2007/03/01(木) 17:44:39
これどうすればいいんですか?
>>123 ニアクリップとファークリップは、比率が重要。
zf/znが小さいほどZバッファの精度がよくなる。
基本はニアクリップをできるだけ遠く、ファークリップをできるだけ近くする。
zf/znが1000くらいならあまり問題は起こらないかな。
Zバッファは手前は物凄く精度が高く、遠くになるほど劇的に精度が落ちる性質がある。
znやzfの調節では対応しきれないようなら、Wバッファを使ってみるといい。
それと、D3DRS_ZENABLEのパラメータはTRUE/FALSEじゃなくて、D3DZBUFFERTYPEだよ。
数値的にはD3DZB_FALSE = FALSE = 0, D3DZB_TRUE = TRUE = 1で一緒だが。
>>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はインデックスバッファの開始位置のオフセット。
>>124 表示がおかしくなった原因はPrimitiveCountじゃないの?
これは(height - 1) * 2だと思うが。(そもそも5*5の方もおかしい)
ついでに言うと、普通はこういうやり方じゃなくて、同じテクスチャを
使用しているマスだけを選んで動的にVertexBufferを作って行くようにする。
133 :
127:2007/03/01(木) 18:50:04
自己解決しました。
BeginPass,EndPassを使えばよかったみたいです。
>>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理解してない)のかもしれない。
D3DXIntersect の具体的な使い方について、書かれている書籍ってないですか?
衝突判定の類は、D3DXに頼らず自分でロジックを組むところから始めた方がいい。
理解が中途半端だと結局あらゆるところで躓く。
>>136 いやそれでは答えになってないしょう?
こっちはいろいろ考えて D3DXIntersect に落ち着いたのに、それを否定される筋合いはありません。
MSDNのヘルプでも見て引数を知って、後は実際に試してみればいいと思うんだが…
基本的に対象とするメッシュと視線レイを与えて引数で結果を得るだけのものだし。
具体的な使い方も分からずに選択するのがいろいろ考えた結果なのか?
>>138 具体的な使い方が書かれてるのが知りたいんです。
解説に動くプログラムが添えてあって、すぐ試せるようなのが理想です。
自分で最初から考えるよりすでにあるものをコピペしたほうが、確実だし時間もかからないですよね。
労力を金で買いたいと言ってるのに、「自分でやれ」はおかしいでしょう?
プログラマを雇った方が確実だな
技術は金では買えないから、技術者を雇うというのが正解。
頭が悪いのはどうにもならん。
おまえら本当に頭が極端だなw
じゃ本と同じ値段で雇えるプログラマ教えろ、だろ次は
>>140-141 自分がプログラマだからここに聞きに来てるんですけど。それに丸投げしようとは思ってません。
正直言いますと3Dゲームを作るのは初めてですが、仕事なので仕上げないといけないんです。
まだマスターアップまで3週間あるとはいえ、なるべくなら短い時間で作りたいんですよ。
>>142 まさに正論ですね。
>>143 そうですか。ゲ製作で聞いたほうがよさそうですね。
>>144を雇っている会社は、そのぶん有能な技術者を雇う人件費を損失している。
今後も無能なのに寄生して、会社に損害を与え続けるんだろうな。
ゲ製作技術板にまで迷惑をかける気か。最低の人間だ。
幾ら短期間で仕上げるのが目的とはいえ、この程度の仕様の関数に具体的なソースもクソもないだろ
D3DXのアニメーション周りとか、内部的にややこしい(又はめんどくさい)処理が必要なものなら
まだ使いまわしたいってのは分かるし、実際に有用かもしれないが…
仮にD3DXIntersectの完全なサンプルソースがあったとしても、それを使いまわせるような人なら
そもそも関数の仕様を見た段階で何も考えずに実装できそうなものだが。その程度の処理しかしてないんだし。
じゃあ質問の仕方をかえます。D3DXIntersect をどう使えばいいのか教えて下さい。
与える引数は3つですよね?
pMesh 地形マップのメッシュ BattleMap
pRayPos カメラの座標 D3DXVECTOR3(CamX,CamY,CamZ)
pRayDir カメラの向き D3DXVECTOR3(0,0,1)
関数は正常に動いてるのに、なぜか思ったような結果になりません。
目の前に山があるのに、カメラが前進すると山の中に入ってしまいます。
>>136 やはり近道探すより自分であれこれ悩みまくった方が賢明ですね。
とりあえず、D3DXIntersect使って接触してるかなどは判定できるようになれたので
あとはトロトロやってみます。。
150 :
デフォルトの名無しさん:2007/03/04(日) 17:27:02
シェーダーなんですが、REFだとものすごく重いんだけど、
思ったとおりの描画をしてくれるのに、HALだとただの
フォンシェーディングっぽくなってしまうのは何ででしょう?
GPUはRADEONX1950とGeForce6800で確認しましたが同じでした。
REFとHALって同じコードでも違う演算するんですか?
すべての機能が使える仮想環境と一部使えない実環境だからでは?
152 :
150:2007/03/04(日) 17:36:08
>>151 早速のレスありがとうございます。
なるほど。
ということは、シェーダーでGPUのサポートしていない命令を使ってしまっているということですかね?
>>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ファイルを丸出しにしないといけません。
それはいやなので、どうにかその生ファイルが見えない形にして
配布したいのですが、そういう場合はどういった方法がありますか?
157 :
名無しさん@お腹いっぱい。:2007/03/05(月) 13:12:02
>>156 ありがとうございます。暗号化は一つの方法としてあると思うんですが
ファイルの暗号化自体のプログラムについてはおいて置くとして、
まず動画ファイルを読み込んで再生するために
MDXを使う場合はnew Video(path);のようにファイル名を渡さないといけません。
プラットフォームSDKにもAVIFIELOPEN等、動画再生の関数があるみたいですが、
これもファイル名を指定して読み込んだりするようです。
なので暗号化したファイルを読み込み→再生する間の部分で
どういう事をすればよいのかが想像できないというか、分かりません。
その辺の事を教えていただけないでしょうか。
バイナリを自前で読んで暗号を解除した後、デコーダのインタフェイスに渡して再生。
159 :
名無しさん@お腹いっぱい。:2007/03/05(月) 13:38:47
>>158 暗号解除までのやり方はなんとなく想像がついていますが、
例えばこれが元もとAVI形式のファイルだった場合に
>デコーダのインタフェイスに渡して再生。
この辺がどうすればいいのか分かりません。
復号化したAVIのバイナリデータを渡したら再生してくれる
関数かなんかがどこかに用意されてるんでしょうか?
DirectShow
まずは、自前で普通のファイルを対象としたストリーミングを組んでごらん。
162 :
名無しさん@お腹いっぱい。:2007/03/05(月) 14:23:20
図々しくてすいませんが余裕がないんで端的に教えて欲しいんですけど、
要するに復号化したデータを渡す関数等がDirectShowにあるなら
名前を教えてください。調べてみたところどれも普通に〜.aviとか
ファイル名で指定してるようなので、どうしたらいいのかさっぱりわかりません。
161と同じで、とりあえず組め。
そしたら『普通に〜.aviとかファイル名で指定してる』の意味がわかるから。
164 :
名無しさん@お腹いっぱい。:2007/03/05(月) 15:11:28
でも最終的にファイル名を指定して渡さなきゃいけないんですけど・・・
自分で暗号化したファイルを読み込んで複合化して、
それをどうやってその関数に渡したらよいのですか?
165 :
名無しさん@お腹いっぱい。:2007/03/05(月) 15:24:27
・・・自分で組んでみろというのが
私にそこから何を得る事を期待してそういって頂いているのかがわかりません。
例えば適当なバイナリのテキストファイルを読み込んで
暗号化したり複合化したりというのは、やろうと思えばできると思います。
でもデータはメモリの上で操作しているわけで、、、
再生関数などに渡す必要があるのは「ファイル名」でして・・・
複合化したデータをファイルに書き出したりするのはできますが、、、。
複合化したデータを一旦.aviで書き出してそれを再生関数に渡せといっているのか、、、それはないですよね?
複合化したaviファイルのヘッダ部分からcodec情報等を取り出して、
適切なソースフィルターを作成してバイナリーストリームを流し込み再生する。
フィルタグラフの勉強からやり直して来い
では普通のファイルを再生する奴を作って
そこから何かを得られる事に期待します・・・
ありがとうございました。
こいつは何で拡張子に囚われてるんだ?春休みだからか。。。
初心者相手に嫌みか
>>169 どんな形式のファイルを渡しても
勝手に解釈して読み込んで表示してくれる便利な関数があったら
ぜひ使いたいので教えてください。お願いします。
つ [チャンクヘッダ]
全部とはいかんがな。
173 :
155:2007/03/06(火) 11:26:03
昨日から引き続き恐縮ですが、やはり「メモリ上のデータ」を渡す方法が分かりませんでした。
普通に「ディスク上の.aviファイル」を再生するのは
フィルタグラフを作るまでもなくRenderFileで簡単にできました。
しかし今回は暗号化されたファイルを復号化して再生することが目的です。
なので次に
ttp://www.firefly-vj.net/dshow/graph/make.html を参考にしつつ自前でフィルタグラフを構築して再生してみようと思ったんですけど、
結局ここでもAddSourceFilterの部分で「ファイルからロード」してるので
「復号化したメモリ上のデータ」からフィルタを作る方法が分かりませんでした。
>バイナリーストリームを流し込み再生する。
ここ↑がどうすればよいのか分かりません。
どなたか教えてください。お願いします。
>適切なソースフィルターを 作 成 してバイナリーストリームを流し込み再生する。
暗号化したaviを復号するソースフィルタを作ればいいんじゃね?
176 :
155:2007/03/06(火) 12:19:39
えー!!そこから!!!???
そういうことですか・・・
果てしなくめんどくさそうですねこれは・・・
勉強します。ありがとうございました。
ReadFileでもフックするか?www
そっちも面倒そうだけどな。
178 :
155:2007/03/06(火) 13:12:42
なんかもう既に手におえなそうな雰囲気なんで挫折気味なんですけど、
「暗号ファイル→復号→DS」以外の方法はないものですか。
暗号化しない。
復号化して一時ファイル作ってそれを読み込む。
1. とりあえずファイルの先頭4バイトだけ弄くっておく。
2. 再生直前になったら先頭4バイトを元に戻す
3. DirectShow で再生する。
4. 終わったらまた4バイトを弄くっておく。
182 :
155:2007/03/06(火) 13:25:37
>>179-181 この辺が身の丈にあってるというかスキル的に妥当な線かもしれません。
試してみます。ありがとうございました!!
184 :
155:2007/03/06(火) 14:37:16
>>183 サンプル発見。これなら頑張れば分かるかもしれません。
ありがとうございます!
>>181 異常終了したときにavi丸出しになり、
次から再生できなくなるという罠か。
DirectShowなんて使わないという選択肢もある。
答えが出たな。。。
188 :
155:2007/03/07(水) 05:22:23
参考までに、DS使わなかったら何を使えばいいですか。
メモリ上のバイナリデータをDSより簡単に再生する方法がありますか。
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.
とエラーが出ます。
御願いします。
>>190 ビデオカードによって頂点数・インデックス数に制限がある。
GetDeviceCapsでMaxVertexIndexとかMaxPrimitiveCountとかみるか、
(SDKDir)\Samples\C++\Direct3D\ConfigSystemにある
CardCaps.xlsってのを見るといろいろ書いてある。
192 :
190:2007/03/08(木) 18:46:00
>>191 って、書いたけど1個の頂点のサイズのことかな。
それだとMaxStreamStrideだね。 でもそんなのなったことないから
解決するかどうかは知らん。
↑
名前190ってしたけど間違い191ね。
194 :
190:2007/03/08(木) 19:00:11
>>191-193 CardCaps.xlsの私の使っているグラボを見るとMaxStreamStrideが255となってました。
D3DXVECTOR4 15個はOKなんのに16は駄目な理由が分かりました。
有り難うございますm(_ _)m
さて、どうしたらしいものか・・・
>>194 255は無いだろ、常識的に考えて・・
と思ったけど、俺のカードは508だった
うざいなD3DCAPSは
しかもCardCaps.xls内のグラボは頂点1つにつき最高16データしか送れないみたいだな・・・
4バイト4要素が指定できる最大サイズの型だから
16*16=256でMaxStreamStride256よりでかくても意味なくね?
>>178 DirectShowにあるAsyncというソースフィルタのサンプルで
AVIファイルを開いて再生って出来る?
出来るならAsyncを改造するだけで出来そうだね。
ちょっとデータの一部をXORしたりして
再生できないようにするだけで目的は達成できそうだし。
独自のI/FでXORする値を指定するようにすれば
専用アプリなしのグラフエディットで再生させることも出来なくできるし。
ソースフィルタとスプリッタが一体なやつだと
この手は使えないかもしれないが
AVIはできたような気がする。
出来なかったらごめんね。
>>196 ん?最高16ってMaxStream?
それはストリーム16本ってことだと思うけど。
1本のストリームに何頂点おくれるかは、
MaxPrimitiveCountとかIndexedならMaxVertexIndexの方だと思うけど。
199 :
デフォルトの名無しさん:2007/03/13(火) 19:16:55
HLSLの頂点シェーダに頂点情報を引数として渡すのにSetVertexDeclarationは必要ですか?
頂点座標とかを直打ちした板ポリみたいなのに適用するときはないとダメっぽかったんですけど、
Xファイルに頂点シェーダを適用するときはやらなくてもちゃんと動いたので、
必要なときと必要でないときの違いはあまりわかりません。
Xファイルだけ特殊ってことなんでしょうか?
>>199 必要
まあ本当なら、不要な情報なんだけれど
D3Dがよこせと言っているんだから仕方ない。
>>Xファイル
これが何を指しているかは不明だが
D3DXのヘルパオブジェのことなら
あれは内部的に呼び出してる。
メイプルストーリーってDX9で作ってるんですか?
どう見ても2Dなんですけど
>>201 2DだとDirectX使っちゃダメみたいな言い方だな。
何で作ってるかなんて知らないけど。
>>201 なんでDX9で2Dゲーム作ったらダメなの?
DX10かもよwwww
DirectDraw使ったらだめですか
DirectSoundもDirectInputもだめですか
>>201
頂点を作成するための関数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 D3DUSAGE定数の意味を聞いてるわけじゃないんですよ
[注意]の部分の説明は、
CreateDevice関数の引数で D3DCREATE_HARDWARE_VERTEXPROCESSING
を使ったら、CreateVertexBufferのUsageの引数に「0」を使う必要があると
書いてある。
この言い分だと、「0」以外の定数は使えないということになるけど、
実際は、サンプルとかでは「0」以外の定数をUsageに指定しています。
これはおかしくはありませんか?
[注意]が間違っているのか、サンプルが間違っているのか
どちらでしょう?
と言うことを質問しにきたんです。
>>208 それは、exciteでの翻訳なので当てになりません。
211 :
デフォルトの名無しさん:2007/03/15(木) 03:12:24
セカンドライフみたいに3Dの上にブラウザを重ねて表示させるのってどうやってるんですか?
ブラウザ表示させればおk
213 :
デフォルトの名無しさん:2007/03/15(木) 03:35:49
>>212 サンプルかなにかどっかにないもんでしょうか?
DirextXの初期化などのソースコードは皆さんはどうしていますか?
何箇所かサイトを巡ったところ細かいところで違うような気がしたのですが
初期化などはその都度必要な事だけを書いているのでしょうか?
または、MSのほうで初期化ライブラリなどがあるのでしょうか?
必用なことを書かないでどうする?
初期化なんて一本アプリを作るうちの0.001%くらいのもんだろう。
くだらんこと悩まずにさっさと書いちまえ。
初期化は大切だろ…
自分の環境だけで動かすんだったら0.001%かもしれんが
初期化を既存のコードで代用しようとするな!ぼげぇ!
>>217 いやいや、自分が満足できる初期化コードを1回書いたら
後から何かすることなんてそう頻繁にはないってことだろ
毎回シコシコ書きなおしてるかと。
以前のを代用できるところは代用するよな。
ゲームなら、UIとかも代用できる
ウェイ!
HLSLで
たとえばalphablend=trueが記述されていて、ほとんどはそれを用いるけれど稀にfalseにしたいとか
lightingのon/offの違うのを見たいとか
いちいち別バージョンを作らなくてはならないんでしょうか。
組み合わせが爆発しないんでしょうか?
int g_fillMode = 2; // D3DFILL_WIREFRAME
technique T { pass P { fillMode = g_fillMode;}}
------------------------------------------
pEffect->SetInt( "g_fillMode", D3DFILL_SOLID);
224 :
デフォルトの名無しさん:2007/03/20(火) 02:40:56
2Dの描画部分で自分のPCでは、ちゃんと表示されるのですが、
ほかのひとPCでは、Clear()部分しか表示されません。
2D表示方法は板ポリゴンに、テクスチャをはっています。
SetTexture,SetFVF,DrawPrimitiveUPは成功しています。
開発環境はWinXPSP2 VC++2005とDirectX2006decです。
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バッファを使用していないので、不具合が生じたと思います
>ClearではZバッファを使用していないので、不具合が生じたと思います
なんていうか EnableAutoDepthStencil = TRUE なら
Zバッファはちゃんとクリアしないといけないでしょ。
229 :
デフォルトの名無しさん:2007/03/20(火) 17:04:55
すいません、テクスチャオブジェクトを描画クラスのデストラクタ内で
開放するように記述すると、プログラム終了時にVC++が
デバッグ欄にメモリエラー報告しまくるんですが、
テクスチャの開放のタイミングはいつが適切なんでしょうか?
教えてください。
開発環境はVC++2005pro、DirectX9です。
D3DXCreateTexture()関数呼び出し直後や描画毎などに
開放した場合、メモリエラーは発生しません。
D3Dデバイス解放より前
231 :
デフォルトの名無しさん:2007/03/20(火) 17:08:12
また、デストラクタ内では頂点バッファの開放も
行っていますが、こちらは問題なしです。
232 :
229:2007/03/20(火) 18:07:32
解決しました。
ありがとうございます。
Direct3D(DirectX9.0)について質問です。
テクスチャーを2600*2600などという大きいものにしたところ、どうやらビデオカードの限界だったらしく2048*2048に大きさが丸め込まれてしまいました。
それは構わないのですが、丸めこむときの挙動が
「はみでた部分を削除」なようなのです。
これは仕様に基づいた動作(他のビデオカードで丸め込まれた時も同じ挙動をする)なのでしょうか?
なんとなくイメージで「テクスチャーサイズ限界を超えた場合、限界サイズに収まるように勝手に画像が勝手に縮小される」のではないかと思っていたのですが…。(このイメージに根拠は無いです)
>>233 テクスチャを2は累乗で表される幅と高さにしないとダメ
4096*4096でテクスチャを用意し、
2600*2600の部分だけ表示させればよい。
>>234 お返事ありがとうございます。
確かに2の累乗しかサポートしていないボードがほとんどのようですね。
ただ、どうやら私のボードは2048*2048が限界らしいのです。
例えば800*600のテクスチャーは、読み込んだときに1024*1024になることを確認済みです。
描画するとき、tu=(1.0f * nX / 800)ではなく tu=(1.0f * nX / 1024)とすることで思ったとおりの描画ができていました。
ですが今回2600*2600を読ませたときは、期待通り4096*4096にしてくれなかったのです。
「それならきっと、(多少テクスチャが汚くなるけど)縮小して収めてくれてるだろう」と思ったら、切り捨てられていたのです。個人的にはちょっとびっくりでした。
4096*4096に対応しているカードは知らないな
普通に考えてそんなにいらないしな
自己解決できました。
報告させていただきます。
D3DXCreateTextureFromFileInMemoryEx
の
Filter引数に
D3DX_FILTER_NONE を指定していたからでした。
D3DX_FILTER_LINEAR を指定することで想定どおりとなりました。
ただ、限界を超えていないときにも(2の累乗以外の画像を読み込むと)、確保したサイズに強制的にあわせるようです。
つまり、無駄に「一旦引き伸ばしてテクスチャとして持ち、その後縮小して表示」することになるのでアンチエイリアシングが行なわれてしまうようです。
ドット絵のようなものは、素直に2の累乗にしたり、小さめの画像D3DX_FILTER_NONE読み込みしたほうが良いと思われます。
基本やね
>>237 それはD3DXのヘルパ関数の挙動だろ、D3Dやボードの挙動じゃない。
また2のn乗の制限や最大解像度は、全てCAPSから得られるので
そっちを根拠とすべき。
質問。
D3DXCreateTextureFromFileExでD3DX_FILTER_NONEを指定して画像を読み込みました。
その後
m_pD3DDEV->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);
を設定した上で画像を矩形ポリゴンに貼り付けて表示したところ、なんだか不自然な挙動をします。
等倍の時はいいのですが、縮小されるように矩形ポリゴンの大きさを小さくしていくと、
テクスチャが黒ずんだり、さらに小さくするとテクスチャが透けたり、
D3DXCreateTextureFromFileExでD3DX_FILTER_LINEARを指定してやると、綺麗に縮小表示されます。
テクスチャの読み込みと、SetSamplerStateでの設定は、両方D3DX_FILTER_LINEARにしてやらないといけないのでしょうか?
両方D3DX_FILTER_NONEにしても想定通り縮小表示されたのですが、アンチエイリアシングがかからないためかなり荒かったです。
>>240 どうでもいいが、SetSamplerStateで使うのはD3DX_FILTER_LINEARじゃなくてD3DTEXF_LINEARな
>>240 D3DXCreateTextureFromFileEx のフィルタってFilterとMipFilterの2つあって、
Filter は 画像->テクスチャでサイズが違う時とかに掛けるフィルタだから
同サイズならNONEでもいけるかもしれないけど、
MipFilter は NONEだとまともなミップマップにならないわね。
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つ目の引数が違ってますが、同じにしても同様でした
>>243 関係ないと思うけど
×"MS Pゴシック"
○"MS Pゴシック"ね
246 :
デフォルトの名無しさん:2007/04/08(日) 22:32:30
スプライトの反転表示ってどうやるんですか?
反転といっても、
△→▽
□→■
色々あるんだがな。
しかもスプライトという用語自体がいったい何を指すのか不明だし。
248 :
デフォルトの名無しさん:2007/04/08(日) 23:28:08
ヨ→E
みたいな反転。
反転はメインヒロインが非処女と判明したときの演出に使います
ヨ→Eだけだと
ヨ→m→Eなのか
ヨ→ | →Eなのかわからん
話の流れくらい嫁
>>251 180度回転は反転(=invert=裏返し)とは言わないだろ
>>254 質問者が180度回転のつもりで反転という言葉を使う可能性は十分にあると思うぞ。
軸で回転語れよ
ヨ→m→Eもヨ→ | →Eも180度回転だろ
2次元脳はすっこんでろ
スレとレスの区別ついてる?
流れぶった切って悪いが質問。
3Dのレンダリングの際には
ワールド変換→ビュー変換→プロジェクション変換
がこの順番で行われるって書いてある本があるんだけど、
これは別にSetTransform()でセットする順番を
このとおりにしなきゃダメだって言ってるわけじゃないよね?
そうだよ。
>>260 変換が適用される順番だから、SetTransformの順番は関係ない。
行列の積はABとBAが等しくないので、計算する順番はとても重要。
実際の計算では3つの変換を順番にするのではなく、1つの行列に
まとめて1回の計算で済ますことが可能。
この、変換を合成できるという性質が、座標変換に行列が使われる理由。
行列で表現できる変換なら、どんなに複雑でも1つの行列に合成できる。
263 :
デフォルトの名無しさん:2007/04/15(日) 18:04:47
Direct3Dで誘導ミサイルを作りたいのですが、うまくいきません。
今やっている方法は
・目標点の位置ベクトルから、ミサイルの位置ベクトルを引いて、
ミサイルから目標点への方向ベクトルを作る。
・(0,0,1)のベクトルを作り、方向ベクトルとの外積をVec1とする。
・(0,0,1)と方向ベクトルの内積と、アークコサインから、
二つのベクトルのなす角θを求める。
・Vec1を回転軸として、ミサイルをθだけ回転させる。
この方法だと、絶対座標で-Zの方向へ進むとき、変になる。
その辺の解決方法を教えてください。
264 :
デフォルトの名無しさん:2007/04/15(日) 19:10:19
その前にどういう仕様にしたいかだが・・・
265 :
デフォルトの名無しさん:2007/04/15(日) 19:14:35
ちなみにホーミングミサイルがやりたいなら
右か左かを外積で求めて進行方向のベクトルを一定角度だけ回転させるだけだよ
いわゆる板野サーカスで、いきなり目標位置に向かうのではなく、
適度にいい加減にあちこち乱れ飛んで見せてから100%命中させたいのですが
267 :
263:2007/04/15(日) 19:26:08
欲しい動作
・ミサイル自体を目標点の方向へ向ける。
今ある情報
・目標点の座標
・ミサイルの座標
・ミサイルの状態行列
です。
>>265 「右か左か」というのはなんですか?
268 :
263:2007/04/15(日) 19:28:37
具体的に進む方向ベクトルはありません。
つねに、ローカル座標のZ方向に進むという仕様にしています。
なので、目標点へミサイル自身が向けばいい、というわけです。
目標位置をミサイルのローカル空間に変換してから、そっちに向ければ?
270 :
263:2007/04/15(日) 19:48:41
申し遅れました。完全な3Dでやってます。
スターフォックス64のオールレンジモードの状態です。
絶対座標の(0,0,0)から、+X、−X,+Y,+Z,-Z方向に軸を伸ばしています。
-Y方向には伸ばしていません。
271 :
263:2007/04/15(日) 19:50:12
>>269さんの仰る方法はどうすればよろしいですか?
ベクトルをワールド空間→ローカル空間への変換方法ですよね。
それだったらオイラー?のAIの本でも読んだら?結構載ってる本あるんじゃね?gameprogramminggemsとか
レスを読まずにレスをするけど
例えば、目的の角度にする為に30度回転しなきゃならないとするだろォー
そこをあえて5度ぐらいにするんだよォーそうすりゃ徐々に目的地に向かうだろォー
んでそういう場合はククォータニョンを使うんだよォォーわかったかカスが
274 :
デフォルトの名無しさん:2007/04/15(日) 20:54:07
>>267 右か左かってのは自機の進行方向に対して
敵が自機からみて右にいるか左にいるかってこと
それとお前のいってることおかしくね?
常にローカルのZ方向なんて仕様にはどうしたってならんでしょ?
別のゲームを実際に画面でそうみえる通りに作ってないか
どう作ってるのかしらんが内部ではちゃんと3Dの世界は構築できてるのか?
>>267 現在の姿勢(A)から、目的の姿勢(B)への変換は M = invA・B だけど
ミサイルの上向きベクトル(ひねり)を"成り行き"で決めるんだとしたら、
Bは直接求められないから、AからBへの相対的な回転を求める必要があるわね。
回転は円弧 v1,v2 から求めるとして
v1 は、 現在の姿勢(A)の前向きベクトル、ニュートラルが(0,0,1)だとしたら
D3DXVec3TransformNormal(&v1, &D3DXVECTOR3(0,0,1), &A); で
v2 は、 (目標点)-(ミサイル点)ね
あとは、外積と内積で軸と回転角を求めて(ry ね。
角度を徐々に変化するなら回転量にリミッタをつけるわけね。
276 :
デフォルトの名無しさん:2007/04/16(月) 01:16:07
内積いる?
角度なんてもっときゃいいじゃん
左右を判断するのに外積
進行方向を決定するのに現在の角度+回転したい角度
で内積どこに使うの?
"残りの角度"ね。1フレームの角度変化量がそれより大きい場合は
クランプしないといけないわね。
278 :
デフォルトの名無しさん:2007/04/16(月) 01:33:26
意味わからん
何、残りって?
内積って光の計算とボールの反射角ぐらいしか使った覚えない
279 :
デフォルトの名無しさん:2007/04/16(月) 01:35:59
ああ、書いた瞬間わかった
いらんて
目でわからんほど小さい角度やんけ
要は必要な回転角度が3で、角速度が5の場合に、+5>-5>+5>-5..って感じで
ブルブル震えるのを、許容するかどうかの問題ね。
281 :
263:2007/04/16(月) 02:02:57
>>275さんの方法をやってみました。
相当綺麗に誘導することができました。
ありがとうございます。
私の場合は、ミサイルの方向ベクトルと目標点への方向ベクトルの内積で
出た角度に制限(1フレームで30度以内)を付けました。
これならばミサイルがぶるぶる震えたりはしません。
ですが、この方法でも、目標点への方向ベクトルのz要素が負
(例えば、ミサイル絶対座標が(10,10,10)で
目標点の絶対座標が(5,1,5)の時のように方向ベクトルが(-5,1,-5)のとき)
などでは、ミサイルがあらん方向へと飛んでいきます。同高度の時でも、
50単位ぐらい離れていたら、誘導されるのですが、それ以上離れると、
いきなり完全な逆方向へ飛んでいきます。これはなぜなのでしょうか。
>>281 多分計算間違いか(ベクトルの正規化し忘れとか)、外積の計算失敗とかだと思うけど。
(ちなみに(-5,1,-5)は(-5,-9,-5)の間違い?)
v1とv2が、ほぼ同じ向きの場合とか、正反対の場合、(|dot|>1.0-ε)
外積がうまく求まらなかったりするから、場合分けが要るわね。
(正反対の場合はY軸180度回転で決め打ちとか)
283 :
デフォルトの名無しさん:2007/04/16(月) 07:16:32
内積いらんでも綺麗にいくと思うけどなぁ
内積は使うと色々面倒なんだぜ
場合分けあって
まあ、ポイントは外積の左右判断だけだと思うけどね
284 :
デフォルトの名無しさん:2007/04/16(月) 07:23:43
外積の計算なんてミスるの?
0>X1Y2-X2Y1
のどこにミスる要素が・・・
ちょっと役に立つネタの流れになると、こういうのが出てくるな…
287 :
263:2007/04/17(火) 00:44:59
完成しました。
なぜ変な方向へ行ってしまうかというのは、外積から求めた回転軸に問題がありました。
ほぼ同じ向きになったベクトルの外積はゼロベクトルに限りなく近くなります。
なので、軸ベクトルの長さが1以下の時には回転をしない、
という風にしたら何の問題もなく動きました。
みなさん、本当にありがとうございました。
288 :
デフォルトの名無しさん:2007/04/17(火) 05:52:46
289 :
デフォルトの名無しさん:2007/04/17(火) 07:04:27
>>287 なにとんちんかんなこといってるの
外積で出したベクトルなんて使わないよ
外積と内積を利用して軸と回転角を求めるって話なのに、
>外積で出したベクトルなんて使わないよ
ってどういうことよ?
まさか、外積がそのまま軸になるとか思っちゃってるわけ?
291 :
デフォルトの名無しさん:2007/04/17(火) 08:38:04
はぁ?
アプローチ悪すぎ
アフォ過ぎ
もうわかったから消えてくれ
アプローチが悪いといいつつ
良いアプローチを提示できない時点で終わってる
294 :
デフォルトの名無しさん:2007/04/17(火) 19:31:38
は?
さんざん言ってんのにお前が馬鹿だから略
295 :
デフォルトの名無しさん:2007/04/17(火) 20:12:06
進行方向と上ベクトルで外積
傾けたい上ベクトルを指定
これとさっきだしたベクトルで外積
これらを行列に突っ込んで姿勢行列完成
どっから見てもレーザーに見える板ポリなんかもこんな感じ
296 :
デフォルトの名無しさん:2007/04/17(火) 20:37:28
その方法だと外積もう一回いるな
進行方向のがでてない
3Dシューティングゲームのソースコードを公開してくださっているWebサイトなど
ご存知でしたら教えてください。よろしくお願いします。
>>298 ありがとうございます。参考にさせて頂きます。
すいません、DirectMusic でわからない所があります。
PlaySegmentEx でWavデータを再生しているのですが、ループ再生の挙動が
おかしいのです。SetLoopPoints(0,0) のSetRepeats(DMUS_SEG_REPEAT_INFINITE)で
指定しているですが、2回目のループから、何故か10秒ほど間があきます。
(1回目のループは問題なしです)
状況的には、
(1)250個ほどのwavファイルを読み込んでセグメントを作っている。
(2)うまくループし続けるセグメントもあれば、2回目から間の開くセグメントもある。
(3)空きメモリは2G程度ある。
こんな状況です…。色々試してみましたが、どうしても間が…。
よろしくお願いします。
質問です。FujitsuのLifeBookを購入したのですが、
DirectX9の3Dのサンプルを起動すると...very hardの様な警告が表示され
処理が大変遅くなります。
最新のノートだと聞いたのですが、一方最近のVAIOのノートで起動すると
一目瞭然で段違いにスムースに動きます。
グラボの性能が違うのでしょうか?
教えてください。お願いします。
302 :
301:2007/04/20(金) 09:26:47
小出しすみません。
グラフィックボードは
名前:Mobile Intel(R) 945GM Express Chipset Family
チップの種類:Intel(R) Calistoga Graphics Controller
メモリ合計:128.0MB
WindowsXP
FMVシリーズ
Intel(R) Celeron(R) M CPU
410 @ 1.46GHz
1.46GHz、504MB RAM
物理アドレス拡張
という感じです。すみません。
オンボードGPUで3Dやるのはやめて下さい
小出しすんなの意味で言うなら、エラーメッセージも省略すんな、と。
ハードウェアに無い機能を使ったサンプルの場合、Direct3Dがリファレンスラスタイライザという
すべてをソフトウェアで処理するモードに切り替わるから超遅くなんのよ。
VGAの性能不足とゆーより機能不足が原因です。
305 :
301:2007/04/20(金) 17:47:28
>>303-304 ありがとうございます。
オンボードGPUって何ですか。つなげて言われると分かりません。
確かにラスタライザとかエラー表記がありました。すみません。
参考書はI/O BOOKSのDirectX9 DirectX Graphics
という本なんですが、
その機能を使わなければどうしようもないですよね?
分解でもしないと、どうしようもないんですか?
デバイスのcapsを取得して、そのサンプルで使用している機能があるかどうかは確認したのか?
最低限トレースしてどこの分岐でメッセージを出力しているくらいはやっているんだろうな?
307 :
301:2007/04/20(金) 18:42:32
>>306 ttp://www.uploda.org/uporg781097.txt > if( NULL == pOldDeviceSettings &&
> pNewDeviceSettings->DeviceType == D3DDEVTYPE_REF &&
> !GetDXUTState().GetOverrideForceREF() )
> {
> DXUTDisplayErrorMessage( DXUTERR_SWITCHEDTOREF );
> }
おそらくこの辺りだと思いますが、解読できませんでした。すみません。
デバイスキャプスで探る方法も分からない屑ですが。
いったい何をしたいのだろう?
サンプルを並の速度で動かしたいだけなのか?
DirectXを勉強したいのなら、初期化から始めれば自然と理解できるように
なると思うのだが。
>>307 そのGPUにはそういう機能がない
だから遅くなる
分解だの改造だのやってもダメ
諦めて
ノートで動くように作るなら最近のサンプルはきついね。
DirectX8のサンプルを見て、その範囲でやる方がいいな。
その辺のネトゲとかはそんなレベルだし。
311 :
301:2007/04/20(金) 20:51:20
分かりました。参考書を見直します。
お騒がせしてすみませんでした。
ありがとうございます。
D3DXIntersectで使うメッシュ情報を読み込みたいのですが、アニメーション用にスキンドメッシュを読んでしまっているので、
どうやってIntersect用のメッシュを読み込めば良いかわかりません。
アニメーション用ではなかったとき、D3DXLoadMeshFromX()を使ってメッシュ情報を扱えたのですが、
今はD3DXLoadMeshHierarchyFromXを使っていて、判定用のメッシュが扱えません。
どなたかご存知の方、おられましたら、宜しくお願いします。
お聞きしたい事があるのですが、DirectXの書籍に
「DirectX逆引き大全500の極意」という本があると思うのですが、
この本はどうなのでしょうか?
サイトにある目次を見た所、自分のやりたい事があったのですが、
プログラム&解説は詳しく載っているのでしょうか?
板違いならすいません。
よろしく御願いします。
俺はエスパーではないので誰か頼む
こんなの本をもってるヤツでも答えられない
316 :
デフォルトの名無しさん:2007/04/21(土) 19:49:24
.Net DX2007Feb
DirectInputを使いたいのですがコンパイルが通りません。
[dinput.h]はインクルードし、[dxguid.lib][dinput8.lib]はリンクしています。
書籍や説明をしているサイトの通り打っても[DirectInput8Create]が使えないと言われます。
何か別の関数に置き換わったのでしょうか?
俺はエスパーではないので誰か頼む
じゃあ、エスパー魔美好きの俺が答えてやろう。
「コンパイルが通らない」だけで分かるかよ!
コンパイルは通らないはず
なんだっけ?ライブラリか何かのファイルが9.0cからなくなっているんだよな
そこら辺詳しい人いないかね
>>316 今までのSDKを適当に入れたら通る。
この解決方法でいいのか知らんが。
#define DIRECTINPUT_VERSION 0x0800
#pragma comment(lib, "dinput8.lib")
を、DirectInput8Createを使ってるcppファイルの先頭付近に
追加してみろ。変わらずなら他のcppに次々追加していく。
stdax.cppだけじゃ駄目だ。
多分これでリンクが通るはずだ。理由はしらね。
>316
エラーメッセージ自体を貼り付けてみよう。
>>313 局所サンプルで書かれてるので素人にはまったくオススメできません
DirextXのサンプルからいじってなんか作たぐらいの’まとめる’スキルが要ると思われる
326 :
316:2007/04/22(日) 08:16:22
返信ありがとうございました。
2005Febを入れるかマクロを追記させるかのどちらかで解決するのを確認いたしました。
新しいSDKでDirectInputを使う場合、後者のほうがいいのでしょうか。
327 :
デフォルトの名無しさん:2007/04/23(月) 21:17:08
似たような質問が出ていたので便乗させて頂きます。
>>316さんと同じところのDirectInput8Createで引数に使っているIID_IDirectInput8が使用できない状態です。
error LNK2001: 外部シンボル "_IID_IDirectInput8A" は未解決です
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#pragma comment( lib , "dxguid.lib" )
#pragma comment( lib , "dinput8.lib" )
これらをwindows.hなどのインクルード直後に書いています。
ちなみにIID_IDirectInput8を宣言している場所に移動は出来ます。
何が原因でのエラーなのでしょうか。
329 :
デフォルトの名無しさん:2007/04/26(木) 23:39:44
質問させてください。
現在、矢印キーでキャラクターをx,z軸方向へ移動させれるとこまでできておりまして、
今度はこのキャラクターに、Xファイルから読込んだ起伏のある地形の上を歩かせたいの
ですが、どのようにプログラムすれば実現できるのか分らなく苦戦しております。
実現方法や参考になるサイトなどをご存知の方がいましたらご教授ください。
よろしくお願いします。
>>329 たくさん方法があるけど代表的で汎用性があるのを2つ
どっちがいいかでなくて、用途に応じて使いわけると開発が楽になる
1つ目は足元に見えない三角形(足場用当り判定ポリゴン)をデザイナさんにおいておいてもらって
1つ1つの三角形を片っ端から判定する(もちろん全部判定すると処理時間が半端でないのでオクツリーとか検索して幸せになる)
2つ目は2Dのマップ的な判定方法
とりあえず正方形のタイルが敷き詰められた床を想像する
真上からみると碁盤の目みたいになる
ここまでは2Dのマップチップと同じだ
横線と縦線が直行してる点を頂点として、その頂点の1つ1つに高さ情報をもたせる
とりあえずこれで山が表現できる
判定は2Dと同じようにどの四角形にキャラが乗っているか?を求めて高さの計算は
四角形の対角線で三角形2つに分ける上と下の2つの三角形に別れる
どの格子にいるかはわかっているので対角線の直線の方程式を使って上の三角形にいるか
下の三角形にいるか判断する
そしたら、平面の方程式(わからなかったらググレw)を使って高さを求める
>>330さん
ご教授ありがとうございます。僕の頭ではこの問題は壁ですね…
どう解決したかを報告できるのはもうちょっと先になりそうです。
せっかく教えて頂いたのに申し訳ありません orz
332 :
デフォルトの名無しさん:2007/04/27(金) 10:42:41
こんなに噛み砕いて説明してるのに分らないんなら何見たって無駄。
リアル中学生かも知れないから
高校の教科書読んでみろとか
もうちょっと具体的な指示を
出してあげてもいいかも知れない
中学生がこんな時間帯に2chに居る訳ないでしょ。
ニートか大学生だろ。
そう言うお前は…( ´,_ゝ`)
DXライブラリを使用してゲームを作ってみようと思っているのですが、
このライブラリって実際どのぐらい普及しているんでしょうか
1%以下とだけ言っておく
ライブラリの普及率なんてどうでもいいことだと思うが。
孤独を癒してはいけないんですか
ある程度自分が使って馴染んできたライブラリが実は利用者ごく僅かな
劣化ライブラリでしたーってことになったら困る
でも、ネットでRPGツクール未満のゲームとか、
ダメプログラマがゲー専の卒業制作で使うとか
マイコンBASICマガジンの投稿作品に勝てないようなゲームしかないじゃない。
私は●●のライブラリで作りましたって言って
キラーアプリを作ってしまえばもうウハウハです
>>343 STARGAZERは実装としてはよくやったとおもう。
(デザインは既存ゲームのエッセンスをぱくりまくっただけだが、プログラム的にはそれは問題ではない)
BGMがらみで別ライブラリ使ってるから、ソースもいじってるのかもしれないが。
ライブラリを生かすも殺すも実力しだいか
330カワイソス
>>342 意味分からん。どの道、ライブラリなんて言っても
元々DirectXのラッパー程度なんだしそれのどこに劣化で問題がある?
むしろ、重要なのは権利回りで実用時に問題が無いか?とか
開発やサポートが止まってて予期せぬ中断を強いられないか?じゃないか?
俺らは額を泥に埋めてまでも
ライブラリの名声を借りなければ世の中を渡っていけない。
キャリア組の連中は現場のことなんて分かりやしないんだ!
人数だけ見たら海外ものが多いに決まってるがwwwwwwコミュニティーが活発とか将来性、ライセンスじゃね?
例えばBackBufferCountの値を大きくするとフレームごとの処理の重さを平坦化して滑らかに動かす事に活用できるのでしょうか?
操作が遅延するのでゲームには使えないがデモに使えるのではないかと目論んでいます。
ファイルパッキングしたものから
画像ファイルからテクスチャを作るときどうしていますでしょうか?
パッキングされたものから画像を保存
それを読み込みしかないのでしょうか?
D3DXCreateTextureFromFileInMemory
>>352 自分のアプリで計測して比べてみ。一箇所の違いだから簡単だろ。
なんか結果でたら報告してくれよ
>>352 そんなあらかじめ計算できるもんなら最初からデータにしとけよw
折角ゴイスーなデモやるなら操作できないと意味ない希ガス
見せるだけならムービーでいいじゃん
なんか3DMarkなんとか思い出したw
いま、全く聞かないけどどうなったんだろ?w
ライブラリ使ってとりあえず完成させて、一通りの処理の流れを掴んでから
ライブラリなしで作り始めるってのはありかな?
>>357 そんなことできるもんか
下地をとっかえるなんてことは理論上簡単そうに見えても
実際には根が張るから不可能だ。
作り直したほうが速い典型だな
>>357 最初からライブラリを自分なりのラッパークラスでつつんで開発すれば
あとで実装を書き換えるだけになるからなんとかなるかも
最初からライブラリ使うな?それはごもっともw
>>359 3DMark2000,2001,03はタダだったから実行してみたな
驚いたのは2000ぐらいで後はフーンって感じだったw
こんときはセンスもよかったしね
3DMark05,06,07なんて俺のRadeon9600proで動かないだろうなw
っていうかまだタダでDownloadできるんだろうか?w
3DMark05は動くっぽいな
でも06はむしろCPUがデュアルコアでメモリがたくさんないと駄目ってか?
いまってそういう時代なわけ?
完全に過去の人になったな俺w
今はもうグラボもデュアルじゃないと
3DMark05のデモみたけどセンスワリィなぁ
この銃撃戦バキュバキュって奴どんなに派手に作ったってよくみえねぇって
03のときも似たようなことやってなかったか?
技術的にいいところあっても真似してやろうと思わんよ
06はなんかドラゴン出てきてよさげっぽいからちょっと期待してみたりw
3DMark06見て見た
3DMark05と同じデモで終わり・・・ケチー!
終了ー!w
バッカじゃねぇのw
グラボももうネタねぇんだろw
>>358,
>>360 ok、気合入れてライブラリなしで作ってみるよ
まあまずはC++の勉強からだが…
C++どころかstdioとかも作らないとライブラリを使用してることになるんじゃね?
標準ライブラリは使っておk
標準ライブラリが無い環境のほうが特殊だ品
>>369 WindowsCEとかSDKによってはなかった希ガス(標準関数の方だったかな?)
後、組み込みとかだと標準ライブラリはほとんど使えなくて
標準関数とかも使えるもんと使えないもんとある環境があった希ガス
まあ、ゲームとは縁の無い話だがw
だからそういう環境が特殊ということでしょ。
DirectX9.0のDLは無料なんですか?
>>373 ありがとうございます!
早速DLします。
後払いだからそのうちMSから請求が来るぞ。
わかったから寝ろ
タダじゃない、きちんと金は払っているだろ。
だからこそ開発できるのに、根本的なところを理解していないと、すぐに無料とか安易な答えが返ってくる。
困ったものだ。
アカデミック版ってお得すぎないか?
何か致命的なとこがありそうで怖い
>>378 安いのにはそれなりの理由があるんだよ。
>>378 大丈夫。
つか、基本的にアカデミック版を買う奴らの方が、
長い目で見れば金を落としてくれるから、安くしてあるだけのこと。
(極端な話、プログラミングなんて始めるのにも学習時間が必要だし、
時間があまって、それなりに気力のある人間に多少安く売っておいても、
その後の20年30年で十分Payできるだけの投資価値があるって事。)
趣味でやってる俺には将来全くpayの見込みはないな
ゲイツごめんね^^
>>381 逆だよ。本当はアカデミック版価格でも十分は利益はだせるんだが、
絞れるヤツからは絞れるだけ絞りとってるだけ。これビジネスの常識。
質問!!
ところで、C/C++で何作ってるんですか??
コンパイルされたバイナリに決まってるだろ。
386 :
デフォルトの名無しさん:2007/05/04(金) 16:23:08
それどんなバイナリ?
それを教えるのはやばいナリ
ここにきてもC/C++でアプリ作ってるやつなんかいないよ
みんな教科書の知識だけでしゃべってるんだから!
そもそも教科書なんて存在しない。
そうだな教科書はSE試験のテキストくらいだな
教科書よりも書籍類の知識ってことで
最近はWEB上の情報だけで何とでもなるから、書籍なんて全然買ってないな。
>最近はWEB上の情報だけで何とでもなるから、書籍なんて全然買ってないな。
てか、一時期のシェーダバブルが終わってから勉強してないだろ?
Xファイルから頂点座標、x,y,z成分をそれぞれ抽出する方法を教えてください。
よろしくお願いします。
普通にメッシュの中にそのまんまのデータが入ってるだろ。
教えるも何も見たまんまだ。
>>395 そうではなくて頂点座標とか一部のみ抽出する方法を知りたいと言ってるんですが。
データが入ってるのは知ってますし、Xファイルのロードぐらいできますよ。
データの配置も見たまんまなんだから、とりたいところを好きなように取り出せばいいだろ。
>>395 すみません。それが分っていない奴でして…。
D3DXLoadMeshFromX()関数を使用してXファイルを読込む際に、第8引数に渡すLPD3DXMESH型の変数から
頂点座標を抽出できそうかな?と勝手に当てをつけているのですが…
例えばx成分だけを取り出すにはどうすれば良いのでしょう?
IDirectXFileから読み出した方が、ヘルプに書かれているフォーマット通りなのであっさり出来る。
すみません…第8引数に渡すのはID3DXMesh型でした orz
D3DXLoadMeshFromX関数によって呼び出した場合は成分抽出は難しいということでしょうか?
IDirectXFile、調べてきます。
>>399 >LPD3DXMESH型の変数から頂点座標を抽出できそうかな?
ここまで書いているのに、あくまでパーサー作らせようというのはどうよ?
>>400 君の予想通り、ID3DXMeshへの操作で可能。
ID3DXBaseMesh::LockVertexBufferで頂点配列へのポインタが得られる。
頂点要素のフォーマットはID3DXBaseMesh::GetDeclarationで得られる。
まあこれだけでは情報が足りず、ロックが失敗するなどかもしれんが
そこは頑張ってください。
>>401 具体的な情報とご指示ありがとうございます!
頑張ります。( ゚∀゚)ゞ
>>401 IDirectXFileがパーサーなのにパーサーを作らせようというのは意味不明。
Direct3D 10のReference見てるんだけど、アニメーション関係の機能とか殆どないけど、従来のDirect3D 9のやつを併用しろってこと?
そもそもDirect3D自体にはアニメーション機能など無い。
DirectXでも、windowsの機能でも良いので、使用可能なVRAMの容量を取得する方法は有りますか?
DirectXで、テクスチャに使える容量をゲットできる関数は見つける事が出来ました。
御願いします。
>>405 いや、D3DXの話。Direct3D10でもDirect3D 9時代のD3DXが使えるのかな、とちょっと心配だったもので
VRAMを食い尽くすまで1MBずつ確保してみるとか
C++のソースモジュールのサンプルをまとめたページとかないですかね?
例えば、
「cout」をクリックするとサンプルソースのページへリンクしてる様な。
↓(使い方の例)
#include<iostream.h>
using namespace std;
int main()
{
cout<<"hello"<<endl;
}
って感じで。
なんでここで聞くんだ?
411 :
409:2007/05/06(日) 23:20:22
どこで聞きゃいいんだ。初心者だからワカンネえの。
>#include<iostream.h>
>using namespace std;
こういう間違った使い方の例をリンクしているページを探しているとは、
わけの分からん奴だな。
3D関連のサンプルソースを公開してくれている海外サイトで、お勧めの所とかないでしょうか?
STLが格好良くて使ってみたい年頃
君らもあっただろう
>>413 マイクロソフトのDirectX SDKのサンプルコードは世界中のDirectX開発者が参考にしてるよ
>>412 >using namespace std;
俺、これっていつもおまじないだと思って書いてるけど実はどうなの?w
まず名前空間について理解しろよ
やはりSDKサンプルコードが一番参考になるんですね。
ありがとうございます。
いや、趣味がライブラリの作成である場合、カッコイイライブラリにするためには
名前空間は必要だよ。
>>420 なんだよ、それ? 趣味がライブラリの作成? アホか?
・・・って、よくよく考えたら俺のことじゃねぇか。
>>416 iostream.hとiostreamの違いについてレポートを提出せよ。
そうすれば412の言っている意味が分かる。
みなさんFXファイルって使ってる?
市販のゲームとか、普通にFXファイルをロードするやり方しているのかな。
テキストファイルだし、遅いような気がするんだけど。開発時だけFXファイルで、
リリース時は別のファイルフォーマットに纏めていたりとかしないのかな。
FXファイルのロードとパースのスピードって実質どれくらい?
コンパイル済みにバイナリに直せるだろ。
いったい何を言っているんだ?
>>424 それが質問に対する答えのつもりならTHE YUTORIか。
> Q. FXファイルのロードとパースのスピードって実質どれくらい?
> A. コンパイル済みにバイナリに直せるだろ。
こんなのあるかよ。
誰か試した人いる?
>>425 YUTORIじゃなくてノーギャラの間違いだと思う。
まあ自分のところではFXファイルの数よりもテクスチャ枚数の方が桁で多いので、
先にテクスチャロードの方をチューンして満足しちゃうことの方が多いなぁ。
なのでFXファイルのロードとか気にしたことも無いよ。
>>425 俺は424じゃないけど、テキストファイルだから遅いんじゃないかと気にしてる人に対して、
fxc.exeによるエフェクトのバイナリ化を勧めるのは不適切な回答ではないと思うよ。
それに
>>423は全部質問的な口調だから最後の一文だけが質問ってわけじゃないだろ?
コンパイル済みでもD3DXの関数でテキストと同じようにロードできるし、速いし、隠蔽できるし。
特別トリッキーなことをしたいとかじゃない限り事前にコンパイルしない理由はないと思う。
FXはカスタムコンパイルに仕込んでおいて、事前にヘッダ化。
C++のコードをコンパイルする段階で組み込まれるようにしている。
質問スレでこちら誘導されたので、書き込ませていただきます。
DirectXでプログラムを組もうと思い、SDKをインストールしようとしたのですが
どのバージョンを入れるのが一般的には良いのでしょうか?
今公式で落とせるのは9.0のようなのですが
XPに標準で入っている8.1のSDKで組むほうが良さそうな気がしてきて
どうしようか悩んでいます。
というのも、DX9だと、同じ9.0cでもdllが足りなくて起動できなくなるというような話も
耳にしたことがあり、DX8.1のほうがいいのかなと思っております。
そこで、経験者の方で、経験上こっちのほうが良いという意見があったら
簡単な理由もつけて教えていただけけないでしょうか?
よろしくおねがい致します。
DirectXを使って2D描画を行う場合について解説サイトをいろいろ回ったところ
1. ポリゴンを使って、それを3D空間の正面に張って2Dに見せかける方法
2. スプライトですべて描画を行う方法
の2種類に分かれているのがわかりました。
この場合、どちらがどのようなメリットがあるのでしょうか。
両方とも同じだと考えて良いのでしょうか?
↑の方法について、素人考えで思う点がいくつかありまして
1の場合
・仮に2D平面のままX,Y軸回転を使いたくなったとき等に便利?
(例えば、カードをひっくり返すときの回転など)
・カメラの位置などをよほど厳密に合わせないと、タクスチャがにじんだりする?
(3Dと違って2Dの場合は1ドットのズレでも目立つような気がします)
2の場合
・800×600の背景画像などをスプライトにする例はサンプルでも見たことがない
(あまり大きい画像をスプライトにすると問題があるかもと思ってしまう)
・画像の描画座標が元々2D平面のため、座標ズレ、にじみ等が起こりにくい?
・ポイントスプライトやX軸orY軸回転など、様々なエフェクトが使いにくそう
(派手なエフェクトなどは無理そう?)
というような点が考え付くのですが、これらは間違った認識でしょうか?
>>430 Direct3D8は間に合わせで作った出来の悪い粗悪品だから
仕様上の問題点も多いので、素直に9を使った方がいいよ。
DLLが足りない問題等は、ランタイムのウェブインストーラへの
リンクを書いておけばいいかと。
>>432 あと、ユーザーは取説読まないので、起動時にDLLチェックして
無ければウェブインストーラのページに飛ばしてあげるとなお良いかな。
>>430 お前はSP2が入っていない、MSですらサポートを打ち切った環境をターゲットにするつもりなのか?
>>431 DirectXにはスプライト機能など存在しない。
>>435 マジですか…
ID3DXSpriteと言うのを検索でいくつか
見つけたのであると思ってたのですが
これは違うのですか?
D3DXライブラリの機能な。
えーと…つまり
スプライトはmicrosoftが作ったライブラリの機能であり
単にポリゴンを使った2D描画を簡単に扱えるだけで
中でやってることは全く同じである
むしろその分やれることが少なく、自由度は低い
であってますでしょうか?
だいたい431の内容の後半は当たっていると考えてよいですか?
>>427 >>428 カスタムコンパイルって、VisualStudioのカスタムビルドのことね?
なるほど、その方がいいなぁ。
というかfxc.exeなんてのがあるって知りませんでした。
OpenGLから移ってきたばかりなもんで・・・。
>>432-433 あれから調べていたら、9.0cで作ったプログラムを9.0cが入ってるマシンで
起動した場合でも、d3dx_**.dllが足りないというエラーが出ると聞いて
なんか紛らわしいなぁと思っていて、さらに深みにハマってたところです。
ただ、品質が悪いということなら、素直に9.0cにしておこうと思います。
回答ありがとうございます。
>>434 最近のゲームでも、8.1以上というゲームが多いため、
やはり8くらいからできるようにしたほうがいいのかな…と思っていました。
単に、昔から開発していたものだから8.1以上なだけかもしれませんね。
>>439 俺もカスタムビルドにしてるよ。
>>428のヘッダ化というのがちょっと意味がわからないが。
エフェクトは便利だが、柔軟性がなく冗長なコードを書かされるのが
不満と言えば不満。
例えばテクニックの中でフロー制御出来て
ダイナミックにパスを組み立てて実行出来たら、もっと便利。
442 :
441:2007/05/07(月) 23:00:13
ああ、ヘッダ化ってのわかった。
なるほど、そっちの方が便利そうだなぁ。
欠点を挙げると、D3DXを静的にリンクするときに、
コンパイル済みのデータを使っているにもかかわらず、
どでかいシェーダコンパイラが一緒にexeに含まれること。
それほど複雑とは言えないシェーダの構文を変換するだけで500KB以上食うのはいくら何でもでかすぎ。
>>443 それマジ?
俺のexe、半分以上がD3DXだったのか・・
ってd3dx9_33.dllてのあるし、実際のところどうだろうね?
何かわかる方法あるかな?
DLLを呼び出している場合は関係ない。
SDKの2004シリーズで、D3DXでシェーダを読み出すコードを入れるか入れないかで、
面白いように実行ファイルのサイズが変わる。
>>431 トランスフォーム済み頂点(TL頂点)使えばXYは画面のそれぞれの軸、Zが奥行きで指定できる。
SetFVFのヘルプ当たりを探っていたら〜RHWってのがあると思うから調べてね。
>>447 ええと…トランスフォーム済み頂点を使えば
SpriteでもX軸回転やY軸回転ができるということでしょうか?
ちなみに、先ほどD3DXMatrixRotationZを用いてスプライトの回転ができたので
単純にD3DXMatrixRotationYを使ったところ、まともに回転しませんでした。
これからSetFVFについて調べて回転をしてみたいと思います。
>>448 頂点座標を直接指定してDrawPrimitiveUPとかで描画。
回転なら行列をかけてもいいけど、sinやcosを使って計算しても簡単に出来る。
正方形なら画像の中心で横に(Z軸)回転する場合、v[0].x=sin( D3DXToRadian( 45 + Angle ) );とか。
>>449 一通り勉強して理解しました。
スプライトでやろうが、rhwでやろうが、
はなっから2次元前提なので、Z軸回転しかできないってことですね。
では、スプライトはrhwでの描画を行うライブラリという概念でよいのでしょうか。
スプライトとrhwでの描画はまったく同じものであり、
3次元空間に描画を行わない限り過剰なエフェクトはかけられない
という認識で正しいですか?
とりあえず余計なことを考える前にSDKのチュートリアルを終わらせろ。
四の五のいうのはそれからでいい。
なんでD3DXSpriteに手を出した初心者は珍奇な勘違い野郎になるの?
>>450 >スプライトでやろうが、rhwでやろうが、
>では、スプライトはrhwでの描画を行うライブラリという概念でよいのでしょうか。
>スプライトとrhwでの描画はまったく同じものであり、
rhw、rhwって、おまえRHW(Reciprocal Homogeneous W)の意味わかって言ってるのか?
自前でTL頂点に変換するときに3次元空間上で回転させるのも自由だろ。
>>451 SDKのチュートリアルは、一応一通り読みました。
(日本語版なので、2004年版と少し古いですが)
>>453 もちろんワールドからビューポート変換まで、全て自前でやるならば可能だと思います。
ですが、3D空間上にポリゴンをおき、それを完全に2Dスクリーン上に
1ドットの狂いもなく配置するとなると、非常に難しそうなイメージがあり
単にスプライトのように張っただけでもテクスチャがぼやけたりしそうだなと…
本格的に3Dをやるのではなく、あくまで2Dの補助として使いたい場合に
XYZRHWを用いて、なんとかごまかすなどの方法がないかと思ったのです。
伝わりにくかったかもしれませんが、rhwというのは
「D3DFVF_XYZRHW(スクリーン上の頂点座標)を用いて処理を行う場合」
という意味で使ったつもりです。
>>452 3Dの概念をうまく理解できないオールドタイプで申し訳ありません。
>>454 XYZRHWはZ値(奥行き)がどうであれスクリーン座標の位置は変わらないから、UV値を間違えない限りぼやけることはない。
1ドットの線も綺麗に描画されるし。
>本格的に3Dをやるのではなく、あくまで2Dの補助として使いたい場合に
>XYZRHWを用いて、なんとかごまかすなどの方法がないかと思ったのです。
誤魔化すどころかこっちが主流じゃね?
ちなみに机の上に紙を置いた状態でZ軸回転は頭の中で理解出来ているよね。
これをノートのページをめくる様な見た目がX軸やY軸回転。
現実世界は3D、机の真上からノートを見たら2Dに見えるだけで(ry
>>454 読んだだけでは理解できないんだから、
怠惰で手抜きせずにきちんと自分でコードを入力して、動かすところまでやれ。
DirectXの昔のSDKってもう手に入れることは出来ませんか?DirectX6用のリファレンスやサンプルソースをが欲しいのですが。
Microsoftのダウンロードセンターにももう無いみたいだし、ぐぐって見てもruntimeはあったんですがSDKはさすがに見つけられずで、あとは古い本に付属してるのを探すくらいしかないのかなあと思ってるんですが。
そんな中途半端なものが必要な理由は?
DirectX6で作られたすでにあるアプリに外からDirectPlayでつなげようとしていて、新しいDirectPlayだと上手く繋がらないので、バージョン互換の問題なんかなあと思ってて、DirectX6のSDK探してました。
アルファが全部真っ黒なスプライトを描画すると
通常通りだと何も描画されないはずなんですが、
全部描画されるんですけど仕様ですか?
素材をいじる以外で回避方法はありますか?
全然情報が足りない。
説明するのが面倒なら他人を頼るな。
462 :
460:2007/05/09(水) 15:34:17
サンプルつくりました。ソース一式あげました
bmpは、32bitのbmpです。
http://www.uploda.org/uporg803343.zip.html pass: test
左から順に
・アルファが全部00のbmp
・左から右に00→FFなアルファのbmp
・全部FFのbmp
を表示しています
一番左が全部アルファ0なので非表示になると思うのですが全部表示されるんです。
真ん中は、綺麗に半透明にグラデーションがかかっています。
右は、普通に表示されています。
で、一番左の原因を知りたいのです。
動作環境は XPで
ボードは、GeForceFX5200と6600、両方とも同じ結果になりました。
VC++2003で
DirectXSDKは、October 2006だと思います。
他にも足りない情報があったら言ってください。
よろしくおねがいします。
463 :
460:2007/05/09(水) 15:38:33
描画にDrawPrimitiveUpを使っていますが
D3DXSpriteでも、同様の現象が出ます。
ビットマップの中身をバイナリエディタで確認してみろ。
465 :
460:2007/05/09(水) 18:45:48
32bitBMPの上位8bitは必ずしもアルファ値ではない。
467 :
460:2007/05/09(水) 19:01:17
このソースでは、32bitBMPを読んでいますが
textureをLockして、全部のアルファを00にしても同様の現象が起こるのです。
468 :
460:2007/05/09(水) 19:07:10
一つでも01だと消えます。(01の部分だけうっすらと表示してる予感)
BMP ファイルや DIB にはアルファ値込みのフォーマットが存在しない。
D3DXCreateTextureFromFile は 32bpp の BMP を処理する際に、
ヒューリスティックな処理をおこなってα値の有無を決定している。
んでオールゼロだとただの(α無しの)BMPと判定される。
PNGを用いること。
とかそれらしいことを書こうと思ったのに
>textureをLockして、全部のアルファを00にしても同様の現象が起こるのです。
かw
>>469 フォーマットにD3DFMT_X8R8G8B8が選択されてる悪寒
>>470 469じゃないけどちょっとソース弄って試してみた。
GetLevelDesc で調べたら、案の定 test1.bmp だけ X8R8G8B8 になってるね。
D3DXGetImageInfoFromFile でも同様にフォーマットが X8R8G8B8 だと判断される。
で、試しに D3DXCreateTextureFromFileEx で強制的に A8R8G8B8 にしてみたら、
ファイルのアルファ値が無視されて全部FFになっちゃった(まあ当然だけど)。
もちろん、さらにロックして全部00に書き換えればちゃんと透明になってくれた。
472 :
460:2007/05/10(木) 00:15:33
すいません
>textureをLockして、全部のアルファを00にしても同様の現象が起こるのです。
と言いましたが
作成後のLockじゃなくCreate〜FromMemoryに入れる数値をいじってたみたいでした。
すいません
現象の理由は解決しました。(Alphaが00の時、マスク無し形式とみなされる)
ありがとうございました。
473 :
デフォルトの名無しさん:2007/05/10(木) 21:09:26
なぜか最近、xファイルを見ようとすると、
Loading effect Resource #103
というエラーが出て、見ることが出来なくなりました。
きっかけとして思い当たるのが、DirectXsdkを入れた事ぐらいなのですが、
解決方法の分かる方はいませんでしょうか?
それって何が吐き出すエラーなのか言いなさいよ
475 :
デフォルトの名無しさん:2007/05/10(木) 23:09:17
>>474 DirectX Viewerです。
Xファイルを上記の物で開くと、「問題が発生したため、DirectX Viewerを終了します」という
Windowsエラーメッセージ(?)を吐き出してきて、ViewerのログにLoading~というメッセージが表示されています。
>>475 DirectX Viewerが内部で使うシェーダコンパイラが、Dec 2006 から
D3DX10版がデフォルトになって、そのせいでぐだぐだになってるわけね。
・他のビューアを使う
・Oct 2006 以前のSDKをインストール
・DxViewerのソースを修正してビルド
のどれかね。
うちのSDK April 2007もそういう結果になる。
普段Xファイルを使わないのでいままで気づかなかったけど。
478 :
デフォルトの名無しさん:2007/05/10(木) 23:42:45
なるほど、ソース修正は結構手間が掛かりそうだし、
他のビューア探してみましたがどうやら開けないっぽいorz
となると、ひとまずOct2006以前のSDK使用しか選択示は無いようで。
お早い回答、有難うございました。
>>476 Dec 2006以降のD3DXではps_1_xのサポートを打ち切ったっというのが直接的な原因みたいだね。
DirectX Viewerのデフォルトエフェクトのピクセルシェーダは complie ps_1_1 になってるから
ID3DXEffectCompiler::CompileEffect によるコンパイルで失敗する。
480 :
603:2007/05/12(土) 19:14:10
DirectX9.0cをダインロードしてインストールして
ちゃんと「完了」とでたんですが再起動してもインストール自体されてないっぽいんです
誰か教えてください、あとXPです
ファイルを指定して実行からdxdiag
そもそもDirectX9のインタフェイスの中で何が取得できずに、
インストールできていないと判断したんだ?
483 :
デフォルトの名無しさん:2007/05/12(土) 20:20:56
レスありがとうございます
ネットワークのとこにエラーがありました
デスクトップにアイコンがなかったのと
いつもなら新しくインストールしたらそう表示されるんですが
されなかったから勝手に判断したんですが
診断ツールのDirectXバージョンのところにDirectx9.0c
てあったからインストールされてたってことなんですかね?
ネットワークのエラーメッセージはdirectplay8○○Service Provider
が何かおかしいとのことです
何かおかしいとかそんなどうでもいい情報をのたまう暇があったら、
具体的に何のAPIを使ってエラーコードは何だったのかを書け。
485 :
デフォルトの名無しさん:2007/05/12(土) 21:32:29
>具体的に何のAPIを使って
d i r e c t p l a y 8 と書いたんですけどカタカナじゃないと読めませんか?
>エラーコードは何だったのかを書け。
S e r v i c e P r o v i d e r と書いたん(ry
短気は損気
それはインタフェイスの名前。
要求しているのは具体的なAPIとそれを使った場合の戻り値。
頭が悪いにも程があるぞ。
よく分からんけどコンパイル時に出るならどの関数が原因なのか消去法で探していけば解決する。
APIが特定出来た上で解決出来ないのならもう少し詳細を。
489 :
483:2007/05/12(土) 22:25:31
>>484 すいませんAPIってなんのことかわかりません
どうやって確認するのか教えてください
エラーコードですがこれのこといってるのかわかりませんが
Directplay8 TCP/IP serviceprovider エラー
Directplay8 IPX serviceprovider エラー
Directplay8 modem serviceprovider エラー
Directplay8 serial serviceprovider エラー
エラーのついてる所を抜き出しました、違うとこいってたらすいません・・
あと485は俺じゃないです
こいつプログラマじゃねぇんじゃねぇの?w
ここはプログラムを作る人間が書き込むべき板なんだが、
何故APIがわからないとか頓珍漢な発言が出てくるんだ?
>>489 もし誰かが作ったアプリケーション(ゲームとか)を実行するときに出るなら、使っているPCが古すぎて対応していない可能性が一番高い。
>>480 そもそもいきなり603って、こいつはどこから迷い込んだんだ?
494 :
483:2007/05/13(日) 00:35:46
えと、実はネトゲをやりたいんですが
起動できなくてDirectxをインストールしたら動くようになるんじゃないかと
思ったんですがそれがうまくいかなくて気軽に書き込んだんですが
プログラマの方の板なんですね・・・だいぶスレ違いでした、すいません
あとそのネトゲはだいぶ昔のやつなんでPCは対応できるはずだと思います
だからここはプログラムを組む人間が利用する板なんだよ。
なんで板違いなのが分からないんだ?
ネットゲームなんて穴を掘って埋めるような作業を好んでやろうとするような奴だから、
脳味噌が腐っているんだろうけどな。
ここで低脳質問を嗅ぎ付けた糞コテの登場
>この板はプログラムを作る人のための板です。
テンプレ読めよなー
DirectX Sample BrowserにあるDirect3D10のサンプルをビルドすると、
どのサンプルでも以下のエラーがでます。
D3D10.hより
構文エラー:識別子'__out'
構文エラー:識別子'__in'
構文エラー:')'
コードは一切弄っていません。皆さんの環境でも同様のエラーはでますでしょうか?
解決方法を教えてください。よろしくお願いします。
>>498 それHeader Annotationsのマクロなので、
Platform SDKとかWindows SDKの新しいの入れたらコンパイルできるようになると思う。
DirectXは激しく初心者です。
D3D9を使ってサーフェイスのアルファブレンドをしようとしています。
まず最初に、次のようなことを試してみました。
1. OffscreenPlainのXRGBサーフェイスを作りCPUで描画。
2. OffscreenPlainのARGBサーフェイスをを作りCPUで描画。
3. ARGBサーフェイスをStretchRectでXRGBサーフェイスに転送。
てっきりこれでARGBサーフェイスのアルファ値で設定したようにXRGBサーフェイスにアルファブレンドしてくれるのかと思ったのですが駄目みたいです。
ただ単にあるサーフェイスを別のサーフェイスにアルファブレンドするには何が一番簡単な方法なんでしょうか?
一般的なドローソフトをD3D9に移植しており、特にテクスチャとかは使用せず、描画は全てCPUで行い、
表示する時にアルファブレンディングや拡大縮小が必要な時だけハードウェアを使いたいと考えています。
>>500 2D機能だけ使うなら拡大縮小はやってくれるかもしれんけどαブレンドはハード使えないことになる希ガス
描画はすべてCPUで行うって言ってるのに拡大縮小αブレンドだけハードっていうのがどういう状況かよくわからない
描画するのに拡大縮小とかαブレンドをする物体はなんかの状況に限られるってこと?
そんときだけテクスチャ使ってハードウェアの3D機能を使って描画するなら拡大縮小もαブレンドもできる。
ただ、それはD3D9サーフェイスじゃ出来ない上に3Dデバイスを初期化する必要がある。
GDI+使うのが一番いい気がするけどなぁ・・・
でも、やりたいことはそうじゃない感じ?
すまん、俺では何がやりたいのかよくわからない
>>500 テクスチャから取得したサーフェイスにイメージを転送してからレンダリング。
>>501 業務上の話なんで何がやりたいか詳しいことを書くのは勘弁してください。
現状だと、まずはD3D9デバイスを作り、そこからサーフェイスを作成して従来のコードを使い
CPUでサーフェイスに描画を行ってから、表示段階に拡大縮小とαブレンドをD3D9ハードを使いたいって感じです。
例えるとCPUでスプライトを書き、グラフィックチップで拡大縮小とαブレンドを行わせながら表示させていたようなソフトを
D3D9に移植し始めた第一段階みたいな感じと思っていただけるとイメージしやすいかもしれません。
GDI+だとハードを一切使ってくれないので1920x1080とかの解像度だと話になりませんでした。
>>503 やはりStretchRectだと転送するだけで、転送時にα値を参照してαブレンディングをしてくれないという仕様なんでしょうか?
また、よく分からないのですが、SetRenderStateみたいなのってStretchRectには無関係でテクスチャだけなんでしょうか?
どうもどの関数がどの設定を使用しているとかさっぱり分からなくて。
用はあるサーフェイスに別のサーフェイスをαブレンディングしたいだけなんです。
テクスチャを使用しないとそういうことは無理なんでしょうか?
確かテクスチャサーフェイスってOffscreenPlainサーフェイスと違って色々解像度とか制限があった気がして、、、
ソフトの移植なんでそういった制限は現状だと回避が難しくて。
気がするとかあいまいな事をグダグダ言う前にとっととやれ。
>>505 とりあえずテクスチャ関係は一旦置いておきたいと思います。
StretchRectなんですが、α値の取り扱いってどう定義されているかご存知ありませんか?
>>506 自己レスです。英語で検索してみたらほんの僅かにStretchRectに関して書いているところがありました。
どうやらStretchRectはただ単に元のα値を先の対応するピクセルにコピーするだけみたいですね。
拡大縮小つきのα値を含めたコピーでしかなく、ブレンディング機能はないといった感じに書かれていました。
これって正しいのでしょうか?
StretchRectの明確な仕様文書は見たことないけど、ピクセルシェーダを通さない処理に
ブレンディングは適用されないと思う。
ドローソフトってのがベクタ系ならともかくラスタ系だと、Direct3Dですぴーどあっぷ♪
てのは難しいと思うよ。そゆのにDirect3Dは向いてないもん。道具選びから間違ってる感じ。
やりたいことがよくわからないから、動的テクスチャを次善の策としてテキトーに提案してみる。
>>507 だから他に方法がないんだよ。
手を抜こうとか怠惰な考えは捨てて、とっとと正攻法でやれ。
>>508 3Dの世界には疎いのですが、StretchRectはBegin/EndScene外で使用するようになっていることから
StretchRect自身は3Dエンジンとは別の、ドライバレベルだとBitBltの類にマップされていると思うのですが、
αブレンディングそのものはレンダリングステージでしか定義していないために、
StretchRectではαブレンディングが使用できないということなのかもしれませんね。
簡単に使用できるように設計できそうなのにちょっともったいないですね。
>>509 いや、正攻法どころか3Dに関してはさっぱりワケワカメでして。。。
他に方法がないという言い方からすると、やはりαブレンディングを行うためにはレンダリングステージを通る必要ありで、
そうするとテクスチャが必要になり、かつ、座標定義のためにバーテックスを作成する必要があるとか、、、
うわ、かなり面倒なんですかね?
αブレンディングをしたいかどうかだけで一気に難しくなりそうなんですね、D3D9って。。。
上位レイヤーの描画デバイスがD3D9を使用するように設計されているので、
下位レベルの2DエンジンをD3D9に移植しようとしてStretchRectだけで行けるかと思ったらαブレンディングのところで困ってしまった。
3D というか、DirectDraw のころから、2D の αブレンディングは
HWサポートされないというのがDirectX の常識だったと思うけど・・・
それしか方法がないんだから、面倒とかグダグダ言ってないでとっととやれよ。
怠け者にも程があるぞ。
>>499 遅レス申し訳ないです。情報ありがとうございました。
>>511 DirectDrawも経験が無いんで知りませんでした。てか、一番最初に書いたとおりDirectXその物が初めてなもんで。
>>512 やっぱそれ以外実装方法が無いんですね?
とっととやる時間があれば良いのですが、本当にSDK読んでる暇とか無いんで、とりあえず没にしました。
当面は全部CPUでやることにしました。
解像度変更などした際にデバイスの復元をしてるんですが……
IDirect3DDevice9::Reset
で、0x8876086c とエラーが戻ってくるのです。 テクスチャー読み込んでペタペタ貼ってるだけなんですが。
どのあたりを調べれば原因がわかるでしょうか?
>>515 まずはそのエラーコードが何を意味するのか調べようとするのが普通の人
>>516 HRESULT: 0x8876086c (2289436780)
Name: D3DERR_INVALIDCALL
Description: Invalid call
Severity code: Failed
Facility Code: FACILITY_D3D (2166)
Error Code: 0x086c (2156)
ここまでは調べたものの、この先、どう調べていいか悩んでいたりします
>D3DERR_INVALIDCALL
>メソッドの呼び出しが無効です。たとえば、メソッドのパラメータが有効なポインタではありません。
>>515 Direct3Dの場合、エラーコードとだけ睨めっこしてもほとんど解決しないよ。
SDKの「DirectX Control Panel」でD3D RuntimeをDebugにして
VSとかのデバッグウィンドウを注視しなはれ。
GamDevPukiWikiの推薦図書から飛んだ先のHPでウィルス見つかったんだが(´・ω・`)
523 :
デフォルトの名無しさん:2007/05/15(火) 20:58:20
探してもないんですがD3D10では
D3D8の頃にあったD3DXCreateTextureFromFileEx
のようにカラーキーを設定して抜き色にする便利な関数はないんでしょうか?
カラーキーなんてもうずっと前に廃止されたと思ってたらまだあるの?
525 :
523:2007/05/15(火) 23:06:49
>>524 D3Dでは実装されてませんでしたが
D3DXの方で実装されていてテクスチャをロードする際に指定できました。
アルファ付のフォーマットでロードしようとすると自動でアルファ値を0にするだけでしたが。
パレットにも対応していたので個人的に好きだったんですが・・・
ないのであれば似たようなの作ります。
PNGで最初からα値を含んだフォーマットを使えばいいだろ。
528 :
523:2007/05/16(水) 01:00:50
>>526 >>527 PNGの存在をすっかり忘れてました。
使うツールも対応しているみたいなのでそれでいこうと思います。
お騒がせしました。
なんだこいつは・・・
531 :
515:2007/05/16(水) 12:18:09
マルチスレッドで制御していた為にエラーがでている事がわかりましたので、流れを整理したら
修正できました。 助言くれた方、ありがとうございました。
DirectPlay8で、初期化を行っていざ
hr = m_pDP->Host( 〜
で、ホストを立てるとAccess Violationで落ちました。
ソースの順番としては
1. CoInitializeでCOMの初期化
2. CoCreateInstanceでDirectPlay8Peerオブジェクトを作成
3. m_pDP->Initializeで、DirectPlay自体の初期化
4. CoCreateInstanceで、DirectPlay8Addressオブジェクトを作成
5. m_pDeviceAddress->SetSPで、サービスプロバイダの設定(TCP/IP)
6. m_pDeviceAddress->AddComponentで、ポートの設定
7. m_pDP->Hostでホストを立てる
ここで、Hostメソッドを実行後、大量のDLLを読んだあとに例外で飛びます。
(上の続きです)
そのログをここに書き出します。
'C:\WINDOWS\system32\mswsock.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\hnetcfg.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\wshtcpip.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\dnsapi.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\winrnr.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\wldap32.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\rasadhlp.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\dpnhpast.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\iphlpapi.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\dpnhupnp.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\rasapi32.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\rasman.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\netapi32.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\tapi32.dll' を読み込みました。シンボルが読み込まれていません。
'C:\WINDOWS\system32\rtutils.dll' を読み込みました。シンボルが読み込まれていません。
0x7c941010 で初回の例外が発生しました: 0xC0000005: 場所 0xffff008f を読み込み中にアクセス違反が発生しました。
0x7c941010 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xffff008f を読み込み中にアクセス違反が発生しました。
通信関連のDLLばかりなので、通信でコケているらしいことはわかるのですが
具体的に何が悪かったのがさっぱりです。
どなたか、わかる方がいらっしゃいましたらご指導よろしくお願いいたします。
細かいパラメータが必要だということならば、全ソースをまとめて書き込みます。
すいませんDXの開発関係ではないのですが初心者の質問です教えてください。
1.MSのHPにDX9CとDX End-User Runtimes の2つのバージョンがあるのですが
何が違うのですか?
2.DX10は何処からダウンロードするのですか?MSのホームページ見ましたが
見あたらないので。
>>534 1. SDKかランタイムかの違いでは?
2. Vistaに最初から入ってる
536 :
デフォルトの名無しさん:2007/05/17(木) 08:21:45
direcxを使ってCPU負荷を下げるときって線画の必要ないときはsleep(0)を呼ぶんですか?ほかにも方法ありますか?
いろいろツッコミてええええええ
アイドル時にDirectXを使って自前で描画する場合に
CPU 負荷を下げる時には Sleep(0); を呼ぶのが普通。
>>536 基本的にあまり描画しなくていいんだけど何かあった場合には即描画したい
というような場合は、適当にタイムアウトを指定したWaitForSingleObject とかで待つ。
別スレッドで SetEvent すればタイムアウトを待たずに即帰ってくるから。
CreateWindow("EDIT", 〜
で、テキストボックスを作ったはいいのですが
DirectXを使っていると塗りつぶしなどの描画で上書きされてしまい、
まともに表示することができません。
textboxが存在する部分だけをα値ゼロで塗りつぶしたり、
pDevice->Clearでクリアするときにその部分だけを塗りつぶさないように
してもダメでした。
何か解決方法はありますでしょうか?
それとも、DIRECTXを使っている場合にはこういったBOXは使えないのでしょうか
>textboxが存在する部分だけをα値ゼロで塗りつぶしたり、
>pDevice->Clearでクリアするときにその部分だけを塗りつぶさないように
サーフェイスに対する操作をしても、そのサーフェイスをスクリーンに描いたら消えるのは当たり前だろ。
Presentするときに、該当部分を回避して転送すれば塗りつぶされない。
3Dエンジンって言うのを作りたいんですけど、
普通作るときはダイレクトXやオープンGLを使うのか、何も使わないで
作るのか、教えてください
好みで。
利点と欠点ってなんですか?
何も使わないで作ったものは勉強以上の代物にはならないと思うぞ。
GPU を直接自分で操作するというのならまた話は別だが・・・。
なるほど、勉強になりました。
ダイレクトXかオープンGLにしようと結論付けられました
有難うございました
ネタだろ。マジレスが続くのも仕込だろ、な?
こんなのありえんよ。
どうでもいい
>>546 【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
>>540 回答ありがとうございました。
範囲を絞る方向で色々やってみたのですが、どうにも綺麗にできなかったので
色々調べてみた結果、DXUTguiというものがあることを知りました。
DXUTの中でこの部分だけほしかったので、これだけ抜き出したところ
うまくいかず、次々とインクルードしていたら、収集がつかなくなってしまいました…
このライブラリは、もともとEmptyProjectを元にして作るために用意されたもので
あとから、この部分だけ付け加えるということはできないのでしょうか?
Xファイルを読み込んで表示させているのですが、そいつを人だとして、
「手に武器を持たせたい(ゲーム中に持ち替えたい)」のですが、
【手】の座標の取得の方法がわかりません。
頂点バッファにアクセスして、目的の頂点が得られるまで全頂点数で試さなきゃならないのでしょうか?
3000ポリゴンのモデルなので、気が遠くなりそうです・・・ orz
>>550 ノード名とか取得できねーの?
各関節ごと名前あんだろ?
つか、Xファイルのフォーマットみてみろよ
>>550 モデリングの段階で手の部分に接合用のダミーフレームを入れておけ。
レイストームみたいな曲がるレーザーってどういう風に
プログラムすればいいのですか?
曲げたい方向にポリゴンを生成していくか、テクスチャにパターンを生成するか。
556 :
550:2007/05/20(日) 00:09:55
>>551,
>>552 回答ありがとうございました。
Xファイルのフォーマットを見直し、Meshを分ければ取得が容易になるということに気づいたので、
手の位置に1枚の極小のポリゴンを設置し、それを取得することでできました!
これで先に進めます。ありがとうございましとぅあ!
ポリゴンじゃなくて空フレームで十分だが?
>>557 俺は手首ごととっかえてるから空フレームじゃやりずらいな
その場合、そもそも手首を腕のフレームの配下に配置する必用があるだろう。
>>553 理解はしたのですが、DXUTを丸ごと使わないといけないようなので
既にDirectXの簡易的な枠組みを作ってしまった身としては
また1から作り直すのは厳しいです…
ですけど、これを使わないとIMEを用いたEditBoxなんか
そう簡単には使えませんよね…とりあえずもう少しがんばって見ます。
回答ありがとうございました。
561 :
560:2007/05/20(日) 04:07:36
しかし、こんな便利なコントロールがあるなら
単体でも使わせてくれればいいのに、と思ってしまいますね…
全てコールバックで処理しろっていわれると
フレームレート固定のゲームでは非常に厄介なわけで…
3次元での、3階のテンソルの回転の公式を教えてください。
和傘3弾重ねの上で鞠を転がす物理演算です。
>>563 お前に説明する必要とかあると思うか?
公式知らないなら口閉じてろ
誰か知ってる人いますか教えてください。
どうせ解らないだから黙ってろ
>>567 そんだけキーワードがわかってりゃ日本語でも英語でもキーワードで検索して少しは調べてきたんでしょうね?w
みんなNVIDIAのSDK 10入れた?
おれはなんかサンプルがビルドできない。DirectX SDKもApril 2007入れてVisual Studioでパスも設定したのだが、
error C2660: 'D3DX10CreateEffectFromMemory' : 関数に 12 個の引数を指定できません。
error C2660: 'D3DX10CreateTextureFromResourceW' : 関数に 6 個の引数を指定できません。
.......
とか言われて怒られる。早くも仕様が変わったのか??
すまん、自己解決。
Febuary 2007でないとだめだったみたい。
あと、警告をエラーとして扱う、というのもオフにする必要がある。
Febuary
について教えてください
572 :
デフォルトの名無しさん:2007/05/20(日) 15:07:45
Matrixの同士の演算が、まったく理解できません。
あるオブジェクトの先端に別のオブジェクトをくっつけて表示、というのをやりたいのですが、
現状取得しているのは、親オブジェクトのくっつける先の場所のローカルMatrixと、親オブジェクトのワールドMatrixのみ、というものです。
ここから、[取得したローカルMatrixをワールドMatrixに変換する]という作業が必要なのはわかるのですが、その手順がわかりません。
どなたかご教授お願いします!
573 :
572:2007/05/20(日) 15:25:44
すみません、自己解決しました。
ローカルMatrix * ワールドMatrix で、できました・・・。
試してから書くべきでした。お騒がせしました。
574 :
562:2007/05/20(日) 15:26:06
すみません、2階のテンソルの3次元空間内での回転でした。
2次元内での回転はできたのですが、3次元での回転が分かりません。
それなら2次元の回転を3回行えばよくね?
現在、D3DXSpriteを使って描画を行っているのですが
仮に640×480の背景画像を用意する際には
テクスチャのサイズは縦横とも2の累乗でないといけないので
そのテクスチャサイズは1024×512となりますよね。
これって、画像を多数使う際には無駄以外の何者でもない気がするのですけども
どうにもならないんでしょうか?
D3DXCreateTextureFromFileの代わりにD3DXLoadSurfaceFromFileを使って
サーフェスとして画像を取れば無駄にならないし、
2Dゲームなら全く問題ないような気がするんですけども
DirectX系入門サイトでどこも扱ってないところを見ると
あまり良い方法では無いのでしょうか…?
もし問題点があれば、教えてくださればありがたいです。
>>575 行列はかけ算の順序によって違うからダメ
すみません、階のテンソルって具体的に何のことを表しているんですか?
物理詳しくないので済みません
スカラー:0回のテンソル
ベクトル:1回のテンソル
単にテンソルというと、2回のテンソルを指す場合が多い。これは行列をつかう。
ありがとうございます
3階のテンソルはなにになりますか?
>>576 グダグダ余計なことを考える方がよっぽど無駄。
どうでも良いことを考える暇があったらとっととコードを書け。
>>576 無駄といっても、VRAMのサイズだろ?
このリソースは元々ゲームぐらいにしか使われないし
気にしないで使っていいんじゃないの。
また、サーフェイスって透過処理付のBLT出来たっけ?
それが出来ん限りテクスチャの代わりには使えんな。
>>581 一応実装しては見たんですが、何も問題が無いので怖いんですよ。
背景の1枚絵として表示する分には何も問題がないというのなら
どう見てもSurfaceのほうがメモリ的に有利じゃないですか。
なのに、どこのサイトでもほとんど取り上げられてないようなので…
>>582 そうですね。メモリ的にです。
ただ、640×480の画像を仮に20枚用意すると24Mじゃないですか。
これを1024×512で取ってしまうと41Mになるわけで、
無駄に必要スペックをあげるのもどうなのかなぁと疑問になったんです。
個人的には、回転や透過の必要なキャラチップなどはTexture、
回転などを一切せずに1枚絵として、せいぜい横に流すくらいの画像は
全てSurfaceで取ると(管理は面倒ですが)メモリの無駄はなくなると思いまして。
ただ、Surfaceなんて過去の遺物のように語られてるようなので
もしかしたら、例えばSurfaceとTextureをごっちゃで使うと速度が遅くなるとか
あくまで例ですけど、表に出ないような問題があるかもと心配になってしまったんです
>>584 多分言葉が通じてないよ。
IDirect3DTexture9ってのは、MIPMAP用にIDirect3DSurface9を複数枚束ねたもの。
実際IDirect3DTexture9::GetSurfaceLevelで各Surfaceを取得できる。
そこにきておまいさんが一人で“Surface VS Texture”と盛り上がっていて、
みんなポカーンという状況。
基本が出来ていない奴に限って、無駄とか何とか余計なことを考えるんだよな。
Surfaceっていうのは、DirectDraw時代にあったような別物だと思ってました…
要するに
所詮2D描画しかしないのだったらMIPMAPも何も関係ないし
TextureでもSurfaceでもどうにでもなる。
ただし、初心者だったらもっと無駄な部分なんか腐るほどあるんだから
そんなことは気にしないで全部Textureでやっちまえ。
って感じですかね。
つーか、なんで1枚のテクスチャに背景だけを置こうとするんだ。
冷蔵庫の中に卵を入れたら他のものは入らないのか。
入らないだろwwwww
>>588 背景をおいたら、余った部分に他のパーツを詰めれば
管理は面倒でも無駄がなくなるってことですね。
なんか頭がガチガチになってたせいか、全く考え付かなかった…
なんか2Dやる人は全データをVRAMに乗せておかないと気がすまない感じなんだよね。
普通の2Dアクションやシューティングなら、1フレームに参照される2Dデータはせいぜい数Mバイトだろうから
キャッシュすればいいのに。
何でもかんでも近くに引き出しに押し込もうとか考える暇があったら、
季節物の服を押し入れの中にしまって手近な収納スペースを増やせ。
馬鹿みたいに詰め込もうとするのは、整理出来ない人間の典型例。
いる物といらない物を分けて考えることが出来ない。
引き出しが広いのに使うものだけしか入れないから
無駄に広くても、入れすぎて満杯に近くても、
引き出しに入りきらなくならないかぎり、どちらでも同じなんだよな
>>593のような考えは整理が出来ない人間の発想。
ぎゅうぎゅう詰めになった収納へ出し入れするのと、
適度に空間の空いた収納へ出し入れするのは効率が全然違う。
血液型とかどうでもいいところに話を持っていくのは、無駄以外の何ものでもない。
>>596 白熱して、流血事件にまで発展したときのために献血できる奴を確認しておくと吉
スキンメッシュのボーンの形を動的に変化させたいのですが、やり方が分かりません。
例えば、肘のボーンの始点位置がずれていた場合にユーザーがアプリ上で修正できる
ようにしたいのです。
しかしながら、フレームのマトリクスやXFILEのボーンのマトリクスの値を変更
するとメッシュの形状まで崩れてしまいます。
分かりやすく言えばメッシュの形を変えずにボーンの形だけを変えたいのですが
どうすればよいのでしょうか・・・。
>>599 インバースキネマティクスで頑張らないと・・・
601 :
599:2007/05/20(日) 20:26:34
>>600 ぬぉぉお!拙者の力不足ゆえIKをどうすればいいか分かりません。
もうちょっとヒントを・・・!
上でも書きましたがXFILE上のボーンのマトリクスの値を手書きで書き換えても
メッシュが崩れてしまうことから、XFILEから読み込んだデータそのままでは
メッシュの形を変えずにボーンの形を変えるのは難しいのかも・・・。
(メッシュデータが各ボーンマトリクスの値と結びついて保存されてるため、
ボーン形状のみを変更する術が見つからない)
602 :
599:2007/05/20(日) 20:28:47
>>600 ぬぉぉお!拙者の力不足ゆえIKをどうすればいいか分かりません。
もうちょっとヒントを・・・!
上でも書きましたがXFILE上のボーンのマトリクスの値を手書きで書き換えても
メッシュが崩れてしまうことから、XFILEから読み込んだデータそのままでは
メッシュの形を変えずにボーンの形を変えるのは難しいのかも・・・。
(メッシュデータが各ボーンマトリクスの値と結びついて保存されてるため、
ボーン形状のみを変更する術が見つからない)
test
ボーンの長さや数まで変えるならウェイトまで変わりそうだな
ついでにアニメーションデータも全部
>>600 ぬぉぉお!拙者の力不足ゆえIKをどうすればいいか分かりません。
もうちょっとヒントを・・・!
上でも書きましたがXFILE上のボーンのマトリクスの値を手書きで書き換えても
メッシュが崩れてしまうことから、XFILEから読み込んだデータそのままでは
メッシュの形を変えずにボーンの形を変えるのは難しいのかも・・・。
(メッシュデータが各ボーンマトリクスの値と結びついて保存されてるため、
ボーン形状のみを変更する術が見つからない)
>>600 ぬぉぉお!
(メッシュデータが各ボーンマトリクスの値と結びついて保存されてるため、
ボーン形状のみを変更する術が見つからない)
まともにモデリングをしたことがあれば、ウエイトを焼き付けた後に、
ボーンの位置を変更するのがどれだけ大変な作業か分かりそうなものだが。
3Dプログラムをやるなら、最低限30日体験版でもいいからMAXあたりをいじっておけ。
。
なんか2D vs 3Dで盛り上がっているみたいだけど。
ようは2Dしか必要ない人がDX使おうとすると3Dに最適化され過ぎていて使いづらいと思うんだと思う。
2D vs 3Dなんて誰もやってないし、無いものが盛り上がるはずもない。
自分の言いたいことを無理矢理発言するために、自分勝手にありもしない状況設定をするな。
ぽまいら喧嘩すんなおっ!
俺たちみんなダイレクトエックサーだお!
614 :
599:2007/05/21(月) 11:15:52
スレッド表示を500-600までの表示で設定してたので既に書き込んだのに気付かず
激しく連投になってしまいましたスレ汚し申し訳ございません。
>>ボーンの位置を変更するのがどれだけ大変な作業か分かりそうなものだが。
そのようです、どうやら考えていたほど簡単にはいかないようです。
とりあえず、ボーン変形後のメッシュをロックして無理やりボーン変形前の
メッシュの形状に戻すやり方を試してみようと思います。
最終的には3Dモデラー的な物を作りたいのでボーンのウェイト値も操作したいのですが
ボーンのウェイト値を操作する関数等ってありますでしょうか?
SetBoneInfluence辺りがそうなのかと思って弄くっていますが、試しに4番目の引数の
weightsの値を全部0にして設定してもメッシュのアニメーションは変わらず・・。
モデラーを作ろうとするのなら、それ以前にまともなモデリングソフトの使い方を覚える方が先。
関数がどうこう言っている時点で問題外だが。
616 :
599:2007/05/21(月) 11:44:00
>>615 ぬぁぁあ!一応3Dモデラーとしてお仕事してました!
使用ソフトはメタセコ、LightWave、MotionBuilder、MAXって感じです。
3Dプログラム開発の経験はあるのですが、ボーンウェイトや頂点を直接いじる処理は
なかなかサンプルや資料が見つからんのですよ・・・。
まずはD3DX等に頼らず、モデルデータを読み出して表示するところから。
富豪的プログラミング
619 :
599:2007/05/21(月) 14:24:45
>>D3DX等に頼らず、モデルデータを読み出し
それがベストですよね・・・。
とはいえ時間的労力的にもD3DXの機能を使うのが現実的な選択肢なので出来うる限り
D3DXを利用したいのです。
ボーンの位置だけを変える処理は一度ボーンを操作してから、ボーンの移動量
から変形前のメッシュを逆算する事で実現出来ました。
こうなってくるとボーンウェイトの値を操作する処理も実装したいのですが
ネットに資料等が無く、具体的な術が見つかりません。
どなたかボーンウェイトの値を操作する関数や方法等をアドバイスして頂けないで
しょうか?
今年って平成何年?
ぬぉぉお!
18年!
ぬぁぁあ!
D3DXに頼っている限りモデラーを作るのは無理。
D3DXCreateModeler
D3DXとかぶっちゃけ蛇足な感が
しかしなんで釘も打てない奴が家を建てようとかのたまわっちゃうんだろうね。
家を設計するのは建築家の仕事といいたいのだろう
ライブラリ使わないでDirectX使うってありえないですか?
DirectX自体がライブラリの固まりだが、いったい何を言ってるんだ?
いえ、DirectXのラッパーのライブラリとか・・・
DXライブラリみたいな奴のことです
>>627 別にありえなくは無いと思うけど、暇で暇で困ってるとかいうのでなければ
行列演算とかはライブラリ使った方がいいんじゃない?
>>630 やっぱり普通はライブラリ使いますか
企業のゲーム開発とかもやはりライブラリとか使ってるんでしょうか?
自分がやりたいようにやれよ。
グチグチグチグチ、いちいち周りを気にするな。
本当に開発する時に必要なのは取捨選択できる能力。
ライブラリを使うタイミングとちまちま最適化するタイミングをうまく使い分ける必要がある。
そういったことを考えられずにここでライブラリを使う使わないって吠えているやつは素人か実際の会社では駄目男。
634 :
627:2007/05/22(火) 08:55:55
なるほど
ソース公開など制限があるライブラリが多いので企業ではどうしてるのか気になったもので
>>632-633 レスありがとうございました
会社の入社でデモ要求があったらライブラリ不可とかあるからね
質問です。
directx9をダウンロードしたのですが、ランタイムコンポーネントのDLしている
途中で、「ファイルをダウンロードできませんでした。後でもう一度実行するか、ネットワーク接続を確認してください。」
と表示され、DLできません。なにか対処法はないでしょうか?
ちなみに一回DirectXのファイルを消してやりましたが、同じ結果に成りました。
回線をまともにする。
Win32もDirectXもラッパもライブラリ。
ライブラリ不可と言う処は水準を明確に示さないと片落ちなんだけどな。
ごたくはいい。手軽にゲームっぽいものが作れるもので就職活動しても
プログラミング技術評価不能=不採用。
ま、よほどゲームが面白いとかCGデータが良ければそっちの方面で評価するかもなってこと。
俺はWinG使ったプログラムで受かったぞ
どれを使うかなんてのはたいした話じゃない。
問題はそのライブラリをどのように使うかのセンス。
お前らはどうしてそんなに受身なんだよ
自分で自分の作った作品を評価しようという姿勢が全く無いな
あきれるよ
どう作ろうが、評価しようがしなかろうが、そんなの各自勝手にすべきこと。
他人が口を挟むようなことじゃない。
>自分で自分の作った作品を評価しようという姿勢が全く無いな
他人が見て初めて気付く部分や妥協の許容の違いが分からないと進歩しない件。
俺は褒めることはせず、気になった点のみ伝える。
酷かも知れんが、評価をするような作品のプログラムの記述方法に正解なんて無いから、
変だったり明らかな間違いじゃない限り意見しにくい。
上から目線の厨を引き寄せましたよ。
しかも自分で自分の作品を評価する話から、
誰も聞いていないことを突然勝手に語り出す。
多分647は646の言いたいことが伝わってないなw
ボーンウェイトの値をLightWaveのシーンやVertexPaintの様に、
特定のボーンウェイトを含む頂点を赤く色をつけて表示したいのです。
ボーンウェイトの配列は取得できたので、この配列をシェーダに持って
行って頂点のDiffuseの値にでもブチ込んで色をつけようと考えました。
しかしながら、今何番目の頂点を処理しているかシェーダ上で取得する
術が見当たらないので四苦八苦してます。
なにかいい方法等は無いでしょうか?
VS_OUTPUT Vertex_Shade(VS_INPUT i, uniform int NumBones){//シェーダ関数
//============省略========−
Output.Diffuse = Bone_Weight[現在の頂点];
return Output;
}
上記のプログラムみたいな事をやりたいのですが「現在の頂点」を取得する
方法が分からなくて悩んでいます。
法線の値やUVの値と一緒にボーンウェイトもシェーダに渡す術があると一番
楽なのですが…
>>640 >プログラミング技術評価不能=不採用
ライブラリ使っちゃうとこれが測定不能になるからやめてほしいよね
例えば、誰かのライブラリ使って、入門書でSTGの基本だけ丸パクリして、
敵の動きだけ、自分で組んできました。
でも、就職作品の注釈には描画ライブラリのみ人のを使いました。
って書くでしょ?
これだともう残念だけど、評価のしようがない。
ゲーム部分だけピックアップしてみても正直ドングリの背比べで工夫した部分とかもうわからん
やっぱね、描画エンジンってどこまでわかってるかの基準になるから俺は自分で作ってほしいな。
っていうか全部(Win32APIやDirectXはみんな共通のライブラリだからわかる)作ってきてほしいな。
描画エンジンたって、3Dモデルを表示するだけならDirectXのチュートリアルやれば1日でできるじゃん。
音鳴らすんだって、ストリーミングまでやってもDirectX実践プログラミングとかページめくりながらやればできるじゃん。
多分、作業量だけで言えば1週間いらずにできちゃうでしょ?
あとはゲーム作りながら動作確認して・・・って感じ?
別に無理やりゲームを作ってこなくてもいいんだぜ。
描画ライブラリに力いれて作ってきちゃったら、デモみたいなもん作ってもいいし。
どーも、他の人のライブラリ使っちゃうとどこまで使ってあるか疑わしい
入門書も最近、ゲームの作り方まで載ってるのあるし、どこまで自分で考えたのか評価しづらい。
・SDKのスキンメッシュのサンプル読め。
・それでもだめなら、ツール用で固定形状・単体表示でいいんだからCPUで処理して実用十分だろ。
>>650 Direct3D標準だと、頂点当たり
boneIndexがint8 x 4、
boneWeightがfloat x 4(実際は3だが)
これを直接PixelShaderに渡して、パレットカラーサンプリングに
利用して表示するというのはどうだ?
sampler g_spPaletteTable;
float4 pixel_main( const in float4 boneIndeces, const in float4 boneWeights)
{
float4 color = 0.xxxx;
for( int_i = 0; i < 4; i++)
color += tex1D( g_spPaletteTable, boneIndeces[i]) * boneWeights[i];
return color;
}
654 :
653:2007/05/23(水) 23:22:32
なんだか
>>650は
俺が思ったことと違うことをやろうとしているみたいだな。
何をやろうとしているのかよくわからんが。
>>653は華麗にスルーしてね
>>650 頂点フォーマットにUVでもXYZでも追加して
インデックス(か、計算に必要なもんを)をブチ子んどきなさいよ
>>655 その方法が自分にとっては一番手っ取り早いようです。早速実装してみます。
アドバイスありがとうござます。
>>654 実は653の内容が勉強不足でよく分かってなかったりするのでこの期に勉強
させて頂きます。レスありがとうございます。
D3DXの関数がインテルセンスに出てこないんですが、なぜですか?
AMDを使ってると出ません
ああ、そういうことかw
クロスシミュレーションを行うために、ある特定の頂点に隣接している頂点の
インデックスを知りたいのです。
頂点が隣接しているか否かというのはどのように調べればよいのでしょうか?
GetIndexBufferあたりの関数がそれっぽい感じがしているので調べている
最中なのですが、全然見当違いの可能性もありそうなので、どなたか良い
手段がありましたらご教授お願いします・・・。
>>660 Indexを全部チェックして同じ頂点を共有している辺を探す。
>657
プロジェクトにD3DXのヘッダファイルを追加するといいよ
>>661 やはりその方法でやるんですね。
ありがとうございます!
>>663 はじめっから隣接してる頂点の情報を頂点フォーマット拡張してつっこんどきゃいいじゃん
>>664 おお、それはどのようにやるのですか?
頂点フォーマットというのはFVFの事でしょうか?
頂点に隣接している他の頂点の数は頂点ごとに変わってくるので(3〜∞かな)
普通にやったら難しそうな気がします。
660はシェーダでやるなんて一言も言ってないがw
むしろCPUでやる話でしょ。
668 :
660:2007/05/25(金) 09:12:04
ぬぉぉお!確かにCPUでやろうと考えていましたが、GPUに処理を
投げる事ができるのなら投げたいと思ってたので感激です。
まだ軽くしか読んでないのですが、テクスチャを介してやる事で
シェーダでのクロスシミュ処理結果を保存してるのかな。
早速がむばってみます、アドバイスありがとうございます!
>>665 >頂点に隣接している他の頂点の数は頂点ごとに変わってくるので(3〜∞かな)
本気で理解できない
クロスシミュレータってそんなことになるっけ?
格子状のメッシュになると想像してるんだけど、間違ってる?
無限ってどういう状況を言ってるの?
クロスシミュ実装できました。早速GPUで処理出来るように追加実装してみます。
浮動小数点テクスチャが必要なのですが、浮動小数点テクスチャって使えない
環境の人とかどのくらいいるのか・・・
>>669 基本的には格子上のメッシュで行うのが理想であり、その場合は隣接する頂点は
最大で8個に抑えられるべきなのでおっしゃる事は間違っていません。
とはいえ、マント程度ならともかく複雑な形状のメッシュを揺らしたいとなると
メッシュを格子状の形に維持して作るのは困難です。
その場合一つの頂点に隣接する頂点の数は8を超える可能性があります。
簡単に言えば格子状以外の形をとる状況の際に頂点の数は2〜∞となると
それが∞になるクロスの画像をうp希望
想像できん
ホームページとか持ってないので画像は簡便。
開いた傘を真上から見た形のメッシュを想像して欲しい。
傘の骨を増やせば増やす程、中心の頂点に隣接する頂点は骨の数だけ
増えていく。
じゃあその傘には∞個の骨があるということか?
てか、ボーンだけ揺らして上手く逃げろよな
無駄なことしてる予感
勝手にオーバークオリティ想定して無駄に苦労してんじゃねぇの?
>>673 そうそう、そういう状況を見越して作っておくの。現実に∞の傘が存在するかはともかく。
>>674 実は、ボーンだけ揺らしてっていうのは既にやっている!!
それで思った事は意外と処理量が多い。
綺麗に揺らそうと思ったらボーン本数増やさないといけないし、ボーンを
入れるのも結構な手間。
(ボーンマトリクスの演算や位置の計算だけではなく回転の計算等も入るので
大分ややこしい&重い)
両方作った実感としては頂点演算のクロスシミュの方が簡単だし汎用性あるよ。
処理の重さも頂点の数を抑えればいいし、GPUに丸投げできるんならそれほどでもないのでは。
あと、頂点ごとのクロスシミュの法がマントのビラビラが綺麗だよ。
「マリリンモンローの下から風が吹いてスカートがビラビラ」ってのが実現できる。
超初心者です。
サンプルを改造したいんだけど、
ProjectName
って変更出来ないの?
あ、出来たわ
ごめっ。
プッ
ダサ
>>675 >簡単に言えば格子状以外の形をとる状況の際に頂点の数は2〜∞となると
ごちゃごちゃうるせー
実際、想定してる範囲のことやったときの最大数を出せよ
それに制限をかけるかどうかの問題なんだろ
例えば本当は20個ほしいけどさっぴいて8個で動かすことになったと(つまり残りの12個は連動しない)
それで期待してる結果の90%ぐらいまでもっていけたらそれでいいじゃねぇか
ボーンウェイトの値を変えたいのですが、どうやっても値が更新されません。
GetBoneInfluenceとSetBoneInfluenceがそれらしい関数だと思い、実際
GetBoneInfluenceでボーンウェイトの配列を取得できたのですが、
SetBoneInfluenceで新たにボーンの値をセットしてもモーションが全く変わりません。
(GetBoneInfluenceで値を見てみると確かに値は更新されているにも関わらず)
何か他に操作を加えないとウェイト値はモーションに反映されないのでしょうか?
>>680 ですよねー。
>>680 最初の二つを少し使ってみましたが、なかなか興味深いものがあります。
サーチかけてみて、期待してる結果に対するS/N比が悪くて困ったような経験あったら、
試してみるといいかもしれません。
引き続きボーンウェイトの値を操作しているのですが、苦戦しています。
SetBoneInfluenceでボーンウェイトの値を操作すると、2つ以上の
ボーンが影響する頂点の動作の変更を確認できました。
試しにSetBoneInfluenceで全ての頂点のボーンウェイトを0に設定してみると
今まで複数のボーンの影響を受けて動作していた頂点が単一のボーンの影響
しか受けなくなりました。
てっきり全てのボーンのボーンウェイトが0の場合は頂点はどのボーン
からも影響を受けなくなり、アニメーションしなくなるものだと考えて
いましたが、全然違う結果になってしまい訳がワカメ。
腕のボーンウェイトを0にした状態でも腕のメッシュは腕の動きに
合わせて動作しているのですが、何故なんでしょうか・・・。
>>683 DXのヘルプにジオメトリブレンディングってページが
あるからそこをみろよ。
ウエイトの算出について書いてある。
自己レスさせて頂きます。
SetBoneInfluence等の変数によって頂点がどのボーンの影響も受けない
ように変更された場合、何かしらのボーンの影響(恐らく最初に設定して
あったボーン?)を受けた物として処理されるようです。
(つまりどのボーンからも影響を受けない頂点というのは作れない?)
試しに適当なボーンの影響を受けるように値を設定してみたら思惑通りの
動きをしてくれました。ご迷惑おかけしました。
SaveMeshHierarchyToFile関数を使ってのスキンメッシュXFILEの保存が上手く行きません。
MeshViewerを利用したXFILEの書き出しの場合は成功するのですが、自分の
アプリで同じモデルを書き出すと読み込めないXFILEとなってしまいます。
立方体のスキンメッシュモデルを書き出して、書き出したXFILEのデータの
中身を見てみると、VertexDuplicationIndicesの値がMeshViewerによって
書き出されたものと違うのを発見しました。
自分のアプリで書き出したXFILEではVertexDuplicationIndicesのインデックスの
値が12まであるのに対しMeshViewerので書き出したのは8までしかありません。
(立法体を書き出しているのでインデックスが8まである方が正常なのでしょう)
つまり頂点データのインデックス化が自分のアプリでは上手く行っていないの
だと思いますが、どうすればいいのでしょうか?
, ' ´ ` ` 、
; `、
: 、::;' ::; :;
:、 ` ;
: `' :'
`: ,、、, ;'
`: `` :
: ;'
`、 :
今時のSDKってポリゴン1枚描画するサンプルってないよね?
どこのサイトが初心者に分かりやすいサンプル置いてありますか?
日本語でおk
686に関してですが、自己レスです。
ConvertAdjacencyToPointReps関数を使い、メッシュの隣接情報を
操作したら正常に書き出すことが出来ました。
>>687 白い線も気になるけど、上と左に見える赤いラインが気になる。
ブルームやHDRIみたいな処理をやってるだとしたら、もしかすると
ピクセルシェーダでのピクセル操作に何かマズい部分があるのかも。
一度ピクセルシェーダを外して描画して確認してみるといいのでは。
>>688 ((((;゜Д゜)))
>>692 まさしくそんな感じです。
ブルームの類に近いですね。
全面に張っているはずなのに・・・なぜか端に描画されてないという
mqoファイルをロードしてDirectX上で表示したいのですが、mqoファイルの
ロードに関してどこかに良いサンプルソースなどはないでしょうか?
>>694 なんだそのメリットなさそうなもん
なんで作る?
>>694 どういう事情か知らないけど、メタセコで直接mqo読みこんで、Xで吐き出すんじゃだめなの?
サンプルなら、FF11っていうゲームの3Dモデルを見れる(個人製作の)ビューワが何個かあって、
その中にmqoファイルをロード・セーブする機能付きの物がある。 (恐らくDirectX使用)
ソースがサンプルとして役に立つか分からんが、興味があるならぐぐればすぐ見つかる
(無論ソース見るだけならゲーム本体は不要)
>>695 メリットなさそうなもんフェチなんじゃね
>>696 メタセコのファイルを読み込んで、ボーンウェイトやボーン編集できる
ビュアー(というよりはLightWaveのシーン)的な物を作りたいんだ。
FF11ビュアーは前に使ったことがあるが、メタセコのインポート用の
ソースが公開されてるとは知らなかった、早速探してみます。
アドバイス感謝!
>>693 @ブルームエフェクト用のサーフェイスでも、Zバッファやステンシルよバッファを
クリアしてやらないとゴミが残ったりする。
Aビデオカードの不具合、ドライバをアップデートすると直ったりする。
Bピクセルシェーダの記述ミス
ソースコードの公開停止してた\(^o^)/
>ステンシルよバッファ
かわいいバッファだな
RPGの文字ウィンドウを作っている物なんですが
とても困っています。
文字列を画面に描画した後に
最後の文字の右にクリック待ち画像を表示したいと
思っているのですが、最終行の文字幅の取得ができません。
DrawTextで描画した文字列の最終行の幅を
取得するにはどうすればいいんでしょうか?
文字の折り返しはDT_WORDBREAKを指定して
フォントはD3DXFontを使っています。
最終行の文字を切り出す処理は自前で作れ
GetTextExtentPoint32
>まだ公開してるよ/(^o^)\
なんとか辿り着く事が出来ました、本当にありがとうございます。
>>699 返答ありがとうございます。
変な縦線に関しては3番でした。
ですが上と左の隙間に関してはピクセルシェーダーでなくとも
画面全体に1枚絵を貼り付けるとおきるためまだまだ考えなければならないようです
しばらくして解決できなかったらまたここで質問します
メタセコイア上でボーンを入れるときにボーンの影響範囲をアンカーと
呼ばれるオブジェクトに頂点が含まれているか否かでボーンの影響範囲を
決めていますよね。
あるオブジェクト内に頂点が含まれているか、というのはどうやって
調べたらよいのでしょうか?
>>706 テクスチャのリニア補完によるぼかしが原因かもな。
試しにテクスチャアドレッシングモードやテクスチャフィルタリングを
変更してみてると改善される可能性があるかも。
一応俺の考えでは画面外の部分は画面に貼り付けてある一枚絵のアルファの
値が0になっていて、リニア補完の関係で上と左のピクセルが半透明の状態に、
そしてアルファテストによって上と左の半透明のピクセルが「抜き」の状態に
なってるのではないか?
試しにちょっと大きめに一枚絵を貼り付けるか、アルファテストの値を
いじってみてはどうだ?
一枚絵が2ピクセル程右下にずれて貼られている可能性の方が大きそうだが。
>>704 ググったりしてもなかなか良い関数がでてこないので
そうなんじゃないかと思っていたのですが
やはり自前ですか。
GetTextExtentPoint32を参考に
自前で最終行の幅をだす関数を作ろうと思います。
ありがとうございました。
>>705 新造人間に似た名前の奴だよね。探したけどどうにもダメ。ヒントください
711 :
705:2007/05/28(月) 23:23:26
>>710 人造人間の名前と「ソースコード」で検索。
今なら上から二つ目に出てくる。
>>708 返答ありがとうございます
ですが、自己解決しました
原因はテクセルアライメントだったようです。
全面テクスチャは(-1,1) (1,1) (-1,-1) (1,-1)でやっていたのですが
これでは上記のように若干の隙間ができ
結局 テクセルアライメントの0.5の分を考慮して
(-1,1)を
-1.0f - 2 * (0.5f / Width);
+1.0f + 2 * (0.5f / Height);
にしてみたら直りました
Geforce7900GSなのになんでこんなことでノイズが・・・orz
>>710 >>700も
>>705もおおよそどのツールおことを言ってるかは分かるんだが
人造人間って何だ。
あと例のビューワのソース見てみた。
確かに、mqoの読み込んでDirectXで表示しているぽいんだが・・・
なんというべきか、これは参考にはならないような・・・
ごめ新造人間は分かった無視してくれ
あなたが誰を指しているのかはっきりさせてくれ
丁度時期が被ったから同一人物っぽいがそいつは俺じゃNEEEEEEE!!
つってもこの板の時点で同じソース探している人間二人位いるし
需要のありそうなソースだから、聞けばサンプルくらい見つかると
思ったんだ。
実際ボーンやアンカーまでメタセコイアでセットアップしたデータを
読み込むのは結構膨大な作業量。まぁ、ちびちびと実装している最中だが。
俺が誰を指しているのかはっきりさせてくれ
メタセコってボーンまで設定できるの?
つーことはアニメーションまでできんの?
あいかわらず六角大王とロックでボーンの組み合わせしかねぇのか?w
六角大王、懐かしいな。バソケ一回目ぐらいの時が初リリースだっけか?
>>719 別のアプリでモーション付け出来たと覚えてる
そのためのボーンだから、普通の3DCGなんかのボーンと違う
DirectX 9.0c をデスクトップに保存したんですけどそれからどうすればいいのでしょう?
どうみても初心者です。回答おねがいします
度々質問すみません。
メタセコイアからメッシュデータやボーンウェイト等のデータを読み込む
トコまではいったんですが、D3DXFRAME等のいわゆるフレームの階層構造
というのはどのように作成すればよいのでしょうか?
今まではD3DXLoadMeshHierarchyFromX関数によってルートのフレームを
作成していましたが、内部で何やってるかイマイチ良く分からないです。
(ブラックボックス的にフレームの階層構造が生成されてる)
いっそ、一度XFILE形式でデータを保存してD3DXLoadMeshHierarchyFromXで
再度読み込む手も考えてますが、どう見ても二度手間になるので出来れば
別の手段をとりたいです。
質問が分かりにくくてすみません。
要約するとメッシュ情報やボーンの親子関係情報やマトリクスを与えると
D3DXLoadMeshHierarchyFromX関数のようにルートのフレームへのポインタを
返してくれるような便利な手段や関数があるかどうか知りたいのです。
フレーム作成処理が難しいようならば、諦めてXFILEを経由した読み込み
手段を取ろうと考えています。
ありがとう、ぐらい言ってやれよw
甘やかすな
ちょwwwwwwおまwwwwwwwww。
ボーン仕込んだメタセコイアデータ読み込みのサンプルソース見つけたww
つーか今までメタセコデータの中身見て自力でやれって言ってた奴
絶対に悪意を持ってミスリード誘ってただろwww。
膨大な時間無駄にしたわ、ふざけんなww。
おかしいと思ったんだよ。MQOの読み込みにボーンまで対応しているアプリは
結構見かけるのにいざ自分も同じように実装しようとすると異様に難しいし。
ミスリードというかミスディレクション
いやそんな難しいもんじゃなかろう
ミストバーン
>>いやそんな難しいもんじゃなかろう
俺も昔MQOからの読み込みを試したことがあるが、ボーンデータやウェイト
データも読み込むとなると大変だろう。
ボーンウェイトは一度MQO読み込んでから頂点がアンカーに包まれているか
どうか自力で判定して取得する必要があるし、メタセコでボーン入れたから
といっても、せいぜい位置情報しかもってこれないからボーン階層や浮動
ボーンの作成は自アプリ上で行う必要があるだろうし。
>>733 慣れじゃないかな。
ロゴライターとか小さいころからプログラミングをオモチャ代わりにしてたから時間はかかったけどサクサク出来た。
いきなり目標に突っ走るか、まずツール類を作るか、ライブラリなどの基礎固めから始めるか・・・何から始めるかだけでもやることの印象変わるし。
>>734 FFXI モデルビューア
とかで検索してみ。
今現在、目的のページはトップにくる。
ソースはちょっと分かりにくい所に隠されているが、すぐに見つかる。
つーかこのソースはまじで期待しないほうがいいぞ
D3DXMATRIXの成分を、拡大成分、回転成分、平行移動成分に分けたいのですが
これはどうやったらいいのでしょうか?
>>737 行列の(_11, _12, _13)が変換後のX軸の基底ベクトル、
(_21, _22, _23), (_31, _32, _33)がY軸とZ軸の基底ベクトル。
これらを正規化すれば回転成分が求まる。
逆に、各ベクトルの長さが、それぞれの軸にそった拡大成分。
(_41, _42, _43)が平行移動成分。
ただし、_14, _24, _34が全て0で、_44が1の行列に限る。
俺、DirextXを始めたばかりのころその記述が分けわかんなかったw
D3DXMATRIX mat; だとすると
mat._32 がZ軸のYベクトル、あとは
>>738
>>738 大変勉強になりました、ありがとうございます。
>>736 検索すると結構いろんなビューアが出てくるな
エフェクトまで再現できるビューアとかもあって中々面白そうなんだが、
ソース公開されてないのね、、、orz
泥棒だから仕方がない
実際FF11とかMQOとかのビューアも結構な数があるから、後進の開発者の
ためにソース公開して欲しいよなぁ・・・。
3Dって開発が異常に難しいじゃん。実際大概の奴らがXファイルの
読み込みでつまづくべ?
それに加えてビュアー開発やら最近のシェーダ技術の研究までやって
たら時間がいくらあっても足りないよ・・・。
>3Dって開発が異常に難しいじゃん
これはかなり人に依ると思うが。
あと「Xファイルの読み込み」の難しさと「3D」の難しさは直接関係しないと思う。
反論してしまうようだが、俺は総じて3Dの方が2Dより難しいと思うぜ。
やはり数値が三次元的になったのもあって、単純に計算量は2Dより増えるし。
むしろ3Dで作る方が2Dで作るより簡単なアプリやゲームってどんなのがあるのよ。
だれも2Dと3Dの比較の話なんかしてないんだが。
3Dは難しい分野に属しているという事を表現してるんだろうに。
2Dでも手を抜かず回転行列を使っていれば3Dに入っても大して変わらんけどな。
DX自体GLと比べてもワールド行列の設定とか楽だし。
3Dテレビでも出現しないかぎり3Dを表現することは不可能だろうね
フロントミッションのようなロボゲーを作っています。
ゲーム性を上げるため視野(Far)を5000にしているのですが、
500程度離れてしまうとロボの手に持った武器が常にロボの手前に表示されてしまいます。
Nearは0.1、ロボの描画をすべで終えた後に武器の描画を行っています。
カメラのNear-Far間が広いため起こっている現象だとは思うのですが、
視野を狭めると遠方の地形や敵等が見えないのでプレイヤーにも空間が狭いと感じさせてしまいます。
何かいい解決方法はありませんでしょうか。
Near=0.1
Far=5000
かよ。凄まじいな
ここまで凄まじいのは初めてみた
射影後のZの精度はNearの値に結構左右されるから、
Nearを出来るだけ大きくしてみると良いかもしれない
Far値を上げると地面が削れたり、自機の後ろやや上の視点(TPS?)にすると自機そのものが消えてしまいます。
1=1mでやっており、Near10(m)-Far5000(m)辺りが限度です。
フライトゲームになると数十キロ先が見えつつ、非常に手前の機体同士や弾の前後関係がちゃんと計算されていますがどうなっているのやら・・
Zバッファの精度が16bitになってねぇ?
ちょっと設定部分みてみろ
>>753 そういう場合はZバッファよりもWバッファの方がいい。
1 Far-Nearを 5000〜1くらいで描画
2 1のZバッファだけクリアし、Farを近くして武器を描画
>>754 ラデ9200ですが、AutoDepthStencilFormatをD3DFMT_D32にすると
D3DDEVTYPE_HALでデバイスが作成できないのでD3DFMT_D16にしています。
自分の環境がヘボいのかも知れませんが。
>>757 D32よりもD24X8, D24S8の方が一般的だから、そっちも試そう。
CheckDepthStencilMatchで確認するのが一番だが、成功するまで
AutoDepthStencilFormatを変えながらCreateDeviceしてみるのも有り。
>>758 >D32よりもD24X8, D24S8の方が一般的だから、そっちも試そう。
2つとも実行には問題ありませんでした。視野の設定を変えているので元に戻してみます。
ところでこの2つはゲフォやラデのどの辺りから対応しているのでしょうか。
対応していなければ書いてある通り値を変えてデバイスの生成をすればいいですがちょっと気になったもので。
D24X8を設定し、NearFar間を初期状態で正常に描画できました。
レスをしてくださった方、本当にありがとうございました。
>>759 D24が使えたからってNear:Far=1:50000の比率はあまりお勧めできないよ。
普通はどのぐらいがいいの?
射影変換後のz座標(=zバッファに入る値を0〜1に正規化したもの)は
z' = (z - n)f / (f - n)z
で計算される。この式を z について解くと、逆変換は次のようになる。
z(z') = fn / (f - (f - n)z')
このとき、z' の分解能を r とすると、far平面付近での z の分解能は z(1) - z(1-r) で求められる。
D24(24bit整数)の分解能は r = 1/2^24 だから、これと n = 0.1、f = 5000 を代入すると、
z(1) - z(1-r) = 5000 - 4985.1 = 14.9
となる。
つまり、単位がメートルだとすると、5km先では15m程度の分解能しかなくなるということ。
これが n = 0.5 だったら5km先で3mくらいの分解能になる。
上の式でいろいろ試してみるといいよ。
質問させてください。
現在3Dの戦闘機を使ったゲームを作ってるんですが
戦闘機のコクピットからの視点が上手くいきません。
カメラの上方向ベクトルが上手いこと作成できてないみたいなんです。
UpVec(0, 1, 0);
これを、機体のXYZ軸の回転量でまわした
RotationMatrix
で変換をしてやり
D3DXMatrixLookAtLH(&CameraMatrix, (D3DXVECTOR3 *)&From, (D3DXVECTOR3 *)&At, (D3DXVECTOR3 *)&Up);
でカメラ行列を作っているのですが……。
自機のコクピットからじゃない視点では自機は正常に表示できているんだよね。
自機のMatrixのY軸のベクトルをUpVecにそのまま入れればいいのに。
というか、カメラの姿勢=自機の姿勢だから何の計算もいらんがな。
>>766 そのままUpVecにいれたら成功しました。
お騒がせしてすいません。
768 :
デフォルトの名無しさん:2007/06/05(火) 14:33:26
お願いします。教えてください。
==初期化処理==
//フォントを用意
fd.Height = 24;
fd.FaceName = "MS ゴシック";
_font = gcnew Microsoft::DirectX::Direct3D::Font(this->_device, fd);
// テクスチャー作成
this->_texture = TextureLoader::FromFile(this->_device, "C:\\aaa.bmp");
// スプライトを作成
this->_sprite = gcnew Sprite(this->_device);
==実際の処理をするループ==
//文字aを書きたい
this->_font->DrawText(this->_sprite, "a", 5, 5, Color::Black);
DrawTextの第一引数をnullptrにすれば、書くことはできるのですが、aaa.bmpを表示する為に、
this->_sprite->Draw2D(this->_texture, Rectangle::Empty, System::Drawing::SizeF(690, 690), System::Drawing::PointF(0, 0), 0.0, System::Drawing::PointF(0, 0), Color::White);
これを文字を書く前に入れると、nullptrでは見えなくなってしまいます。
_font->DrawText()の第一引数のスプライトって制限があるのでしょうか?
769 :
デフォルトの名無しさん:2007/06/05(火) 15:15:20
this->_sprite2->Begin(SpriteFlags::AlphaBlend | SpriteFlags::SortTexture);
スプライトのBeginで引数がSpriteFlags::Noneになっていた所を直したら、動きました。お騒がせしました。
MC++もありなん?
DirectXの質問とはちょっと趣旨が外れるかもしれませんが、
(ビデオカードの)GPU負荷を調べる方法ってありますでしょうか?
シェーダ開発用にGPUの負荷が%で分かるようにしたいのですが・・・。
>>771 NVPerfHUDとか。
とはいえ長いパイプラインかつ高並列な最近のGPUについて、
%で表現されるような負荷を定義するのって難しいよ。
ボトルネックの箇所が違えば、20%+40%が60%にならないし。
そもそも普段無条件に信用しているCPU使用率だって、
実際の計算方法を知ってみれば結構ザルだって事がわかる。
すんげえ高次元の状態を
たった一次元の数値に落とし込んでるわけだからな
>>771 Vistaだったらパフォーマンスビューアーにコマンドバッファーの占有率みたいなのがあったと思うよ。
手持ちがXPなんで確認できませぬが。
>>774 その辺はRTM直前にいろいろバグが見つかったからまだ手を出さないほうが吉。
Vista SP1でETW (Event Tracing for Windows)と連携して細かいタイミング情報が取れるようになる。
>>776 パフォーマンスカウンタのVideo Schedulerカテゴリにある"% GPU Busy"のことであってる?
うちは数字は表示されるけど化け化けで少なくとも%にはみえない。
>>776 ってもしかしてETW使ったDirect3D 10のプロファイリングって
Vista無印でもう実装されてたってこと? だったらスマソ。
>>772 早速NVPerfHUD試してみました。
思った以上に様々な情報が取得できそうです。
有用なアドバイスありがとうございました。
>>773〜
自分もXPなので試せませんが、Vistaに乗り換えた際には試して見ます。
アドバイスありがとうございます。
引き続き教えていただいたNVPerfHUD弄くってますが、これ凄いですね。
シェーダの動作やオブジェクト毎の描画のチェックやシェーダに突っ込む
テクスチャの確認等…便利です。
NVPerfHUDの2.0β版だとプログラムを書き換えなくても動作させる事が可能
らしいので、市販のゲーム等のシェーダプログラミングを参考に出来ると
考えたのですが、今はβ版って手に入らないのでしょうか?
>>777 Video SchedulerってのがGPUの使用率をCPU側から監視したデータだからそれが一番近いよ。
>>778 D3D10は知らないけど、Video SchedulerのカウンタってETWを使ってるはず。
782 :
デフォルトの名無しさん:2007/06/07(木) 17:15:36
透視変換後の画像の表示位置を調整するために
ビューポートの中心を変えたいのですが、
DirectXでやるにはどうしたらいいでしょうか。
D3DXの射影行列生成関数を使うのなら、
D3DXMatrixOrthoOffCenter*H
D3DXMatrixPerspectiveOffCenter*H
とかのOffCenter(中心が離れている)系関数を使うと一発。
詳細はヘルプで
>>783 サンクス。D3DXは使ってないけど、数式が書いてあって助かった。
アニメーションコントローラーのクローンを取得したいのですが
方法はこれであっているでしょうか?
メッシュクラスに、この様な関数を作って
bool CMesh::CloneAnimationController( LPD3DXANIMATIONCONTROLLER *lpAnimCtrl )
{
if( FAILED ( m_pAnimController->(~引数略~, lpAnimCtrl ) ) )
return false;
return true;
}
LPD3DXANIMATIONCONTROLLER *GetAnimationController(){ return &m_pAnimController; }
こうやって使っているんですが↓
for( int i = 0; i < 3; ++i )
e->CloneAnimationController( enemy[i]->GetAnimationController() );
FAILED ( m_pAnimController->(~引数略~, lpAnimCtrl
引数を略すのは構わんがメソッド名まで略す奴は始めてみたよ
俺はエスパーじゃないので他当たってくれ
トゥーンレンダリングについて
ティーポットなどの単純なもので解説したサイトはあるのですが、
Xファイル1つに複数のパーツがあったり、1枚のテクスチャに複数の絵(目や服など)がある場合に応用が出来ず困っています。
服1つにしても縞模様にしたい場合、1次元テクスチャにできないですよね。
毎フレーム頂点1つ1つ触るのも頂点数が多いと効率が悪く感じます。
何か参考になるようなサイトや書籍はないでしょうか。
応用できないのは頭が悪いのだから、なにかをパクっても解決できない。
海外のフリーのゲームでソースとデータを公開しているものを探して見るといいが、おそらく
>>787は満足できないだろう。
応用例は複雑なプログラムになるのは予想できるよな? コピペすれば動くようなものではない。
データの作り方もひとつと決まっているわけでもない。個別のデータの製作者のクセや使用ツールにも依存してくる。
>>787 ああ、トゥーんっていうから輪郭抽出とかのことかと思ったけど、
一次元テクスチャうんぬんとか書いてるとこみると、陰影周りのことだったのね
モデルそのものにテクスチャがあるのなら、
テクスチャステージ0にモデルのテクスチャ
テクスチャステージ1に陰影用の一次元テクスチャ、
とかすればいたって簡単にできるよ
>>786 LPD3DXANIMATIONCONTROLLER m_pAnimController
FAILED ( m_pAnimController->CloneAnimationController(~引数略~, lpAnimCtrl )
でした、すいません
791 :
デフォルトの名無しさん:2007/06/09(土) 23:18:20
RokDeBone2についてのスレはありますか?
質問したくても答えれそうな人がいるのってこのスレぐらいしかいそうになさそうですので
ここで問題なければ質問したいのですがダメですか
ここは全然違う。
メタセコのスレなら、詳しい人もいるかもね。
ジオメトリインスタンシングってどうですか?
なんだか情報あさればあさるほど微妙な気がしてくるんですけど…。
・シェーダーでの頂点レジスタが少なすぎる
・なんだか頂点レジスタたくさん使うと遅くなるようなことが
nVidia のスライドにあったかも
・radeon でちゃんとうごくの?
・結局頂点バッファにたくさんの重複モデルをしこんでおいて
定数レジスタにマトリクスを送るのと大差ないんじゃない?
などが、疑問点です。
ストリームに違う頂点バッファをいくつも仕込めて、
違うモデルを一回の描画で行えるとかのほうが重宝するのになぁ。
DirectXで2Dの矩形を描画したいんですが、どのような方法がありますか?
SDKのチュートリアルを見て勉強する。
それは方法とは言いません。
それが方法じゃなかったらいったいなんだというんだ?
漠然とした質問には相応の漠然とした答えになって当然
卵料理はどんなのがありますか?→料理本を買って勉強してください
至って普通の回答だけどな。
方法を書くにしても多すぎるしコードを書くなんて手間だから回答者もやりたくないだろ。
ググったりSDK見てもらったほうが質問者にとっても分かりやすいんじゃないかな。
794です、解決しました
もうひとつ質問なんですが、
スマートポインタというのは
CComPtr<IDirect3DDevice9> m_pd3dDevice;
という風にしておくだけで勝手にreleaceしたりdeleteしてくれるものなのですか?
もしそうなら凄く便利ですよね
SDKに矩形なんてあったか?
テクスチャ表示の前で嫌でもやることになる。
そうですね、もしそうなら凄く便利ですよね
CComPtrはカウントの増減のタイミングや、
他の関連リソースの状況を考えて適切に利用しないとならない。
勝手にリソース管理をやってくれる物だと思って
>>800みたいな考えで馬鹿が使うと簡単に破綻する。
まあ強引に破綻させようと思えば破綻させることも出来なくは無いが
普通に使ってる限りにおいて気をつけるべきは循環参照くらいでないかね
初心者がCComPtrを使う理由は、なんかカッコイイ気分になれるからだ
もちろん初心者はグローバル変数として持っている
旅をする理由は、帰る家があるからだ。
ここでいいのかな…ちょっと質問です。
今、2Dメインのアドベンチャーゲームを作ってるとして、
そこに一部だけ(エフェクトなど)、3Dを使おうと考えています。
この場合、以下のどれが一般的なんでしょう?
1) 2D部分も含めて、描画は全て Direct3D で行う。基本的に画像1枚に対してポリゴン1つ(四角形だから2枚だけど)(最終的な転送は Present)
2) 2D部分全体に対してポリゴンは1つのみ。2D合成済みのサーフェスを作成し、その唯一のポリゴンを使って描画(最終的な転送は Present)
3) エフェクト部分だけを Direct3D でサーフェスに描画し、そのサーフェスを2D画像として合成(最終的な転送は BitBlt)
Direct3D を使う以上は (1) が自然だとは思うのですが、
遠くにあるほど小さく写るわけでもない、Zソートはピクセル単位でなく画像単位で行いたい、
そもそも画像の拡縮すらめったに行わないアドベンチャーゲームで、
Direct3D は本当に向いているのか?という疑問を持っています。
よろしくお願いします。
Presentは転送を行うとは限りません。
デバイスを作るときに渡したパラメータにより内部の挙動は変化します
>>810 何と比べて?ってのが非常に気になるが・・・
問題は回転と速度ぐらいだよ
そんな面倒なことしないならGDI+で十分。回転もできる。
ただ、任意のアルファ効かせながら、カラーキー的なアルファも同時に使うとか微妙なことがやりにくい。
それと色々(この色々も微妙なんだが)やってしまうと遅いので画面の描画物も数えられるぐらいに留めておいたほうがいい
ただ、開発してるとわかるんだけど色々ごちゃごちゃ考えなきゃならないなら
いっそDirect3Dの最低限の機能だけで組んでしまったほうが色々と楽
なので今はDirect3Dが向いてるかどうかじゃなくて
Direct3D以外の選択肢がほとんどないってとこ
813 :
810:2007/06/10(日) 16:04:13
うーん、Direct3D を使うのはほぼ決定済みなのですが、どこまでをそれで行うかというのを迷っています。
>>810 の (1)〜(3) まで考えたのですが…。
>>810 で言う2D処理は、最終的な画面への転送こそ BitBlt ですが、他の部分で GDI は使いません。(全て自作ルーチンで行っています)
>>813 とりあえず
>>812の2行目を解決してくれ。
車を選ぶのだって最高速度を重視するのか、燃費を重視するのか、オプションを重視するのか、見た目を重視するのかなど色々ある。
お前は何を比較して選びたいんだ。
815 :
810:2007/06/10(日) 16:34:18
>>814 そうですね、すみません。やはり速度重視で行きたいです。
816 :
810:2007/06/10(日) 16:46:47
返答になってませんでした。
基本は速度重視で行きたいです。
画像の回転は、頻繁には行いませんが、必要です。
また、描画する物体もそこそこ必要です。微妙なこともやりたいです。
現状、2Dのみですが、そこそこいろいろできるものがあります。
ただ、これに3D処理を追加したい、3D処理ならやはり Direct3D を使った方が高速と考えました。
3D処理を追加することで、現状の機能を犠牲にはしたくないので、
贅沢ですが、「現状のいろいろな機能を実現できることが必要で、その中で可能な限り速度を追求したい」といった感じです。
いろいろな機能というのは、おっしゃられたとおりの、回転や半透明、カラーキーなど、いろいろです。
DirectXでの2D描画であればトランスフォーム済み頂点(画面の左上が(0,0)の2次元+奥行きとか)で十分じゃね?
テクスチャ読み込みの段階でカラーキーは設定できるし、半透明だってD3DXCOLORでRGBとアルファ値が設定できる。
回転もRotationZでもかければいいのかな。
初めからDirectXで組んでいれば何の問題も妥協もなさそうだが。
>回転もRotationZでもかければいいのかな。
お前頭悪いだろ。
819 :
810:2007/06/10(日) 19:09:00
もともと、DirectX は使ってません。
うーん、他の方はどんな感じに設計してるんでしょう…。
>>818 基本的な処理だと思った俺は馬鹿なのか(´・ω・`)
>>819 スプライト描画するのも1つだよ。
個人的には
>>817が書いているTL頂点が好きなのでやってる。
考え方は3Dと同じだし、頂点1つ1つに色やテクスチャが設定できるから様々な表現が出来る。
もちろん回転や半透明描画、自分で設定しているわけだから四角形じゃなくても台形やそれ以上の多角形も描画できる。
まぁ、今回の場合は全部簡単なものを作って、1秒間に同一のものを何枚描画できるか試したほうが良さそう。
試せないような状態であれば直感で1つを突き進め、理解して余裕が出だしたら他の手段を試して比較するとか。
>>820 >>818は天才だからZ軸回転なんか使わずXY軸回転だけで表現するんだよ。
今はそうでもないけどスプライト描画は昔糞重かったからまだそのイメージを引きつっている俺ガイル
823 :
810:2007/06/10(日) 20:03:53
スプライトにしてもトランスフォーム済み頂点にしても、
みなさんの話を聞いてると、(1) の方法が前提のようですね。
とりあえず (1) でやってみます。自作2D処理ルーチンはほぼ完全に捨て去ることになりそうです。
ありがとうございました。
D3DHALで高速処理が可能になるけど
D3Dやれば後は何も考えなくても良いわけではないよな
画面構成や演出には気を使う
で、実は
>>810の主な処理用途が1画素処理だったりしたら笑うw
Direct3D全く役に立たんぜw
出したダイアログ全部に3Dデバイス作成とかなるとちょっと疲れるよね
見積もりと大分違うことになると思う
前にそういう仕事があった
出す画面全部にDirect3D使って描画する必要があるの
アフォかと思った
プロセスが同じならデバイスは一つで十分。
アフォなのはお前。
ここはアフォがアフォを煽りそしてその姿をアフォが見てアフォみたいに笑うスレ
>>826 SwapChainも知らずに随分偉そうだな
>>827 マジでw
でも重要なのはそこじゃなくて色んな部分に3D画面はっつけるのが結構面倒だったって話なんだ
非常に重要な部分なんだが、アフォの考えはさっぱり理解できない。
Vistaでフルスクリーンにした場合、XPで同じスペック・フルスクリーンで実行するのと同じ能力を期待してもいいのでしょうか。
Vistaは無駄な機能が多いと聞きますし、DX10+Vistaで飛躍的に能力が上がるとも考えられませんしやはり遅くなるのですかね。
「Vistaは無駄な機能が多いと聞きますし、DX10+Vistaで飛躍的に能力が上がるとも考えられませんし」
は、「やはり遅くなる」の理由になってないだろ!!ほんと頭悪いな
別に間違ってなくね?
飛躍的に上がらない>上がる>同じ>遅くなる だろ馬鹿
>>832 Vistaじゃないから試せないけどベンチの結果が悪いとは聞くね。
XP用のをVista用に変えたベンチだから悪くなったのか、そもそもVista自体に問題があるのか分からんが。
>>835 Vistaの無駄はDX10+Vistaで飛躍的に能力が上がらない限りXPと同等以上にはならんぞw
ちょっとやそっとの処理能力改善なのであれば遅くなる。
DirexrXに限ったことじゃないがアプリケーションが重くなるとの理由で避けている人も多い。
XP以上の性能にすることも出来るが現状では現実的じゃないね。
物ゲームだと今のハイエンドクラスをプレイヤー全員に望むことになりそうだし。
今のところビスタなんて個人で買ってる人は相当な物好きかビギナーぐらいじゃない?
んー、そろそろVista使ってる人も増えてきたよ。
MSの犬は黙ってろ
シェアどのくらいか数字出てないのかね?
どうやって集計をとるつもりなんだ?
馬鹿はそういうことを疑問に思わないんだな。
MSの犬て
DXスレでなんてことを
>>842 別に俺らが集計しているわけじゃないし、気になるんなら相応の会社に聞いてくれ
つーことはあれか、そろそろ本腰を入れてDX10を迎え撃たないといけないわけか
>>845 そうゆう、宣伝目的のプロパガンダを信用しない方が良いよw
3パーセントにして一番得するのはだれで、利権を保有しているのがだれかを
よく考えてみれば、いうまでもない。
>>847 どういう計算で「3%はプロバガンダだ」と判断した?
一般的な家庭用PCの買い替えサイクルは10年に満たないわけだから、
現時点で 3% ってのはかなり控えめな数字だと思うけど。
>>848 そのけいさんでは10年後にはwindowsXPは消滅するなwwwwwwww
頭を使いたまえ厨房くんwwww
別にMSが生産を止めても市場には95ですらまだ新品が売ってたりするし消滅はしないだろ。
でも実際買い替えのときに今更95にする人は稀だし、95搭載のメーカーPC販売なんか0で消滅と言えるんじゃないかな。
自作せず買い換えるということであれば、既に大半がVista搭載になっているので
1年後にはXPの月間販売シェアが0%(0じゃなくて約0)になっても不思議じゃない。
でもこれは販売シェアじゃなくてネットに繋がっているPCのOSの集計だからね。
繋がっていないPCにはXPが多いと思うけど、俺たちゃそんな輩を相手に作っているわけじゃないから関係ないけどね。
まさか業務内容の不明点をここで書くやつはいないと思うが。
>>850 あまり相手しない方がいいよ。
時間の無駄だから。
ネットに繋がってるPCのOSが解ったらセキュリティーの問題になるって・・・・・
だから調べようがないから、自分の利益になる数字にすると考えるのが妥当だろうね
普通はいくつかの提携サイトから情報をもらって調査するもんだと思うが。
IE や Firefox をそのまま使ってるんなら、OS ごとに UA が違うから OS は解る。
調査対象となったサイトが非公開なので、どの程度あてになる数字なのかは
全くわからないけど。
ホームページ持ってる人なら自分のページで調べてみるのもいいかもね。
Vista普及率(%)=((年)-2006)^3 *3
オブジェクトがスクリーン上の(x,y)のどの位置に表示されてるかを調べる方法ありますかね?
表示したのが自分なら、どこに表示したかは自分が知っているんじゃないのか?
3Dのオブジェクトってことだろ
3Dだろうが2Dだろうが自分が指定した場所にしか表示されない。
自分が指定してない場所に表示されるから調べたいっつってんだろカス
例えば3Dで立方体を表示した場合でも、カメラの位置によって
スクリーン上の表示位置は変わりますよね?それを簡単に調べられないかということなんですが
D3DXVec3Project(&Screen3,&Pos3,&ViewPort,&matProj,&matView,&matWorld);
昔のやつからそのまま引っ張ってきたやつのコピペだから、あとは変数名でなんとか理解してくれ。
Screen3.x、Screen3.yにスクリーン上のXY座標。
Screen3.zがマイナスだとカメラの後ろにいるんだっけか。
matWorldが
D3DXMatrixIdentity(&matWorld);
しか処理してねぇけどこれでよかったっけwwwww
>>860 カメラの位置は自分で指定しているんだからその通りに表示されているだろ。
自分で表示しているのに何で調べられないんだ?
質問
1+2=3
足す数を変えると答えが変わりますよね?それを簡単に調べられないかということなんですが
答え
普通に計算しろ
>>860 要するに、3D空間のある座標(x,y,z)にある物体が、
ウィンドウのどの位置(x,y)にあるかのウィンドウ座標を調べたいってことでしょ?
単に座標変換後の座標を調べればよくない?
座標とカメラの向きなんかで計算できそうだというのは解るんですが、
具体的にどのようにすればいいのでしょうか・・・
使う式や関数を教えていただけないですか?
>>864 座標変換後の座標??
あー、盛り上がってるところすみません。
DirectX9でビルドしていたソースをDirectX10でビルドするには場合によって大半の修正をしなければなりませんが、
10のビルドでは修正しなければならないアプリケーションを9で実行可能ファイルにした場合はVistaでも動くのでしょうか。
(= VistaでDirectXのアプリケーションを実行するには必ず10でビルドされている必要があるのかどうか)
>>867 Vista では DirectX 9 を使ったアプリは動かないから、DirectX を用いた
ゲームやアプリは今のとこカプコムの Lost Planet 以外一切動かないよ。
・・・とか思う?
実行できるかどうかと聞かれればYESだけど、正常に動くのは数えるほどしかないね。
3Dゲーは特に突然止まったり落ちたりする。
これがDX10でビルドするとエラーを吐く部分なのかもね。
カプコム
>>869 そこまで酷いってのは、ドライバの問題じゃない?
漏れは洋ゲーのデモとかベンチとか試してるんだけど、
今のとこ 100% 動いてるなぁ。7,8本しか試してないが。
自作のアプリでもこれといって問題ないし。
IME周りは泣かせるな
DirectSound3Dも
どうせメモリ関連いい加減なソフトが落ちてるだけだろ?
874 :
デフォルトの名無しさん:2007/06/13(水) 22:14:11
>>865 BBXってサイトいって
検索キーワードに「ワールド座標からスクリーン座標」っていれて検索してみ?
875 :
874:2007/06/13(水) 22:18:33
>>865 ただ、ここで出てきたプログラムを何も考えずに実装して「はいおしまい」じゃ進歩がない
結局、お前、何か作ることばっかりあせってるみたいだけど
正直、なにも得られず終わると思う。
何作ってるか知らないけど基本の座標変換もわからず前へ進もうってのが
結果としてすげーまわり道してると思う
多分、ローカル→ワールドの変換も知らないだろうし、スクリーン→ワールドもやっぱりわからないだろう
なにかやるたびにすぐつまずいておもしろくないと思う
ああ、ローカルA→ローカルB、ローカルB→ローカルAとかもな
ユーザがランタイムをダウンロード出来るようにダウンロードが出来るページにリンクを張りたいのですが
MSが推奨するリンク先や提供しているバナーなどあるのでしょうか
>>878 ありがとうございます。
でもバナーのほうは違いますよね、これ
激しく写生した
誤爆??
886 :
デフォルトの名無しさん:2007/06/16(土) 12:11:57
質問させてください、
D3DPOOL_SYSTEMMEMで作ったオフスクリーンサーフェス(以下A)から、
D3DPOOL_DEFAULTで作ったテクスチャのサーフェス(以下B)に
UpdateSurface()で転送を行い、直後にBのテクスチャをSetTexture()して
普通に4角形ポリゴンで表示しているのですが、
正しく表示されません。毎フレーム更新しているはずなのですが、
動いている様子もありませんでした。
D3DXCreateTextureFromFile()で読んだテクスチャをSetTexture()すると正しく表示されるし、
D3DXSaveSurfaceToFile()やD3DXSaveTextureToFile()でBのサーフェスやテクスチャを
BMPに保存してみると、毎フレーム更新した内容が正しく反映されています。
SetTexture()で貼り付けるとおかしくなる原因が見当つかないので、
アドバイスいただけないでしょうか。宜しくお願いします
PS4.0を使いたいために画像処理系のソフトをDX9からDX10に移植しようと考えているのですが、
Offscreen Surfaceとかってどうやって移植すればいいのでしょう?DX10にはそれらしい物が一切ないんです。
DX9でやっていることは、CreateOffscreenPlainSurfaceで1920x1080のサーフェイスを確保し、
Pixel Shaderでαブレンディングやミキシング、その他編集を行ってから、StretchRectでバックバッファーに転送しPresentを行っています。
DX10は初めてなんですが、なんというか全然違うものになっているような感じです。
背景をマップチップの要領で作成しました。
正しく表示されたのですが、D3DXMatrixScalingを使って拡大したところ枠線がでてきてしまいました。
背景は最大で640*480ドットほどなのでそのサイズのバッファを用意してもいいのかなと思っています。
そこで、
・拡大しても枠線が出ないようにする方法
・背景用のバッファの作成方法
を教えてください。
環境はDirectX9+VisualStudio2005です。よろしくお願いします。
>>888 前者:グラボによる
後者:テクスチャと同じ
>>888 そこまでわかってて聞きにくる必要があるわけねー
てめー調べるのが面倒臭いから誰かにやらせるつもりできただろ
この糞やろー
手間を惜しむならゲームなんて作るのやめろ馬鹿
891 :
デフォルトの名無しさん:2007/06/16(土) 17:17:18
勇気を振り絞って質問したいのですが・・・・
ネトゲプレイのためにDirectX9,0cを一応インストールした(つもり)なのですが、
本当にインストールできたのかどうかすら分かりません。OTL
なんかいい確認方法かなんかありません?
馬鹿にされるのは承知の上で。
>>891 コントロールパネル→プログラムの追加と削除
の一覧にあるはず
9.0cならDecember 2004
ってでるかも、たしか
>>891 なぜそのネタでム板のDirectXスレなんだ?ってのはおいといて
「ファイル名を指定して実行」でdxdiagでもやればよろし
894 :
デフォルトの名無しさん:2007/06/16(土) 17:32:28
>>892 ひとまず返答ありがとうございます。
で、確認してみたところありませんでした(ノ∀`)
DirectXのダウンロードページで続行クリック
↓
正規のWindows(?)をダウンロード
↓
DirectXRuntimeってのを実行
↓
DirectXセットアップウィザードが出たので、使用承諾契約に同意して完了
という手順まで踏んだのですが、ここからどうすればダウンロードできるのかがまったく分かりません・・・
すみませんが、誰か手順を詳しく教えてくれないでしょうか?
勿論馬鹿にされるのは承知の上で
>>894 ここプログラミング板だからランタイムは板違い
>>894 馬鹿にするのは遠慮しとくが、
ここはC/C++を使ったDirectXプログラミングについて扱うスレだ。
なんでスレ違い、もっと言うと板違い。
他所で質問した方が的確な答えが返ってくるよ。
897 :
888:2007/06/16(土) 19:42:21
>>889 テクスチャ作ってそこに書き込めばいいのですね。
テクスチャに書き込む方法調べてみます。
ありがとうございます。
>>890 >>1にのっとり、質問する資格があると判断して質問しました。
それにしても暑い日が続きますね。
898 :
デフォルトの名無しさん:2007/06/16(土) 20:10:45
>>897 自分のが正しくスレを使ってるんだぞってアピールだろうけど
正直、てめーみたいな糞は何を作ろうとしても駄目だと思う
マップチップの話は消えてしまったん?
だったらはじめからチップなんて使うなよw雑魚w
同じがもんがダブるんだったらpngで敷き詰めておいても圧縮がかかるから
サイズは増えなかったりするw
>>898 お前、キモいから失せろよ。
スレタイも読めないのか?
自演はやめましょうとは書いていませんが自演はやめましょう。
>>902 どのレスとどのレスを自演だと思っているの?
905 :
886:2007/06/17(日) 02:39:44
自己解決しました。
CreateTexture()の引数のLevelsに0を指定していた為
自動的にミップマップが作られてて、レベル0にしか書き込んでなかった為
いつもレベル1以上のサイズで描画していたからでしたヽ( ´・ω・)ノ
Levelsに1を指定したらうまく表示できました。
906 :
デフォルトの名無しさん:2007/06/17(日) 05:34:13
>>887 DX9でのCreateOffscreenPlainSurface→(Pixel Shader)→StretchRect→Presentを
DX10で同等の処理を行うためには一般的にどのような方法があるかヒント頂けませんか?
SDKを見た感じだと余りにもShaderや3Dモデルに傾斜しすぎている見たいでDDrawやDX9までの知識と全然違うみたいです。
画像処理ツールとかならDirectXのターゲットとしては肩身狭くて当然じゃないの?
directXの映像以外の機能も
ビデオカードやGPUを使って計算したりしてるんですか?
なんでそう思うの?
質問を質問で返すな!!!!
なんで質問を質問で返してはいけないの?
質問を返すのは、相手がどれほど愚かな質問をしたかを思い知らせしめるためだ。
だから学校の教師は自分がそうされると激怒するのだ。
>>908 んで
計算してたからなんだっていうの?
してなかったからなんだっていうの?
なんなの?
何が「もう」だ。三回も言いやがって。
副詞のリフレインは頭が悪く見えるぜ。
…
サウンド:サウンドチップで支援
ショウ:GPUで支援
インプット:デバイス内のチップで処理後に入力
プレイ:蟹さんががんばってます
入門書の最初のほうに書いてあるかも
あとパーツのマニュアルとか・・・
GPU使うかどうかはDirectXがグラフィックのために自動的に使う以外は
プログラマの裁量次第
ミドルウェアでGPU使うこともあるけど無料のやつでは見たことないなぁ
DirectX10よりDirectX9が使いやすいならそっちでいいじゃん。
PS4.0を使うことが最大の目的なら、その目的のために自分が先駆者になれ。
>>918 ってことは、DX10にはOffscreen Plain Surface見たいな物はなく、たとえただ単にサーフェイスに
書き込みを行いたいだけでもテクスチャーとして扱うしかないという事ですか?
初心者質問スレなのに先駆者になれとか全然スレのタイトルと違う感じが、、、
どなたかDXグルの人でDX10でOffscreen Plain Surfaceを扱う術をご存知の方いらっしゃいませんか?
サーフェイスって何をするためのもんだっけ?
ただのバッファのことちゃうの?
共通語でお願いします。
関西弁ではなく共通語でお願いします。
>>920 DX9のOffscreen Plain Surfaceって知らんのか?
知らないのにこのスレで何しとるん?
何しとるん、て・・・
知らないから、聞いているんじゃないの?
>>924 その用途がよくわからん
アレって何に使えるんだっけ?
テクスチャはまあテクスチャとして使えるけど
サーフェイスってなんにもつかえねーじゃん
メモリデバイスコンテキストっていうか、画像のRGBを詰め込んだバッファ以上の働きすんの?あれ
つまり何がいいたいかというといらねーからなくなったんじゃねーの?
って感じ
テクスチャとサーフェイスを別のものだと思っている時点で、
まともにプログラムを組んだことがないのが丸わかり。
そんな疑問を持つ前に手を動かせよ、どうせ頭が悪いんだから考えたって無駄。
テクスチャは一つ以上のサーフェスを持ってる
だからこそ、テクスチャを貼るとポリゴンに画像が表示される
D3Dで画像を保持するリソースはサーフェスだけ。
間違ってもテクスチャそのものではない。
単体でサーフェイスをもつことになんの意味が
質問?感想?
回答者に対して何の礼儀も感じられない質問者。
しかもせっかくもらった回答文を真面目に読んでいないことが見え見え
サーフェスとは何かテクスチャとはどういう関係か、なんて
初心者向けの入門やらヘルプやら幾らでも資料あるのに。
以下スルーでお願いしますね〜
すいません
インデックスバッファーの学習をしているのですが、
インデックスバッファーには16ビット用と32ビット用があるみたいなのですが、
例えば16ビット用だったら、65536個の頂点まで使えるということでしょうか?
それとも、65536個のインデックスを使えるということなのでしょうか?
まだあまり複雑な処理はやらない(できない)ので問題にならないようなきもしますが、
気になったので。
>例えば16ビット用だったら、65536個の頂点まで使えるということでしょうか?
>それとも、65536個のインデックスを使えるということなのでしょうか?
インデックスバッファの要素が16bitという意味なので正解は前者。
インデックスバッファの要素数自体には制限は無いよ。
で、結局はDX9のオフスクリーンサーフェイスと同等なことをDX10でやるにはっていう質問に対して全く回答がないようだが。
残念ながら俺もDX10はこれからって所なんで直ぐには回答できないが、同じく興味はある。
ぱっとSDKを見た感じだと残念ながらオフスクリーンサーフェイスのようなものはもはやDX10にはなさそう。
多分だけど2Dテクスチャーってのを使うことで同じようなことが同じようなことが出来そうだけど、
output managerとかraster stageとか、ミップマップ、テクスチャー、その他もろもろ、
DX9までは一切考える必要のなかったことまで一応理解して設定しないといけないみたい。
面倒だけどしょうがないかな?
もっと他に良い方法があったら教えて欲しい。
>>906 未だに質問の内容がよくわからんのだけど
CreateOffscreenPlainSurfaceで作ったサーフェイスって何に使ってるの?
Pixel Shaderの入力なの? 出力なの?
>>919 を見る限り出力っぽいけど、
レンダーターゲットサーフェイス作るなら普通CreateRenderTarget使うよね。
それともレンダーターゲットは別にあってGetRenderTargetDataで取り込んでるの?
ちなみに自分の場合、DX9の時代からいつもレンダーターゲットテクスチャとして作っていた。
んで、後で3Dオブジェクトに貼ったりPixel Shaderに再投入したりするための仕組みを
一通りつくっちゃったので、「たとえただ単にサーフェイスに書き込みを行いたいだけでも」
と言われてもあんまり切実さが伝わってこない。
てかStretchRect使うのは邪道だと思ってるし。
>>935 恐らくだが、画像処理ソフトかその類なんだろう。
例えば、1024x768の画像をオフスクリーンサーフェイスに読み込み、
それに対してPixel Shaderで処理を行い、
StretchRectでウィンドウの大きさに設定されているバックバッファーに転送して、
そのままPresentで表示しているだけなんじゃね?
ビデオとかドロー系の2Dソフトだとそういう処理を良く見かけるけどな。
そういったソフトだと3Dとかテクスチャーの概念は一切出てこないから。
StretchRectって2D系だと良く使うよ。
一番典型的なのはアスペクト比を変更する場合とかかな?
720x480の動画を16:9でワイドスクリーンに1920x1080に表示するとか。
このスレは3D系の人が多いと思うけどスレタイの通りDirectXだから2Dも考えないとな。
>>936 >それに対してPixel Shaderで処理を行い、
割と長いことDirectX使ってるけど
CreateOffscreenPlainSurfaceで作ったサーフェイスを
Pixel Shaderの入力に使う方法って無いと思ってた。
実はできるの?
一瞬D3DXFillTextureTXのことかと思ったけど
これも対象はテクスチャだしなぁ。
>>937 あ、確かに駄目かも。
って事は、オフスクリーンサーフェイスをCPUで処理するためかな?
これ↓テンプレに入れようぜ
質問者は実現したいことを書け
「DirectX10でOffscreenPlainSurfaceを使いたい」
ってのは実現したいことじゃなくてあくまで方法止まり
これにとらわれているより直接的な方法を聞いてしまったほうが早い
(例:ムービーを再生したい、ピクセルシェーダで描画したい等)
どうしてもこの方法でいかなきゃいけないときは
過去の資産をなるべく使いたいので〜とか
そういう理由をちゃんと書いてくれ。無駄に荒れるだけ。
いくら質問掲示板だって入力したら出力がでるわけじゃないんだ
ディスプレイ越しでわかりにくいですが相手は人間だよ
社会人として恥ずかしくない行動を心がけよう
>>940 長すぎる。却下。
つかこのスレを見ているのは社会人だけじゃないぞ
勝手に限定すんな
ディスプレイ越しでわかりにくいですが相手は人間だよ
霊長類として恥ずかしくない行動を心がけよう
このスレを見ているのは霊長類だけじゃないぞ
勝手に限定すんな
>>941 いや、手短にいうとこれ↓だけ
「質問者は実現したいことを書け」
>>943 このスレは社会人はともかく、霊長類ですらない何かも読んでいるのか・・・
あなおそろしや
DirectXを使って2Dのプログラミングをしているのですが、
ラスタオペレーションを使った描画(描画する画像のRGB値反転など)はどうやったらいいですか
ピクセル単位でRGB値をいじるにはどうしたらいいですか
ラスタオペレーションはピクセルフォーマットに依存する処理だから不可能。
ステートを工夫すればアルファブレンディングで似たようなことは可能。
ピクセルを直にいじるには描画先のサーフェスをロックして書き込み。
だがそういう用途をメインに使うことを考慮して設計されているわけではないので効率は悪いし
環境や条件によっては不可能な場合もある
ずーっと↑から見てみると分かるけど、やっぱ2Dの需要多いよな。
繰り返し出てくるけど、まともに初心者向きに答えている人いないね。
>>940 自分自身で勝手に仮定立てて勘違いしているのお前かもな。
スレタイ嫁。初心者質問だぜ?
>「DirectX10でOffscreenPlainSurfaceを使いたい」
立派に実現したいことと思うけど?
>>946 CPUとGPUのどちら側から弄りたいのか?それで話がかなり変わるから。
949 :
デフォルトの名無しさん:2007/06/19(火) 00:42:30
>>948 じゃあ、お前が教えてやれよw
何もしないで偉そうにしゃべってんじゃねー
改善案出しただけだろ
初心者が誰も使ってないようなサーフェイス使おうと頑張ってるところで俺は止めてやるがな
>>949 お前が出て行くべきだと思うけどな。
少なくとも>948は>946の話を聞いてるし。
このスレでいう共通語というのはC++かね?
>>951 安価打てよ
それだと誤爆と思われるぞw
953 :
デフォルトの名無しさん:2007/06/19(火) 07:36:23
956 :
デフォルトの名無しさん:2007/06/19(火) 07:46:26
>>954 お前は誰の質問にも答えてないからお前が一番出てけばいいと思うよ
人のレスばかりすくいとって自分のしたい流れにもってきたいのがミエミエ
話を元に戻すと
「DirectX10でOffscreenPlainSurfaceを使いたい」
こういう↑意味の無い(と思われる)質問ってどうよ?
すげー無駄だと思わねー?
まず、なにがしたくてこんなことしてるのかからはっきりしてくれないと
上のレス群みればわかるように無駄に荒れる
もし、なにか別の目的のためにたまたまそいつがみつけた方法がこれであったのなら
別の手段を考えたほうがいいと思う。初心者スレでもあるわけだし
判断のミスも考慮したい
>>957 てか、荒れている原因は別だろ?
回答がさくっと出てこない→なんでそんなことする必要あるんだ?→質問者が悪い。っていうパターンに見える。
>>919 質問内容はDX9にあるOffscreenPlainSurfaceと同等の処理をDX10でも行う方法を知りたい。
行間を読むと、DX9で行っている2DのコードをDX10に移植したい。じゃないか?
もしそうだとすると、2Dテクスチャーを使えばいいよ。
つまり、DX10からはDX9のOffscreenPlainSurfaceに該当するものはなくなっちゃいました。
DX9だとパイプラインを全く考えずに2D用のバッファーを扱えましたが、
DX10だと一応テクスチャーを意識して設計する必要がある。
ま、Winプログラム組む時に初期化やら呪文やらあるのと同じようにちょっとしたコードが必要になる。
レンダーターゲットビューとかアウトプットマネージャーに設定とか、ビューポート等の呪文が必要。
面倒だけど汎用性と効率のために設計されてからしょうがないと思って諦めてくれ。
>>なんでそんなことする必要あるんだ?
俺はこんな回答を返す奴が良くないと思う。
わからんなら黙っとけと、俺みたいによ。
ちなみにオフスクリーンサーフェイスは使うよ。
デバイスのCAPSに影響されず、必ず作成が成功するのは魅力だ。
当然PixelShaderのdestには使えないが、質問者は端折っただけだろう。
んで、DX10はCAPが無くなったと聞く。
なら、オフスクリーンサーフェイスが無くなってもしかるべきかもな。
>>959 それじゃ進歩がねーじゃん
このスレだって質問者のためだけにあるわけじゃねーし
これこれこういう風に考えて、これを使うという結論に至りました
ってちゃんと言えれば、「おおなるほど、でもね〜orじゃあ〜」って繋がるわけだし
質問者も回答者も黙ってるのは一番よくないと思う。
ちょっとでも知ってたり、もしかして〜みたいなことやろうとしてる?っていうところから
会話ってはじまるんだと思う
質問者に完璧な質問を望んでいないのと同様、回答者にも完璧な回答を求められても困る
だいたい全部ピンポイントで返せるわけがない
そこらへんは人が人に頼む以上ある程度の受け答えは覚悟しないと・・・
そういうのが我慢ならないなら、全部自分でなんとかすりゃいーじゃん。人になんかたよんないで。
質問者、回答者双方ともなんも答えない状況ってのは俺は回避したいと思う
一応初心者スレなわけだし、一般的なやり方ってのを知りたい奴が質問にくるんだと思う
初心者だから、いま自分が詰まってるところを局所的に質問してしまうんだけど
本当はこういうやり方が一般的で君のやり方はちょっと一般的でないとかそういう場面のが多いと思う
そこで「なんでそんなことしてんの?」って聞いてくれる状況は俺はありがたいと思うが、どうだろうか?
>>960 そんな細かいことはフェイスツーフェイスの時だけにしてくれ。
スレでいちいち細かいこと書かれたら読むほうもウザイ。
それよかピンポイントが2hらいしいと思う。
お前みたいなやつはここには合わないからリアルでリアル人間に煙たがれてくれ。
>>958 >>959 その回答で質問者も納得だろうね。別に返事をもらわなくても分かるだろうし。
>>961 掲示板と実際に顔合わせて話すのとで何の違いがあってそんなこと言ってるの?
面倒だろうがどうだろうが通じるわけないじゃない
今回分からないから質問者罵倒の方に持っていった人間は、どうしようもなく
駄目だと思うけどなぁ。
>>959 >当然PixelShaderのdestには使えないが、質問者は端折っただけだろう。
いや、だからsrcに使うのも無理じゃね? という話を上に書いたとおりなんだが。
質問者はあたかもDX9ではできていたかのように書いているけど
仕様を良く読めばそれはもともとDX9でもできないことのはずで、
微妙に釣りっぽい気がしてきたのでしばらくスルーしてた。
ここって初心者スレなのに初心者お断りって空気あるよなぁ。
ここほどではないが、くだすれもたまにそうなるし。
初心者はわからないから、おかしい質問だってするのに、初心者丸出しの質問に
大しては、まず罵倒するか自分の意見を押しつけるだけで的確なアドバイスを
する空気すらないもんな。
この分だと、しっかり入門・初心者・素人と細かく分けないと、本当に始めたばかりの
初心者とか、3Dの知識が乏しい人間とかはまず問題解決できないよな。
大抵こう言うと、金もらっているわけじゃないのだから、そこまで親切にする必要はないとか
言うのいるが、なら黙ってろと思うし。
今回のOffscreenPlainSurfaceに関しては、随分時間が掛かって質問自体が少しおかしい
と言うことが説明されているが、初心者にはそんなこと言われなければわからない。
今回に限らず、仕様や関係まで把握してプログラム組めるようになればそれは初心者卒業レベルだと
思うぞ。
> 仕様を良く読めばそれはもともとDX9でもできないことのはずで
今回のこのグダグダぶりはそれだけが原因じゃないだろうけどね。
一番最初にそれを指摘すれば良いだけだったんだし。
>この分だと、しっかり入門・初心者・素人と細かく分けないと、本当に始めたばかりの
>初心者とか、3Dの知識が乏しい人間とかはまず問題解決できないよな。
問題解決の場所は何も2chだけじゃないんだが。
まだ説教合戦やってたの。
まぁそろそろスレも途切れるしことだし、
質問するタイミングがつかめない他の初心者さんはもう少し待っててね☆
いつになるんでしょうか…
もうどうでもいいと思うけど、俺はDX9でたまにOffscreenPlainSurface使うよ。
CreateRenderTarget()で作成したターゲットサーフェス(≠テクスチャ)に対して
描画したデータをCPU側で取得したいときに間接的に必要になる。
D3DPOOL_DEFAULTのレンダーターゲットは直接ロックはできないから、
GetRenderTargetData()でシステムメモリにコピーするときにOffscreenPlainSurfaceを介する。
http://msdn2.microsoft.com/en-us/library/bb174405.aspx The destination surface must be either an off-screen plain surface
or a level of a texture (mipmap or cube texture) created with D3DPOOL_SYSTEMMEM.
まあ、これはDX9をある程度使い込んでる人には常識だよね。
もしこれ以外にOffscreenPlainSurfaceの有効な活用法があるなら是非教えてほしい。
>>959
スクラッチプールとはまた別のものなんだっけ?
オフスクリーンサーフェスでもプールは選べるよ。
俺は
>>971の用法ではヘルプの指示どおりD3DPOOL_SYSTEMMEMで作ってる。
一方、
>>887のようにStretchRectでオフスクリーン→デバイスの方向に転送する
場合にはD3DPOOL_DEFAULTで作っておかないと駄目らしい。ややこしいな・・・。
D3DPOOL_SCRATCHはDX8との互換性のために残してるだけじゃないかね。
>>887の「Pixel Shaderでαブレンディングやミキシング、その他編集を行ってから」は
いまだに気になるところ。
>>973 単純にバックバッファを VRAM に持ちたくないってことなんじゃないだろうか。
>>974 Pixel Shader云々のくだりはCPUで同等の処理をやってるってことか?
多分、CPUとPixel Shader両方を使っていて、>887が問題になっているのはDX9にあった
OffscreenPlainSurfaceがDX10で見つからないんだけどって言うことだけでしょ?
Pixel Shaderの部分はDX9だろうがDX10だろうがテクスチャー経由にする必要があるから
別に>887はそこに関しては話を端折ったんだろ?
OffscreenPlainSurfaceに関しては>958が的確に回答しているからもうよいのでは?
ここの人間がランタイムだけ更新してどうするんだよ
んなことわかってる
// 何もしないマトリックス
D3DXMatrixIdentity(&m_view);
// カメラからの距離
const float fDistance = 0.1f;
// カメラの全計算を入れる
D3DXVECTOR3 vec3From;
D3DXMATRIX tmp;
// 回転
static float roty = 0.04f * (float)PAI / 180.0f; // 相対的な回転角度
if ( button == 3 )roty += 0.05f;
if ( button == 4 )roty -= 0.05f;
D3DXMatrixRotationY(&tmp,roty);
// 上下左右移動
D3DXVECTOR3 vec3NormalizeDir( x,y,z+100); // 正規化された対象からの向き
D3DXVECTOR3 vec3At(x,y,z); // カメラの対象をSet
// 頂点変換
D3DXVec3TransformCoord(&vec3NormalizeDir,&vec3NormalizeDir,&tmp);
// 上記計算を格納
vec3From = fDistance * vec3NormalizeDir + vec3At;
// カメラの上をSet
D3DXVECTOR3 vec3Up(0.0f,1.0f,0.0f);
// カメラ位置を設定
D3DXMatrixLookAtLH(&m_view,
&vec3From, // カメラの位置
&vec3At, // カメラの方向を向ける点
&vec3Up // カメラの上の方向
);
// 生成したカメラを反映
m_pD3DDevice->SetTransform(D3DTS_VIEW,&m_view);
のようにしてるんですが、カメラを回転させた後、カメラが向いている方向にズームしたいんですが
ぜんぜん別の方向にズームしてしまうんです
どうやって解決してるんでしょうか・・・m(_ _)m
983 :
デフォルトの名無しさん:2007/06/20(水) 23:03:50
言い方が悪かったです
つまり回転しても常に注視点のほうへ動いてもらいたいんです
中身を理解していないのが丸わかりなので、
まずはD3DXに頼らずビューを動かすところから始めましょう。
985 :
デフォルトの名無しさん:2007/06/20(水) 23:26:32
>>984 わからないやつは書き込まないでください
お前の意見は聞いてません
さぁ、誰かわかる人教えてください
いつもの流れでこのスレも終焉を迎えるのか。
これはひどいwwww
989 :
デフォルトの名無しさん:2007/06/21(木) 00:04:51
>>989 (・ω・`)乙
これはポニーテールで勘違いがうんたらかんたら
まあ2Chにいるようなやつらはみな低レベルなプログラマなのはわかってるけどさ・。・・
スレも最後だからいいたいこと言っちゃうけど
>>981←この明らかになんもわかってねぇ奴どうすんの?
ここできても1週間もすりゃ飽きてやめてそー
996 :
981:2007/06/21(木) 02:17:34
自己解決しました
低レベルども^^