【C++】 DirectX初心者質問スレ Part17 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part16 【C】
http://pc11.2ch.net/test/read.cgi/tech/1202634347/
>2 一番下のサイト消えてるみたい
>>2 乙
スレ立てたのはいいが点プレ反の忘れてたぜ!
シェーダーファイル(テキスト形式)をコンパイル(バイナリ化)して ロードする方法ってD3DX〜とかにありますか?
7 :
デフォルトの名無しさん :2008/04/09(水) 22:00:08
このスレの住人なら知っていますね、あの糞開発ツールのことを ・自分のプログラムのバグなのかコンパイラのバグなのかわからない ・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している ・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている ・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる 糞だけど、政治的な理由で無理やり使わされているんですよね。 もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。 ・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。 ・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。 ・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。 バグレポートなどしてはいけません。改善要求などもってのほかです。 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。 ・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」 なんて話が出たら力強く机を叩き、会議室を出ましょう。 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。 糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
9 :
デフォルトの名無しさん :2008/04/10(木) 23:30:40
LPD3DXFONTは描画が遅いから使うなと言われましたが これより早い文字描画をする手段はあるのでしょうか?
>>9 必要な文字だけテクスチャとして用意して使う。
コンシューマ機では一般的な方法だけど、速度よりも使用料を削減するためにだったりもするけどね。
DrawIndexedPrimitiveUPで四角いテクスチャ3つ表示したいのですが、 何も表示できません。教えてください。 struct CUSTOMVERTEX{ float x,y,z; float rhw; DWORD c; float u,v; }; IDirect3DIndexBuffer9* pIndex; g_pD3DDev->CreateIndexBuffer(sizeof (USHORT) * 18, D3DUSAGE_WRITEONLY , D3DFMT_INDEX16 , D3DPOOL_MANAGED , &pIndex,NULL); USHORT index[18] = { 0,1,2,3,2,1,// 1枚目 4,5,6,7,6,5,// 2枚目 8,9,10,11,10,9// 3枚目 }; void *bBuf; pIndex->Lock(0 , sizeof(USHORT)*12 , (void**)&bBuf , 0); memcpy(bBuf , index , sizeof (USHORT) * 18); pIndex->Unlock(); CUSTOMVERTEX v[12]= { { x + width/2, y - height/2, 0.0f, 1.0f,0xffffffff, 1.0f, 0.0f}, { x + width/2, y + height/2, 0.0f, 1.0f,0xffffffff, 1.0f, 1.0f}, { x - width/2, y - height/2, 0.0f, 1.0f,0xffffffff, 0.0f, 0.0f}, { x - width/2, y + height/2, 0.0f, 1.0f,0xffffffff, 0.0f, 1.0f}, ...(あと8つほど略) }; g_pD3DDev->SetTexture(0, pTexture); g_pD3DDev->SetIndices(pIndex); g_pD3DDev->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); g_pD3DDev->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST ,0, 12,6 , pIndex ,D3DFMT_INDEX16, v , sizeof(CUSTOMVERTEX));
>11 モニタの電源が入ってないんじゃねーの? と俺のESPが発動したぜ
UPを使いたいのかバッファを使いたいのか、どっちかにしろ。危ないぞ
ライトの設定がONになってるとOFFで表示したいもんが表示されないとかなかったか?
3つで表示できないなら1つ表示の最小限のプログラムをテストすればいいよ。 問題点を絞っていかないといつまでも解決しない。
いつまでも目に頼ってるからそういうことになる
心眼か
18 :
デフォルトの名無しさん :2008/04/11(金) 18:33:59
WinXpのSp2についてくるDirectX(9.0c)があれば ラインタイムのインストールとかしなくても動くEXEが作りたいんだが SDKはどれを使えばいいですか?
19 :
11 :2008/04/11(金) 18:35:21
どうも。DrawIndexedPrimitiveの方だと上手く動いたんですけどね。
UP系はいいサンプルが見つからなくてよく分からないです。
>>13 どういうことですか?
msdn見る限りUP系もバッファを使うようですが……。
>>19 DrawIndexedPrimitiveUPの第・・・いくつめだか引数に指定するのは、
インデックスバッファじゃなくてインデックスデータそのものだと思ふ
>>11 でいうところのpIndexじゃなくてindex
21 :
11 :2008/04/11(金) 19:06:18
>>20 本当だ。インデックスデータにしたら描画されました。
ありがとうございます。
一件落着!
22 :
デフォルトの名無しさん :2008/04/11(金) 20:25:40
>>21 ろくに調べてないから頓珍漢なこと言ってるかも知れんが、それってIndexBuffer作る意味あんの?
24 :
デフォルトの名無しさん :2008/04/11(金) 20:50:02
>>22 トンクス
みんなSDKは最新の使ってるのかの〜?
>>24 使ってない。
・VS6.0を使ってるから
・DLL無いというエラーに素人がちゃんと対応できず、サポートがたるい
・古くても特に不便がない
DLL位動的に読み込めよ・・・
>>26 頼むから知ったかやめようよ、初心者質問スレでさ・・・
PC内に存在しないDLLをどう動的に読み込むんだろう
書き方が悪かったな 「DLLを動的に読み込もうとがんばって、読み込めない時は ユーザに適切なDLLをインスコする様にメッセージを出すアプリの少ないことよ」 こうですか
えー?なにこれ、これなんかエラーでた 俺ちゃんとDirectX9.0cとかいうの入ってんぜ? 何この不良品なめてんの サポートに文句つけてやる「なんか起動しないんすけど責任とれ金払ったんだぞこっちはボケ」
しかしd3dx9_xx.dll同梱して配布するとライセンス違反となる罠
だから古いSDK使うわけで
/*チラ裏 どうせ無償配布してんだから、つべこべ言わずに配布させろよ・・・*/
プログラマが「これくらいやってくれるだろ…JK…」と思うことは、大抵のライトユーザーにとって垣根が高い
同人ゲーなんかは無断で添付してるのも多いけどねぇ
>>34 インストーラのリンク張るくらいなら、最小構成のセットアップファイルをつけて
起動を促す方が良いと思う。
個人的統計によれば素人にゃこっちの方が行動を起こしてくれる傾向がある、気がする。
//素人もやる気ないし //マイクロソフトもやる気ないし //苦労するのはいつも作る側 //それでもC++で作るならまだいいほう //XNAとかラインタイムを3も入れなきゃならない //もうあほかと //ランタイム地獄に愛想つかしてVC++勉強したが //今となってはよかったと思う
うわー、同人ゲームのくせにランタイムインストールとか何様だよ めんどくせーなー 俺様のPCでもちゃんと動くようにするのがプログラマ奴隷の役目だろが わざわざNYでDLしてやったってのに糞が
>>39 インストーラは配布していいのね。
>>40 これだからなかなか金は取れないんだよな・・・俺無責任だしw
よし、D3DX使うのやめよう!
43 :
デフォルトの名無しさん :2008/04/12(土) 19:51:21
HLSLでのキューブマップの扱いについて質問です、
http://tpot.jpn.ph/t-pot/program/66_cube_normal/index.html ここにある内容をHLSLでやろうとしたのですが、
期待する値が取れてません。
解説と同じようにD3DXCreateCubeTextureでテクスチャを作って、
同じように中身を埋めました。
で、pEffect->SetTextureで渡してます。
HLSL側では、
textureCUBE CubemapNormal;
samplerCUBE CubemapSampler_forNormal = sampler_state {
texture = <CubemapNormal>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
};
でピクセルシェーダの部分で
N = texCUBE(CubemapSampler_forNormal, In.N).xyz * 2.0f - float3(1.0f, 1.0f, 1.0f);
とやっています。
何かおかしい部分ありますでしょうか?
44 :
43 :2008/04/12(土) 20:56:51
すみません、解決しました。 D3DPOOL_MANAGEDで作ったらダメなんですねorz RENDERTARGETにしてるからMANAGEDだと失敗するのかな。
RENDERTARGETは、DEFAULTじゃないとダメだよ。
D3DXVec2Rotateってないですよね? D3DXVec2Transformを使えばいいのですが、MATRIXを生成するのがバカらしい…
47 :
デフォルトの名無しさん :2008/04/13(日) 13:18:15
2Dの画像の描画をしたいんだけど、どうしたらいい?
49 :
デフォルトの名無しさん :2008/04/13(日) 13:47:59
>>49 お前、実際もの作るとかなったらそんな程度面倒がってたらなんも作れねーぞ
俺はDrawPrimitiveを薦めるけどね
51 :
デフォルトの名無しさん :2008/04/13(日) 16:05:07
52 :
デフォルトの名無しさん :2008/04/13(日) 20:00:01
HLSLのtex1Dってやつを使ってみようと思うのですが、 これはC++側では普通にCreateTextureでいいのでしょうか? 2次元のテクスチャでいいとすれば、どのように参照されるのかとか、 よろしければ教えてください。
>>46 自前でやればいいと思うけど。
XYの2次元ベクトルの回転なら(XcosΘ+YsinΘ, -XsinΘ+YcosΘ)
>>53 さすがに2次元ベクトルの回転は高校で習ったからわかりますが、お気遣いどうもw
いやー、ライブラリにあるなら独自作らないほうがいいと思ったもんで。ありがとう
>>54 荒らし?w
純粋にライブラリにあるかどうかが知りたかっただけなら
コンパイル通るか試すだけで済むだろ。Vec3Vec4の関数名は統一されてんだし。
それかヘッダ見るかすればいいのに。
Presentの引数を全てNULLにした際に描画される領域を取得することは出来ませんでしょうか。 DXが描画しているウィンドウ内に可動ツールバーがあり、 クライアント座標を取得する関数ではそのツールバーの領域も含めてしまうため求めたい値が取れません。 C++で取得できればこしたことは無いのですが、せめてDXで取得出来る形にさえなっていれば・・・
>>40 ネタのつもりでやってるんだろうが実際はこういう奴ばっかりなんだよ
で、ランタイム配布めんどくさいよねっていうと
そんなの気にならないくらい楽しいゲーム作ればいいとか
本題からズレたことを言っていい気になるやつが出てくる
DirectX8以前縛りで作るとそこら辺気にしなくてよくてラク
アホをイラつかせられるだけでも、DX9とかにする価値があるわけだ。
XNAなら DirectX .NETFW XNAFW の3つのラインタイムでイライラMAXだな
アレはユーザもイライラ 開発者もイライラ
>>55 あるものを発見するのは楽だが、無いものを無いと確信するのは難しい
また、ライブラリにあるものを自前で再実装するのは大抵の場合悪
そんなメタ正論持ち出さんでも ドキュメントのD3DX項目眺めるだけじゃんこの場合・・・
46がどれくらい調べたのかはわからんが、言葉どおり D3DXVec2Rotate という関数があるのかを聞いたわけじゃないだろ? D3DXVec2Rotate 相当の関数があるかってことだろうから、俺でも「多分無い」としか言えん D3DXVec2Transformは知ってたわけだから、それなりにサイトを見たんじゃなかろうか。 …MSDNもVer古い関数載せてたりするからあんまり信用できないんだよなw 特にI3DXAnimationControllerあたり
ID3DXEffect で シェーダー側の float2 形式で渡したいんですけどできないんでしょうか? ID3DXEffect::SetVectorは、D3DXVECTOR4 だし
SetFloatを2回やるのじゃダメなんか?
>>64 俺もそれ思ったけど多分GPUの仕組みからして
SetVector(float4)かSetFloatだけしか用意してないんだとオモタので気にしてない。
詳しくは知らないけど、GPUの定数レジスタって全部float4じゃなかったっけ?
(floatもあるのかもしれないけど。)
floatを2つにして渡すか、float4のうち2つを使うかは自分の設計や効率と相談ってことで。
IDirect3DDevice9::SetPixelShaderConstantFは float4の配列を引数に受け取る訳で こいつに合わせるのがベターだろう
ID3DXAnimationControllerで質問です。 現在アニメーショントラック合成をやっているのですが… Aのとあるポーズ(とある時間で停止)から、Bの歩きアニメ(再生)へ、1秒かけて変移。 とやる場合、以下のようにやって実現しました。 ・トラック0にAをセット ・しばらく後「歩くボタン」を押した ・トラック0のデータをトラック1に移行 ・(DESCを初期化した上で)トラック0にBをセット ・トラック0の時間のみSetTrackAnimationTimeで進め、行列更新のためにAdvanceTime(0.0f,NULL);を呼び出す ・1秒かけてTrackWeightを変移させていく ですが、AからBに変移している途中の状態から、Cアニメへ移行したい。という場合に困っています。 もちろんトラックをまた1つずつずらして、0:C 1:B 2:A にし、Weightをきちんとやれば実現は可能です。 ですがこの方法だと、さらに途中でDアニメ…Eアニメと(そんな多重になるようにすんなとは思いますが)移行させようとした場合、トラックがいくつあっても足りません。 「現在のポーズ」をアニメーションセットとして認識させる方法はないでしょうか?
MSが提供しているのは便利機能であってそれ以上を求めたいなら自前でやれと。
DX関数群は使用しないでください 頭が腐ります
D3DXのアニメーションコントローラとか使ってないからわからんけど Weightをきちんと、って頂点に含まれるウエイト値をいじるってこと? そんなことしたらデメリット多いし俺も自前でやった方がいいとオモ
アニメーションコントローラは、アニメAとアニメBに重みをつけられるんだよ アニメAで設定されてるを8割採用し、アニメBで設定されてる角度を2割採用。みたいな感じ。 それをウエイトって言うのよ
73 :
71 :2008/04/15(火) 20:47:50
なるほど、D3DXでもモーションブレンドとかできるのかぁ。 「現在のポーズ」の状態を擬似的に以降のフレームに入れて騙したりは出来ないのかな。 あるいはアニメーション時間を騙すとか。役に立てずスマンコ
70はネタだよね? なかったら脂肪決定な漏れ
わかりにくかったらごめんなさい。 画面に四角形を描画した後、その四角形の一つの頂点の座標だけを動かして 四角形を歪んだような形にすることってできますか?
>>75 意味がわからんが、3Dでポリゴン描画のことを言っているならばできる
BitBltなどの2D描画のことをいっているならできない(自作すべし)
描画してからとなると描画したバッファ自体をテクスチャとして使用すれば変形も可能。
>>76 TL頂点でも出来る。
DirectInput8でジョイパットの状態を pJoyDevice->GetDeviceState(sizeof(DIJOYSTATE2), &js); で取得すると js.lX と js.lY が十字キー押してないのに-1になるんだが うちのジョイパットがおかしいんだろうか? 押してるときは 6とか-6とかになるのに 押してないときは 0でなく-1って一体
79 :
78 :2008/04/16(水) 00:13:20
事故解決 無効ゾーンを設定して小さすぎる値を無視することでようやく解決
それ十字キーとはいってもアナログなんじゃない? アナログだと、何も入力してないつもりでも大抵入ってる だからその解決法が正しいね
>>80 サイバーガジェットのPSのコントローラーつなげられる
USB接続のジョイパット変換機なんだがアナコンのほうは認識しない古いやつ
で、十時キーがいつもマイナス方向に微妙に入ってるってことになってるみたい
アナログじゃないのにアナログ扱いされることもあるのね
勉強になりました
>>81 俺もDirectInputでは悩んだんだけど、アナログでなくとも
XYZの軸入力は指定した範囲で送られてくる(指定した最大値・最小値で)から
同じように扱うしかなかった。んで、-1000〜1000の範囲にして
-100〜100は無視するとかしたと思う。
友人のPS2コントローラの変換機もうまく動かないやつがあって、
ボタンの状態が、普段がONで押すとOFFになるんだったかなぁ。
コントローラの送ってくる情報は基本的に信頼しない方がいいかもしれない。
色んなメーカーが気軽に作ってるようだから。
>>76 ,77
ありがとうございます。
いろいろと試してみます。
背景を透明にすることってできますか?
何の背景よ? ウィンドウを透過させてデスクトップの壁紙が見えるようにしたい?
>>85 説明不足ですいません。
そのとおりです。描画してあるものはそのままに
ウィンドウを透過させて壁紙が見えるようにしたいんです。
レイヤードウィンドウでぐぐるといい。DirectXとは無関係だよ。
デスクトップアクセサリーみたいなのだとリージョンとかもあり ま、結局はDirectXと無関係
DrawTextメソッドのRectangleが値渡しなのでCalcRectが機能しません。 って英語でどう書くの?
Fuckin' DrawText Method Rectangle!! Goddamn CalcRect Don't WORK!! Sun of a bitch!!
>>89 DT_CALCRECT becomes Font.MeasureString in managed code.
解決しますた。
>>94 ありがとうございます、やはり必要なんですね
問題は見つかりませんでした。 DirectDraw テスト結果 : テストはすべて成功しました。 Direct3D 7 テスト結果 : エラー - ステップ 8 (3D デバイスを作成中): HRESULT = 0x80004005 (一般エラー) Direct3D 8 テスト結果 : エラー - ステップ 8 (3D デバイスを作成中): HRESULT = 0x8876086c (エラー コード) Direct3D 9 テスト結果 : エラー - ステップ 8 (3D デバイスを作成中): HRESULT = 0x8876086c (エラー コード) すみませんこのエラーコードってなんですか?
なんのツール上で吐かれたエラーなのかすら説明なく?
ヘッダから漁ってみそ
なんか、シェーダー側のグローバル変数に データが届きません><。 .cpp側 m_hMapWidth = m_pEffect->GetParameterByName( 0 , "MAP_WIDTH" ); m_hMapHeight= m_pEffect->GetParameterByName( 0 , "MAP_HEIGHT" ); hr = m_pEffect->SetFloat( m_hMapWidth , 490.0f ); hr = m_pEffect->SetFloat( m_hMapHeight, 472.0f ); .fx側 float MAP_WIDTH; float MAP_HEIGHT; と書いても、MAP_WIDTHには、数値が入ってないみたいです。 シェーダー側で、MAP_WIDTH=490.0fすれば、ちゃんと動きます。 SetFloatの前にやっている SetFloatArrayは、ちゃんと数値届いてるのに><。 なんか、SetFloatの制限とかあるんですか? ハンドル利用してないバージョンでも試しました。 やっぱだめです。
intに変えて、SetIntにしてみたらいけました。 Floatって400とか行くと駄目なん?
101 :
100 :2008/04/18(金) 16:21:53
嘘です。やっぱいけてませんでした><。
400程度でケタ落ちとかは無いよ。 GetParameterByNameで得たハンドルがNULLでないか、 hrがE_FAILになってないか、そのへん見てみたら? あとはエフェクト側の定数が多すぎて定数レジスタ食い尽くしてないか。 (頂点シェーダ3_xまでは定数レジスタはfloat4×256個しかない)
補足。浮動小数点値ってのは、 floatなら値を24bit、桁を8bitで保存してる(んだったと思うけど自信ない・・・w)。 だから10000000000000000.5とかの結果になった場合の0.5、あるいは 20.0000000000000000128とかの0..0000000000000000128の部分が消える。 だから値そのものの大小は関係ない。基本的に幅が足りないときに細かい部分が消えるだけ。 (桁が8bit?で足りないときも狂うけどね。)間違ってたら補足ヨロ。
値は23bitで指数が8bitで符号が1bit
Winsockが面倒だからDirectPlay使ってたのに、 今後は使わないでWinsock使ってくれってどういうことだ、クソックソッ
>>104 暗黙の1ビットがあるから結局24-bitでいいんじゃね?
それくらいわかっとるわいw このスレじゃ書いといた方がよかったか?
103です。いや補足してもらえて助かりましたw しかし99は直ったんだろーか。
>>99 はハンドルがNULLで取得出来ていないんだろ
よくある話だ
112 :
デフォルトの名無しさん :2008/04/21(月) 05:19:46
質問です。 ビルボードを使って描画しようとしているのですが、 テクスチャを指定するためにLockメソッドでロックし、 頂点座標を指定しようとしたところ、Lockメソッドの実行時に 「 0x00413a9d でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。 。」 と表示されてしまいます。何が問題になっているのかさっぱり分からないのですが 分かる方はいらっしゃいますでしょうか。
113 :
デフォルトの名無しさん :2008/04/21(月) 05:20:10
書いてから日本語がおかしいことに気づきました・・・すみません。
”場所” 0x00000000を読み込み、っつーのは NULL(0)になっているポインタからその指す内容を得ようとしたっつーことだ。 そのテクスチャのポインタか何かがNULLになってるんじゃね?
115 :
デフォルトの名無しさん :2008/04/21(月) 05:35:44
>>114 成る程ありがとうございます。
テクスチャの位置調整用の関数から、テクスチャ位置情報を受け取っているので、
恐らくその位置調整用関数が上手くいってないのだと思います。
こんな時間なので即レスが来るとは思いませんでした。
ありがとうございます。
116 :
デフォルトの名無しさん :2008/04/21(月) 06:57:37
質問したくせにレスが来るとは、だと?ふざけてんのかてめえ
普通だろw こんな時間にもかかわらず答えてくれた好意にとても感謝している、って意味にしかみえねーよw
>>117 54は俺なんだが、そんなにひどいレスだったか54は…?
「D3DXVec2Rotateに相当するD3DXの関数はありますか?」って聞けば誤解なかったんだろうという反省はしてるけど
>>120 >お気遣いどうもw
「w」って笑顔じゃなくて笑い、2chでは嘲笑うという意味のほうが強いかな。
>>117-118 が使い所として良い。
極度な訳だけど「お気遣いどうもw 」→「そんなの分かってるわボケwww心配しなくても思ってるほどバカじゃねぇよwwww」
答えてくれた人に対して何言ってるのとか思うけどね。
皆が使ってるから意味も知らずに使っている(悪気がない)ということより、意図的に使っているとしか考えられない。
あと文法的にもマナーの面からもお礼の言葉は最初に書くのが基本なので、印象が余計に悪く('A`)
でもマナーが成ってないのにルールは守り、ラフで使いやすいのが2chのいいところだよな。
wの意味なんてどっかで定義されたわけじゃないし、使う人見る人で違うだろww 俺には54はそこまで嘲笑には見えんぞ
「俺には」と言うのが不味いんだよな 携帯電話で使い始めたような若い人にとって何とも無いことでも 比較的年齢が高めなこの板ではあまりいい印象がない 少なくともこの板では嘲笑うレスに対して使われるのがほとんどで 質問者もそうだけど回答者も滅多に使わない 文章が乱暴だけど他の板に比べれば紳士的な感じかな
そうかすまん。板の空気を読もうという話ね まぁ、俺の見る限りこの板には本当の紳士は1割にも満たないわけだが・・・
53=55=117です。 議論するつもりではなかったんだけど、自分的にはちょっと カチンときたので例に挙げましたw(ちなみに99は解決したかどうか書いてくれなかったから。 後から、54も99も例に挙げたのはマズかったかなと思いましたが。) 相手の機嫌を一切損ねずに質問・回答するのは不可能に近いとは 自分も思うところだけど、 自分は2chに限らずとも、他人の親切に対して笑いながら「お気遣いどうもw」 みたいな反応が出来る人間はどうかと思うので。 (付け加えるなら、D3DXVec2Rotate()と同機能の関数があるかどうかを、 D3DXVec2Rotateという名前の関数が無いとわかっているのに ここで訊こうとするのはレアケースどころかナンセンスだとすら思う。個人的には。 >まぁ、俺の見る限りこの板には本当の紳士は1割にも満たないわけだが・・・ 別にあまり攻撃したくはないのだが、紳士にしか回答をもらいたくないのであれば ここで訊くべきかどうかくらいの判断は自分で下すべきだ。
別に俺は紳士からじゃ無くてもオーケーよ〜 まぁ、どこにでもいろんな人がいるということだね。どっちの考え方もよく分かるよ 受け入れられるかどうかはその人しだいだけどな
127 :
125 :2008/04/21(月) 21:58:16
自分自身、懐疑的に見すぎていたきらいがあるので悪かったなと思ってまつ。 お騒がせしました。
おまえらどんだけピュアなんだよ 2chじゃなくてちゃんとした所で聞いたほうがいいぞ
態度が悪ければ同等の態度で返されるってだけだろ? 自業自得
>>112 ちょっと周辺のコード晒してみぃ
っつかなんでこうやってできない奴に限って
動いてるソースのコピーからはじめないのか・・・
あ、更新忘れてたw
>>130 は解決してたら無視してくれ
132 :
112 :2008/04/22(火) 01:17:52
未だに悪戦苦闘中でしたので、コード晒してみます。 HRESULT SetFVFTexturePosition( LPDIRECT3DVERTEXBUFFER9 aFVFBuffer , DWORD aType , DWORD aChar ) { theCUSTOMVERTEX* tmpVertex; //頂点バッファをロック theTexPositionRECT aTexRECT; //テクスチャの座標を受け取ります SetCellTextureRECT(aChar , &aTexRECT); //頂点バッファをロック if(FAILED(aFVFBuffer->Lock( 0 , 0 , (void**)&tmpVertex , 0 ))){return(E_FAIL);} //頂点は4つ、頂点座標、頂点職、テクスチャ座標を設定する //D3DPT_TRIANGLESTRIPで描画するので頂点の番号と座標の対応に注意すること tmpVertex[0].tu = aTexRECT.u0 ; tmpVertex[0].tv = aTexRECT.v0 ; tmpVertex[1].tu = aTexRECT.u1 ; tmpVertex[0].tv = aTexRECT.v0 ; tmpVertex[2].tu = aTexRECT.u0 ; tmpVertex[0].tv = aTexRECT.v1 ; tmpVertex[3].tu = aTexRECT.u1 ; tmpVertex[0].tv = aTexRECT.v1 ; //書き込みが完了。頂点バッファのロック解除 aFVFBuffer->Unlock(); return(S_OK); }
133 :
デフォルトの名無しさん :2008/04/22(火) 01:18:48
//セル用のテクスチャー VOID SetCellTextureRECT(DWORD aChar , theTexPositionRECT *aRECT ){ const float kCellSize = 1.0 / 8.0f ; //0xffの場合はビルボード全体にテクスチャを描画 if(aChar == 0xff){aRECT->u0 = 0.0f; aRECT->u1 = 1.0f; aRECT->v0 = 0.0f; aRECT->v1 = 1.0;} else{ //あふれを防止 aChar &= 0x07; aRECT->u0 = 0.0f ; aRECT->u1 = 1.0f; aRECT->v0 = kCellSize * aChar ; aRECT->v1 = aRECT->v0 + kCellSize ; if(aRECT->v1 > 1.0f){aRECT->v1 = 1.0f;} } }
ほんとにLockメソッドで落ちてるのか疑問だけど とりあえずtmpVertex[0].tvが全部0指定してるのは直した? (uは0〜3なのにvは0だけになってる
Lock()実行時に落ちてるならaFVFBufferがNULLであるとしか考えられないな
HLSLでのデバッグ環境ってありますか?
137 :
99 :2008/04/22(火) 19:03:25
プロバ全体がアク禁くらって書き込めませんでした。
結局、パラメータが渡ってません。
複数シェーダを書いて、まとめて(20個ぐらい)ロードしているんですが
SetFloatArray使ってないシェーダは、
ちゃんと幅、高さが渡ってるのに
SetFloatArray使ってるのは失敗するです><
>>102 GetParameterByNameは、ちゃんと実態がいます。
ハンドルなしで、直接指定もやってみました。
hrも成功しているはず(S_OK比較しています)です。
138 :
99 :2008/04/22(火) 21:19:38
シェーダー側に if( param == 490 ){ // 渡した数値比較 /// } と書いたら、///の部分がちゃんと動きました。 数値は、渡っているみたいです。 しかし、直にparam=490と書いた時と同じパラメータ渡した時との動きが違うのです。 そういうのって何かありますか? もうわけわからんちん
定数の数はいくつある? もしかするとそのWIDTHとHEIGHTをfloat4(のxとy)にしたら直るかも?
単純にシェーダの部分がバグってるんだろう 『たまたま』動いただけじゃね?
ん、渡せてないわけではないのか。 定数多すぎてどれか溢れてるくらいしか思いつかん
てか GetParameterByNameはあくまで シェーダーの定数レジスタから値をひろってくるだけだぞ? グローバル変数に値をいれたいなら hr = m_pEffect->SetFloat( "MAP_WIDTH", 490.0f ); hr = m_pEffect->SetFloat( "MAP_HEIGHT", 472.0f ); だろ
こんな質問で即レスしてくれたお。 このスレの人はいい人がおおいですね><。 ありがとうございます。 ピクセルシェーダーはこんなかんじです // MAP_WIDTH = 490.0f; // MAP_HEIGHT = 472.0f; Color = ( tex2D( SrcSamp, In.Tex ) + tex2D( SrcSamp, In.Tex + float2( -1.0f / MAP_WIDTH, 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +1.0f / MAP_WIDTH, 0 ) ) + tex2D( SrcSamp, In.Tex + float2( -3.0f / MAP_WIDTH, 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +3.0f / MAP_WIDTH, 0 ) ) + tex2D( SrcSamp, In.Tex + float2( -5.0f / MAP_WIDTH, 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +5.0f / MAP_WIDTH, 0 ) ) )/7.0f; パラメータは、ちゃんと同じ値が渡ってるのに ・シェーダーに直書き(上のコメントを外す) ・プログラムからパラメータ渡し とでぼかし具合が違うのです。 直書きすると定数として扱われてコンパイルするのかな? 書き方これでいいんでしょうか?
いや合ってるよ、GetParameterByNameが返すのは 値じゃなくてそのパラメータのハンドル。 もちろん、毎回GetParameterByNameしてハンドル取るくらいなら 直接名前で指定した方が簡単だろうけども。
シェーダーの計算に括弧入れたら、挙動が変わったお><。 こんな感じ + tex2D( SrcSamp, In.Tex + float2( -(1.0f / MAP_WIDTH), 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +(1.0f / MAP_WIDTH), 0 ) ) + tex2D( SrcSamp, In.Tex + float2( -(3.0f / MAP_WIDTH), 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +(3.0f / MAP_WIDTH), 0 ) ) + tex2D( SrcSamp, In.Tex + float2( -(5.0f / MAP_WIDTH), 0 ) ) + tex2D( SrcSamp, In.Tex + float2( +(5.0f / MAP_WIDTH), 0 ) ) スレ汚し、ほんますんません。
D3DXDisassembleEffectで逆アセしてみれば?
アセンブラから逃げ出すためにHLSL使うことにしたのに 結局アセンブラやらないとだめなのか><。
148 :
99 :2008/04/23(水) 15:38:59
逆アセしてみました。 かなり最適化して感動しました。 読んでなかったあとレジスタの仕組みとかもわかって逆アセしてよかったです。 でも、なんか怪しいので D3DXCreateEffectで D3DXSHADER_SKIPOPTIMIZATION //最適化しない を渡してやってみたところ、うまく行きました><。 ああああああああああ
ちなみにSDKは、(April 2007)です
150 :
99 :2008/04/23(水) 16:43:54
(March 2008)入れてみた
最適化しても、普通にうごいたお。
最新版、グローバル変数に数値入れられなくなってていい感じだお。
>>103 ,104,108,109,110,111,139,140,141,142,144,146
ありがとうございました
ぼくの7日間シェーダ戦争
〜完〜
おめ
152 :
デフォルトの名無しさん :2008/04/23(水) 22:42:19
FPSを計測してみたら、どんなにがんばっても 秒間60プレームしか描画できてないということがわかった そんなにたくさんのモデルを描画してるわけじゃないのになと思いながら モデルの描画量とか画面のサイズとかを減らしていったのに それでも秒間65フレームくらいしかでない いくらなんでもプリミティブ1つ描画するのに 秒間60回しか更新できないなんてありえないと思うんだが、 ひょっとしてDirectXってFPSを固定する機能があったりとか それがデフォルトで有効になってるとかそういうことはありますか?
param.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; param.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
>>153 ウインドウモードで作ってるので
下の行を追加するだけでOKですか?
凄まじい勢いで描画されるようになりました
ありがとうございました
DirectMusicがコンポーネントが削除されましたが、どれを変わりに使えばいいんですかね?
>>156 ご丁寧にありがとうございます!。
とりあえずそのサイトを見てみたいとおもいます。
ゲームでmp3を使う時って、何使って再生したほうがいいの? ある程度売れたらパテントとかってあるんだよね?
159 :
155 :2008/04/24(木) 20:58:12
>>156 関係ないですが、DXライブラリ3Dってここまでできるんですね。
プレイヤーが所有しているMP3を再生したいのであれば使用料を支払えばいい BGMやSEとしてゲーム本体に組み込むのであればmp3なんか使わない
orbis(だっけ?)使うの?そのコードクレ
トランスフォーム済み頂点とDrawPrimitiveUPを使って計器を描画しています。 2枚以上の計器を重ね、テクスチャに抜き色を設定したりアルファ値を下げたりした状態にしてZ値や描画順を変えると 手前の計器の抜けている部分から奥の計器が見えるべきところが透明のままで背景が見えます。 描画するときはZ値を触らずに(全て固定値)、自分で描画順を変えないといけないのでしょうか。
163 :
デフォルトの名無しさん :2008/04/24(木) 22:34:24
directXってMP3再生できないの?
DirectShowを使えばできる DirectSoundでやるなら、WAVEにデコードする必要がある
mciデコードが特許的にダメとか、DirectShowもグレーゾーンとか聞くけど ここにいる人は何使ってるの?
oggでいいんじゃね?
167 :
デフォルトの名無しさん :2008/04/24(木) 23:30:07
DirectSound以外をつかわないとだめなのか〜 DirectAudioPlayってのなかったっけ?
168 :
デフォルトの名無しさん :2008/04/25(金) 00:00:18
DirectAudioの事? DirectMusicとDirectSoundが統合された時の名称だけども・・・
日本ならogg アメリカならwmaとかが主流なんじゃないかと
再生に必要な物ってDirectShowFilterとか言うやつ? なんか調べんのめんどいな・・・そもそもどうやってoggファイルつくんだよ・・・
>>170 wavをoggに変換するソフトがどっかにあった希ガス
それかlibになかったっけ?
3回目はチンコ落とされるぞ
>>173 脳みそで英→萌→和変換するのがストレス
俺OGGとFLACを常用してるけど、これらに対応してる 歩き男って無いんだよな。ややマイナーなのが難点だ。
177 :
112 :2008/04/25(金) 03:34:31
先日はいろいろと誤解を招くような言い回しをしてしまったようで、 すみませんでした。 皆様のおかげでなんとか描画できるようになったのですが、 何故かテクスチャの色が表示されずに、真っ黒な像が描画されてしまいます。 問題はどこにあると思いますでしょうか・・・ご教授願います。 レンダリングステートは以下のようにしています。 theDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); // αブレンディング有効 theDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE ); // αテストを有効に theDevice->SetRenderState( D3DRS_ALPHAREF, 0x00 ); // αチャネルの値が0x00なら theDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_NOTEQUAL ); // 書き込みをしない theDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );// Zバッファへの書き込み停止 theDevice->SetRenderState( D3DRS_AMBIENT, 0xFFFFFFFF );// 環境光 theDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA ); // ソース側の色の比率 theDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA ); // 書き込み側の色の比率 theDevice->LightEnable( 0, FALSE ); // ライトを無効に theDevice->SetTextureStageState( 0 , D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); // αチャネルの色を使用theDevice->SetTextureStageState( 0 , D3DTSS_ALPHAOP,D3DTOP_SELECTARG1 ); // テクスチャの色を使用
ご教授ではなくご教示だドアホ
>>177 D3DTSS_COLOROP, D3DTSS_COLORARG1 あたりの設定が
見当たらないね 設定しておいたほうがいいと思うんだけど
>>
早速の回答ありがとうございます。 D3DTSS_COLOROPは乗算 D3DTSS_COLORARG1はテクスチャ色使用にしてあります。
今のレスをかきおわってから、あれ?と思い D3DTSS_COLOPOPの値をD3DTOP_SELECTARGに変更したら出来ました 自分でも変なミスをしたと思いました。 回答してくださった方には、お手数をおかけしてすみませんでした
>>172-173 dクス
今手元のwav変換して聞いてみたけどイイネ!
プログラム的にはダイレクトショウフィルター入れてればDirectShowで直接再生できるって感じ?
そうだとユーザーの手間が増えちゃうからやっぱりソース組み込むのかなぁ・・・
東方wavだしwavでいいじゃん
東方は尊敬するが基準にはできないな。
>>183 そう
WindowsMediaPlayerみたいなのいれれば大抵のコーデック入るから
理論的にはなんでも再生可能
>>186 今はインストールさせるのとさせないのどっちが主流っぽいの?
たいした手間ではないんだけど、ゲームも大したもんじゃないから気が引けるぜ
OGGなら、デコードLIBをリンクしてしまえばいいのさ。 まあそれするとGPLが適用されると思うけど。 ToHeart2が引っかかってたような。 ん?あれOGGだったっけか?
OGGはフリーでMP3じゃなかったか?
>>187 XPでもデフォでメディアプレイヤー入ってるから、
そんなマイナーでなければ既に入ってる
心配なら、配布時にメディアプレイヤーを含めればいい
>>188 あれは、oggじゃなてくムービーのコーデック
まあそういう事情があるから、ライセンスはきっちりしといたほうが後で泣きをみない
>>190 あぁ、まぁぐだぐだ書いたけど、
俺もお勧めはogg
ホムペを参考にしつつliboggとlibvorbisを使って組んだほうがいいぞい
PS2のかまいたちの夜でも採用された>ogg 普通、ライセンス考えるゲームはogg
今dshow.hが無かったのでなんかインストールして取ってきたら、 今度はstrsafe.hが無いと。 MSDN見たら新しいバージョンのPlatform SDKに入ってるとかあるんだけど どこから取れますか?それともインクルードパスがおかしいのかな 普通どこに入ってる物なんだ?普段そこまで踏み込まないから全然分からん\(^o^)/
directShowは、 DirectXに行ったり Media何とかに行ったり PlatformSDKに行ったりと大変ね。
そんだけ動画ってものがユーザにとって身近になったって事だね
ライセンス考えたら同人でゲーム作って売るとき 音楽系はogg 動画画像系はなにがおすすめ?
wma wmvは大丈夫じゃね?
エロゲ業界は50%くらいがmpeg1 wmvは結構マイナーなのよん ちなみにScroolDaysはwmv ま、再生の負荷で考えるならmpeg1が安易 サイズは不利だけどね
>>196 こういうこと言う奴に限ってクソゲーしか作れないんだから ライセンス考えなくても大丈夫。クソゲーは相手にされないから。
作れる、作れないとライセンスは関係がないぞ。誰にでも平等だ
なにが、誰にでも平等だ 、だよ。エロゲで抜いてるくせに 粋がるな馬鹿
以後ヌルーで。
Oggのライブラリみたいの落としたんだけどlibフォルダに.libが無くて代わりに VisualStudioでコンパイルするためのバッチファイルが入ってたんだけど、 BCCでやるにはどうすりゃいいんだ?
バッチファイルの、RC、とか、CL とかのコンパイラ名をBCCのに書き換えればいいんじゃね? あるいはBCC用のバッチφるが別のダディレクトリにあるとか。
VS2008stdに乗り換える
206 :
203 :2008/04/26(土) 15:32:43
お前ら、俺に優しいなwエロゲの知識が生きて満足したか?w
>>206 偽乙
VS2008Express入れてみたけど適当にコンパイルしてたら
変なファイル大量に作られるし、挙句の果てにdll吐きやがった(´;ω;`)
これだから高レベルなソフトはいやなんだ・・・
これってどうすればいいの?つうかVSでコンパイルできたとしてそのlibって
BCCじゃ使えないんだっけ?
彼女とセクロスもするが エロゲでオナニーもする。 別もんだ。
ここにもアンチエロゲのキチガイがいるのか。 大日本帝国の主力産業たる萌えを否定するのは売国奴だ。 中共や南朝鮮の間諜だ。殺せっ殺せっ殺せっっっ
210 :
203 :2008/04/26(土) 15:57:50
>>207 いい加減スレ違いに気付け。ここはお前の日記帳じゃねぇんだ。
そういう下らないことは自分で対処しろ。
だめかな?役に立つ人もいると思ったが、 まあ、いいや。後は何とかしますノシ
>SDKのスキンメッシュのサンプルをクラス化 原因はここに違いない
215 :
デフォルトの名無しさん :2008/04/26(土) 19:43:16
個人で作る販売目的じゃない適当ゲーなんて ライセンスのことなんて考えなくても大丈夫だろ? そう思ってた時期が俺にもありました
公開しなきゃ、それこそほぼ無法地帯だけどな
せめてGPLかどうかだけでも見ておいたほうがいいぞ
>>207 libは結構面倒だ
デバッグ版lib
リリース版lib
ちょっとでもコンパイル設定がかわるともう受け付けない
(みんななぜか気にしてない?うーんあわせる自信あるのかな?)
好んで使うアフォがいるがなんでか?ってのは俺も知らない
Xファイルなどのメッシュに対してではなくて ポリゴンに対してバウンディングボックスを作ることってできますか?
>>218 横槍だがlibを毎回プロジェクトフォルダに入れないとパス通しても認識されないんだが
どうすりゃいいんだ?
通したのがinclude pathだったってオチ?
完全にライブラリのリンクです。
きっとそこには”無い”んだよ…
224 :
デフォルトの名無しさん :2008/04/27(日) 01:24:04
D3DFMT_D16_LOCKABLEって 16bitの何が入っているんですか? これがわからないと読み出せないんですが
225 :
デフォルトの名無しさん :2008/04/27(日) 01:55:19
今日のこのスレなんか空気がおかしくね
226 :
デフォルトの名無しさん :2008/04/27(日) 03:20:49
oggだのライセンスだの言ってるあたりからおかしいと思われ
まぁGWモードに入ったってことでしょうJK
ごーるでんうぃーく
ゴールデンウィークなんてこの5年間一回もないぞ。 働いたら負けって意味がよく分かったよ
230 :
デフォルトの名無しさん :2008/04/27(日) 13:54:25
質問なんだが、Xファイルのテクスチャにdds使うえばα値で透過されたりするんですかの
ddsじゃなくても透過できるでよ
232 :
230 :2008/04/27(日) 14:53:06
詳しくお願いしまふ
Xファイルを作るときにD3DXCreateTextureFromFileEx関数を使って透過色を指定しておくだけでふ
234 :
デフォルトの名無しさん :2008/04/27(日) 15:26:02
Exとかあるなんてしらなだった 調べてない自分が悪いorz とんくす!!
235 :
デフォルトの名無しさん :2008/04/27(日) 21:44:04
HLSLですが、以下のcase1とcase2で表示される結果が違います。 case2の方にノイズがのります。 以下の二つは何か違いがあるんでしょうか? (HLSLは最適化なしでも同じ、設定は列優先) // float4_t vPosition0 // float4x4_t mWorld // float4x4_t mViewProj // case 1 const float4_t vPosition1 = mul( vPosition0, mWorld); o_vPosition = mul( vPosition1, mViewProj); // case 2 const float4x4_t mWorldViewProj = mul( mWorld, mViewProj); o_vPosition = mul( vPosition0, mWorldViewProj);
画面から1ピクセルの色情報を取得するGetPixelをDirectX でやるにはどうすれば良いでしょうか?Lock Unlockで サーフェイスから1ピクセル抜き出すのは勿体無いですから。
>>236 何がどう勿体無いのか知らんが、それが一番素直なやり方
サーフェースのフォーマットを調べたいとかいう違う動機があるなら別だが
>>237 読み込みだけなのでLock Unlock重いから使わない方法
あればいいなと思って質問しました。Lock Unlock使わなくても
大丈夫というレスを期待したのです。レスありがとうございます。
今日は寝ます。
>>238 誤解してるみたいだが、GetPixelも実装はLock/Unlockしてるの
それプラス余計なオーバーヘッドがかかるから、自前でやったほうが数倍速い
ちなみに、システムメモリ上のサーフェースは、その手のLock/Unlockによるオーバーヘッドは皆無
まあ、VRAM上のことを言ってるんだろうけど、VRAM上ではイメージがリニアに配置されてる保障はないので
その手のオーバーヘッドは、どういうやり方をするにせよ、回避は不能
ピクセルシェーダーからフィードバックすればできるんじゃね?
>>239 GetPixelってフォーマットやら範囲やらチェックしてる予感
あの遅さはそういう遅さだ
俺の直感がそうだと言っている
でもフォーマット気にしないでコピーする方法ってどうやんだっけ?
BitBltでいいんだっけ?
ライティングについて質問です。 D3DLIGHT9 light; memset(&light,0,sizeof(light)); light.Type = D3DLIGHT_DIRECTIONAL; light.Diffuse.r = 0.9f; light.Diffuse.g = 0.9f; light.Diffuse.b = 0.9f; light.Specular.r = 0.2f; light.Specular.g = 0.2f; light.Specular.b = 0.2f; light.Ambient.r = 0.5f; light.Ambient.g = 0.5f; light.Ambient.b = 0.5f; light.Direction = D3DXVECTOR3(0.0f, -0.5f, -0.2f); device->SetLight(0,&light); device->LightEnable(0,TRUE); //* device->SetRenderState(D3DRS_LIGHTING,TRUE); //ライティング有効 /*/ device->SetRenderState(D3DRS_LIGHTING,FALSE); //ライティング無効 //*/ 上記のように設定すると何も表示されなくなってしまいます。ライトを無効にすれば表示されるので メッシュの基本的的なところは間違ってないみたいなのですが、何が間違ってるのでしょうか?
自己解決。マテリアル設定忘れらしいです。だからマテリアルだけ要素数が返されるんですね・・・
これからDirectXの勉強始めようと思うのですが、DirectX9の書籍は買わないほうが良いのでしょうか? DirectX10からいろいろ変わったと聞いたもので。 あと、お勧めの書籍があったら教えてほしいです。
vista持ってないとdirectx10ができません
DirectXなんて勉強目的なら8以降だったらなんでもいいのよ 要するに、概念が大事
DX10のほうがデバッグしやすいと思うぞ
>>244 むしろ情報がクソほど出揃ってる9以前のほうがいい
10なんかOS縛りあるわ情報少ないわでいいことまったくなし
8あたりで縛ってつくればDirectX8はXP以降なら間違いなく入ってるし
配布もラクだしとにかくいいことだらけだ
そんな初級質問をするおまいはこれからもたくさん質問するだろうから
それに答えられる使用者が多い9以前を使うべき
今ならDX9だよな。 もうDX8はない。 かといってDX10は実行環境が限られる上に 仕様もまだ安定していない。
ありがとうございます。9の本買ってきます。
9できれば 10もすんなりいけるんじゃね。
シェーダーの使い方知らんとなんもできんよ
俺も10に移行してえ でもVistaはイヤッ!!
俺はやりたいことが全部9で出来ちゃったから10を触る気が起きない
255 :
デフォルトの名無しさん :2008/04/30(水) 22:07:00
そもそも10で何ができるようになったのか知らない
Vista専用なんて論外だ
DirectX10はVistaと共に黒歴史になる
10は別に黒歴史にはならないだろ
8は初心者にはヘルプ手に入れたり、サンプル動かしたりするところで 敷居が高いからやめておいたほうがいいと思う ある程度たどり方を知ってないと見つからないし、わからないと思う
260 :
デフォルトの名無しさん :2008/04/30(水) 23:58:24
すみません。 ピクセルシェーダが使えない環境で クライアント座標のある部分を描写しないようにクリッピングしたいのですが、 どのようにすればいいでしょうか。 C++でdirectx9を使ってます。
261 :
デフォルトの名無しさん :2008/05/01(木) 01:56:50
カメラ2つでvfcでキャプチャをしたいのですが、capDriverConnect(hWnd0,0);capDriverConnect(hWnd1,1);で キャプチャ使用とすると、カメラを選択するメニューが登場しcapDriverConnect(hWnd0,0);側だけ選んだ1つだけ 表示されてしまいます。 解決の方法はご存じないですか?
今日も今日とて、眠らぬまま朝を迎えた・・・・・・・。
265 :
デフォルトの名無しさん :2008/05/01(木) 21:01:47
266 :
デフォルトの名無しさん :2008/05/02(金) 11:57:01
すみません。 任意の軸を中心に拡大縮小が出来る関数ってありませんか? 回転はみつけたんですが、拡大縮小は見つからなくて・・・。
>>266 あるっちゃあるが、ちゃんと行列勉強したほうがいいと思うぞ
細かい調整きくようになるし
任意の軸への移動行列×拡大縮小行列でいいんじゃねーの?
D3DXMatrixTransformation2D つーか、何を回転させようとしているのだろうか
質問というかアンケート ここのスレのお兄さんたちはD3DX関数群は肯定派?否定派? 速度でないし、細かい微調整がきかないから、そんなもん使うなって感じ? それとも、車輪の再発明してもしょうがない、あるんだから使えばいいじゃないって感じ? なんとなく気になったんで
俺はD3D、OpenGL、その他とコードを共有してるんでしかたなく自前で作ってる でも基本的にあるなら使えばいいじゃない派
頭にD3DXをつけずに名前をもっと短くしてくれたら もっと評価してやらないこともない
そんな事より配布の問題をどうにかしてくれ
我慢しろよ(`_ゝ´)
だから2004octを使えとあれほど・・・
僕ハンゲームというゲームしたいんですけど それにはこのdirectxが必要なんですが、その 安全性が非常に心配です。 調べてみると、「DirectXの脆弱性」などとよく書いてあります。 ダウンロードするとしたら、最新の10.1がいいのでしょうか? それと、当たったらどんな症状が出るのでしょうか?
ここはプログラミングの板なのでよそで聞いてください
おまえはなにを言ってるんだ ……と思ったが、マジレスするなら、今までWindows使ってて、脆弱性のせいでなんか不都合が起こったことあるか? そもそも、ココに書き込みしてる時点で脆弱性を突かれて君のパソコンまずいことになってるよ。 他の人(もちろん俺も)は、事前に対策してるけど。君は丸腰なんじゃないか?
なんかリアリティがあってワロタ 本当に何もわからんやつは、確かにプログラム→DirectX初心者でこういうところに質問するのかw
281 :
デフォルトの名無しさん :2008/05/02(金) 21:43:17
ハンゲ自体が君の人生にとって有害だよ
10.1 はまだ Vista でしか使えなかった気が。 というか、Vista だと標準装備じゃなかったっけ? 入ってないってことは XP なんだろうけど、 それなら 9.0c を入れるといいよ。
DirectXの穴はwindows updateで修正されてるし。
>>270 D3DX関数群の集まりって昔中身見れたんだけど
なんか難しそうなアセンブラで書いてあって速そう(?)だったよw
最近発覚したtga読み込みの脆弱性は 比較的最近のd3dxにしないと駄目だけどね。
角度で応用きかすなら極座標を使った方がいいような気がする
図の角度**のところをそれぞれθ、φとおいて、二通りの求め方で面積S1、S2求めて比較
質問よろしいでしょうか D3DXLoadMeshHierarchyFromXを使っているのですが、Debugビルドの場合のみ 14MBほどの大きさのXファイルの読み込み時に ハンドルされていない例外 は test.exe にあります: 0xC0000005: Access Violation。 と出てしまいます。 10回に1回くらい出ないこともあるのですが・・・ __sbh_free_block の中でエラーになっているようで、これはメモリー空間が破壊されている時に出るとのこと なのでプログラムを最小構成にしてやってみましたが、それでもダメでした。 Releaseビルドでは問題は出ません。 また、アニメーションの数を減らして7MBくらいにするとDebugビルドでも問題は出ませんでした。 Xファイルはテキスト版でも、バイナリ版でも同様の結果でした。 何か心当たりある方はいらっしゃいますでしょうか? 環境はVC6.0+DirectX 9.0 SDK Update - (October 2004) です。
自己解決しました。 デバッグモード時、d3dx9.libではなくd3dx9d.libをリンクすることでうまくいきました。
質問です。 DirectXアプリケーションで、日本語入力(IME)をサポートしようと思っています。 やりたいことは、IMEの変換ウィンドウと候補一覧ウィンドウを表示するということだけなのですが、 DirectXのサンプル(CustomUI)では、独自のコントロールの実装や継承を自前で行うことで実現していました。 CDXUTControl ↑ CDXUTEditBox ↑ CDXUTIMEEditBox 特にCustomUIのような独自のコントロールを作成したいわけではないのですが、 あきらめてCustomUIと同じような実装を自前でしなければならないのでしょうか。 それとも変換ウィンドウと候補一覧ウィンドウを表示したいだけであれば、もっと楽な方法があるのでしょうか。
D3DFILL_WIREFRAME のワイヤーフレームの描画の太さを、太くする方法ってありませんか? Zバッファへの書き込みをOFFにした状態で2ドット以上の幅でワイヤーフレームを描き、その後通常どおり描画。 とやることで、背景との輪郭線を綺麗に描けるのを期待しているのですが。
どんな画面だそれ
いい加減固定機能パイプライン使うの止めようぜ
>>293 理屈上は背景とキャラと間に線が入る感じになるかと。
ワイヤー時はZバッファへ書き込みしないようにしているので、ワイヤーフレームの後にキャラクタの描画で輪郭線以外は塗りつぶされますから。
>>294 プログラマブルシェーダで同等のことできますか?
モデルのポリゴン裏返して黒くし、法線方向に膨らませる…。っていうやつも悪くはなかったのですが、何分重くて。
スキンメッシュなので、自前でID3DXLineで引くわけにもいかないんですよ。
いかないですよね…?
変形後の頂点位置、わからないですし。
>>295 それが速く描画できる理由になるところが俺にはわからん
ワイヤーフレームモードでやりゃわかるが、ピクセルシェーダが呼び出される回数が圧倒的に少ないぞ だが俺はあの線を太くする方法は知らんな あれば結構魅力的な輪郭線描画法かもしれん
質問 連邦VSジオンみたいなゲームでも作ろうかと3Dを本格的に始めたのですが、スペックで相談です。 あのゲームは2VS2なのでキャラが4体でてきます。 1キャラ6000三角ポリゴンくらいで作って4体を画面内に表示したところ、FPS60が維持できませんでした。 私のPCのグラボが、GF6600GTとかなり古めだというのはあるのですが、こんなもんなのでしょうか?
実際にやってみてそうなったのなら、幻覚を見るような病気がない限りその通り。
えーと、私のプログラムが甘いとは思うので 「それ低すぎだろw何かミスってね?」 でなければいいなと思ったのです。 こんなものですか。1キャラ2000ポリくらいにしないと、マップとかにパワーまわせませんね
1キャラ△6000て割きすぎ
あちゃー、割きすぎでしたか。 今まで3Dツール上でレンダリングするだけだったので、その癖ですね。 ゲーム用はやはりもっと抑えないとということですか。 ありがとうございました。
デバッグをpするとobjbase.h': No such file or directoryと出てデバッグできません どうすればデバッグできるようになるのでしょうか?
>>303 は誤字
デバッグをするとobjbase.h': No such file or directoryと出てデバッグできません
どうすればデバッグできるようになるのでしょうか?
objbase.h': No such file or directoryだけだとわかりませんね エラーメッセージ貼ります c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Stage4.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Stage3.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Stage2.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Stage1.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Ranking.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Option.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory MyGameLib.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Main.cpp c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h(40) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory
デバッグ?コンパイルじゃなくて?
そのパスに、d3d9.hは実際にあるの?ないの? パスはあるけど、ヘッダファイルだけないの? それともパス自体ないの?
308 :
デフォルトの名無しさん :2008/05/05(月) 23:40:39
>>306 デバッグボタンでコンパイルしてるというのでしょうか・・・?
>>307 あるとかないとか言われてもわかりません
インストールしてオプションでパス設定してデバッグしただけですから・・・
Microsoft DirectX SDK (August 2007)ファルダの中にはDeveloper Runtime Documentation Include Lib Samples Utilitiesフォルダがあります
Windowsのパスもわからんのに、プログラム組むのは無茶だぜ… c:\program files\microsoft directx sdk (august 2007)\include\d3d9.h というファイルは、Windows上にファイルとしてきちんと存在してるの? パス間違えてるんだと思うぜ? 半角スペースのあるなし 括弧の半角全角とか、きちんとやってみ。
真性のゆとりだな
3Dでキャラの髪の毛が動きに合わせて(自動計算で)フワってなるやつって、 動きの計算は自前でやるにしても、どうやってモデルから構造出して、計算してんのかなぁ やったことある人いる?
普通に自前でぼーん入れてノードを布シミュの応用で動かしてるだけじゃねーの大抵は
313 :
デフォルトの名無しさん :2008/05/06(火) 00:02:41
d3d9のC/C++ヘッダーってファイルあります
314 :
デフォルトの名無しさん :2008/05/06(火) 00:03:19
objbase.h がないんだとさ。 PC内全検索して、objbase.hがあるか確認 あるなら、そこへもパス通せ。 ないならSDKの再インストール
クロスシミュレーションの動きを、Xファイルにアニメーションとして取り込むことってできませんよね? 再生するだけで十分なのですが、Direct3Dでクロスシミュを簡易的に再生するのに適した方法はどんなのがありますでしょうか?
317 :
デフォルトの名無しさん :2008/05/06(火) 01:12:24
>>315 C:\Program Files\Microsoft Platform SDK\Includeにあるみたいなんですがこれでいいんでしょうか?
>>316 Xファイルを吐き出す側の3Dソフトに
クロスシミュのプラグインとか入れて、そのモーションで吐き出すが一番簡単
それとも自前でクロスシミュをDXで出来ていて、それをDX上でしたくてどうにか出来ない、
って事とは思えないが…一応…
前提としてD3DX関数でしかXファイル扱えないとかじゃないよね…
クロスシミュで求めた頂点で、モーフアニメーションでもすれば良いじゃん
>>286 亀レスで申し訳ないが…
カメラ位置からA地点を結ぶベクトルA、カメラ位置からB地点を結ぶベクトルB
それぞれのベクトルA, Bを単位化して、その単位化したベクトルをAA, BBとする
AAとBBを結ぶベクトルCCを作って、そのCCの長さを任意に割合で分ける点DDを作る
カメラ位置とそのDDを結ぶベクトルが君の求めるカメラ注視点ベクトルだと思うが…
質問させてください。 dxsdk_aug2007をインストール中に「This pre-release version of XAudio2 has expired please upgrade to tha latest version」と出るのですが、 そのままokをクリックしてインストールを終わらせていいのでしょうか?
>>320 MSお得意のベータ版の時限装置が発動でもしてんじゃね?
xaudio2使うんじゃなければ問題無いと思うよ。
MyGameLib.obj : error LNK2019: 未解決の外部シンボル __imp__TranslateMessage@4 が関数 "void __cdecl playMovie(char const *)" (?playMovie@@YAXPBD@Z) で参照されました。 MyGameLib.obj : error LNK2019: 未解決の外部シンボル __imp__GetClientRect@8 が関数 "void __cdecl playMovie(char const *)" (?playMovie@@YAXPBD@Z) で参照されました。 D:\プログラミング参考サンプル\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\MuscatBoy.exe : fatal error LNK1120: 外部参照 21 が未解決です。 ビルドログは "file://d:\プログラミング参考サンプル\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\BuildLog.htm" に保存されました。 文字数制限にひっかかるので多少省きましたすみません このエラーの解決策を教えてくださいお願いします
関数宣言はあるのに実態が無いんだろ
>>319 亀レスでも大変ありがたいです。
ただ、AAとBBを結ぶCCは直線なので、任意の割合で分けても「角度的に割合で分けた」ことにはならないと思います。
本当に角度的なものなら、DDはAAとBBを結ぶ「曲線」の上になければならないと思います。
>>324 その通り
それよりなぜ極座標を使わないかを教えてくれ
>>318 Xファイルから布部分を取り出して、自前でクロスシミュしてリアルタイムに描画ってのはできます。
これだと
・リアルタイムゆえ、色々な変化に柔軟に対応可能
・リアルタイムに計算するコストが必要
ですよね。
今回はキャラがきまったアニメーションしかしません。リアルタイムに計算しない方針です。
D3DXのXファイル再生サポートをD3DXAnimationControlerしか知らないのですが、
これが制御するのはボーンの動きだけですよね?
古典的クロスシミュの1つとして、布に大量にボーンを仕込んで…という方法がありますが、(D3DXを使った)Xファイル再生ではその方法しかないのかな?という疑問です。
>>325 極座標を使うということは、一旦座標をatanなどを使って角度に直した方がいいということでしょうか?
AとBと0,0,0を含む平面を考え、その平面上でのAの角度(0度とすると計算しやすいか)と、Bの角度を求める。
という方法でしょうか?
また、今勉強中なのですがクォータニオンというものを使えば、望んでいることが簡単にできるのかとも思っているのですがどうでしょうか?
>>327 角度で応用きかすなら角度に直した方が可読性が高いかと思って
思いついてたのはargとpolar
ごめんクォータニオンはよくわからない
>>321 そうですか。
クリックしてみます。
ありがとうございました。
>>324 AAとBBは単位化してるから、CCは二等辺三角形の底辺と同じなんだけど…
プロセスが必要で、結果が求まるだけじゃ駄目なのかね
>>328 の訂正
そういや3次元だからargとpolarは使えないわw
>>327 の通りです。
座標系変換の関数がなければ作ってみてもいいだろうし
>>334 libの設定の先頭に↓は記述してる?
c:\program files\microsoft directx sdk (august 2007)\lib
>>326 その条件なら
事前計算して、その結果をXファイルにフィードバックで良いかと
今あるか分らないが、サンプルにイルカのモデルがアニメーションするのがあって
(確か海底みたいな場所で…)
それが1Xファイルで、頂点モーフしてるフォーマットだったと思う
つまり、Xファイルは頂点モーフ出来るはずだよ
フォーマット調べて、任意のキーフレーム時の頂点情報を書き込めば
補間は確かスプラインとかリニアで種類がないけど、頂点モーフ出来るんじゃないかな
…メッシュの部分的なモーフをサポートしてるかは微妙
駄目なら駄目で、クロスシミュ適応部分だけ別ファイルにして、本体に自前で子供付けするとか
>>335 レスありがとうございます
c:\program files\microsoft directx sdk (august 2007)\lib
これは一番上にあります
その下にPlatform SDKがあります
インクルードのdirectxも一番上にあります
その下にPlatform SDKがあります
>>332 理解した、サンクス
>>327 ベクトル演算と3次元回転と内積でいけるような気がする
思いつきだけど
ベクトルA(どちらか)を、加算でも減算でもいいからXY成分を0にするベクトルAAを求め
AをZ成分のみにする( A(0,0,*)みたく )
そのベクトルAAをベクトルBにも適応( つまりベクトルAをZ軸とする座標へ変換 )
( 以降、その座標系の話で )
ベクトルBとXZ平面がなす角度を求め( ベクトルBからY成分をカットして作ったベクトルBBと内積で求める )
その角度でベクトルBをZ軸回転させ、ベクトルAとBをXZ平面にもっていく
ここで、XZ平面上でのベクトルAとBのなす角を求め、その角度を使って任意の比率角度を決めて
その角度で、ベクトルBを今度はY軸回転させたベクトルCを作る
最後にベクトルCを、ベクトルBBを作った逆の回転、座標変換した逆の計算をしてもどに戻せば…
スマートじゃないけど、こんな感じは?
ムービーをWindowsXP/Vistaを対象に再生したいのですが 安定して使える関数が分からずに困っています。 現在ではどういった関数が使われているのでしょうか?
>>338 スマートじゃなさすぎないか?w
それなら327の方法のままでいい気がするが
俺もやったことはないからツッコミだけですまんが、3Dシューティングのミサイルとかって毎フレーム相手の座標に向けて1度ずつ向きを変えるとか普通にやってそうだよな・・・
意外と方法確立されてないのか?
>>340 自分でもスマートじゃないと思うが…
しかし、実際に327を行なう手順を記述しただけだと思うんだが
(オイラー法のみでクォータニオンを使わないで)
>>337 最後の「\x86」が足りなかったか。
c:\program files\microsoft directx sdk (august 2007)\lib\x86
このフォルダと、フォルダの中にd3d9.lib等一式が存在することを確認。
>>343 レスありがとうございます
c:\program files\microsoft directx sdk (august 2007)\lib\x86
この設定にしたら
>>334 のエラー文はなくなりましたがまた
>>322 のエラー文が出てきました
解決策を教えてくださいお願いします
>>344 #include <windows.h>呼んでないとか・・・w
>>345 レスありがとうございます
もう少し詳しくお願いします
それだけだとちょっと分かりません
すみません
>>346 その部分はもはやDirectXとは関係無いエラーだ
おそらく環境のインストールに失敗している
あとは汎用の初心者質問スレへ行った方がいい
これ以上だとスレ違いということで叩かれるよ
すみません、DirectX上で動くゲームを作成してるんですが、 あるモーションのキーフレーム数を調べたいんです。 (無駄にキーフレームの多すぎるモーションはリダクションをしたいんです) LPD3DXANIMATIONSETのGetNumAnimationsがそれ用の関数だと思ったんですが どうもボーン配列の数を返しているみたいで・・・。 どうすればキーフレーム数を調べる事が出来るんでしょうか?
すみません、Visual C++ 6.0でDirectXのXファイル読み込みをプログラムしたのですが 上手くいきません。ビルドには成功したのですが、実行してもすぐに終了してしまいます。 SDKはDirectX 9.0 Update summer 2003を使っています。 デバッグ内容も下記に記載します。分かる人、教えて下さい、宜しくお願いします。
'ntdll.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\kernel32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\user32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\gdi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3d9.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3d8thk.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\msvcrt.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\advapi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした
'C:\WINDOWS\system32\rpcrt4.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\secur32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\version.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\winmm.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\dinput8.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\imm32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\lpk.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\usp10.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\uxtheme.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\MSCTF.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\Downloaded Program Files\CnsMin.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\shlwapi.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\imagehlp.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
単純にループ書いてなくて一回素通りして終了するプログラムになってるとかじゃないよね?
'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\MSCTFIME.IME' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ole32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17W.IME' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\shell32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17DE.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17AE.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\comctl32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\hid.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\setupapi.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\wintrust.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\crypt32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\msasn1.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ntmarta.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\wldap32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\samlib.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3dxof.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 スレッド 0xF2C 終了、終了コード 0 (0x0)。 プログラム 'H:\CLUB SEE\3Dチェス\my3dlib\Debug\my3dlib.exe' はコード 0 (0x0) で終了しました。
ググレカス
もはや荒らし VisualStudio使ってるなら、ブレークポイントで止めて一行ずつ実行してけカス
mviewでXファイルを開いた時、アニメーションのリストがメニューの Animation > Animations の下に最大50個現れると思うのですが、 Xファイルを開いただけだと何故か現れません。 Add Animationで追加オープンすると、最初に開いたXファイルのアニメーションと、追加で開いたXファイルのアニメーションが両方現れるのですが… AddAnimationせずに、最初に開いたXファイルのアニメーションを表示する方法はありませんか?
>>347 レスありがとうございます
インストール時にエラー文はでなかったんですけどねぇ・・・
パスも通せない馬鹿は死んでいいよ
>352 ループには問題なさそうですね。 >356の言う通りにしたら解決したわ、もっともブレークポイントなど使わずに 一行ずつ実行していったがな。ヒントありがとよカス。
みなさーん 池沼には優しくしてあげましょう 社会のゴミですが同じ人間です
ttp://www.imgup.org/iup605620.jpg.html コンパイル中↑こういうのが出た後に下みたいに「シンボルが読み込まれていません。」が大量に出るんですけどどうしたら出なくなりますか?
'MuscatBoy.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\user32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\gdi32.dll' を読み込みました。シンボルが読み込まれていません。
363は自己解決しました
>>360 ヒントもらえたんだから感謝せぇよアホ
合致するシンボル情報は見つかりませんでしたってのは、
「デバッグ用にDLLを読み込んだが、特に必要な情報は無かった」
とかの意味だ。(厳密には違うかもしれんが)
それはデバッグ実行すると当たり前に出る内容であって、
そんな大量の、何の問題もない(かつDirectX無関係)の内容を貼り付けたら
荒らしとか言われても仕方無い。
質問です Xファイルを使ったモデルにマルチテクスチャを行ないたいのです 例えば地面に見た目用のテクスチャーと、バンプ用のテクスチャーを適用したいと思っています。 ただ、Xファイル系のサンプルを見る限りテクスチャーを2つ使うことは想定外のように見えました。 カスタムテンプレートという仕組み上、自前でそういうXファイルは作れそうですが、3DモデラーがそういうXファイルを吐いてくればれば(あまり)意味がありません。 マルチテクスチャなXファイルというのは一般的ではないのでしょうか? LWを使ってXファイルを吐いているのですが、もし良い方法があれば教えていただけると幸いです
ピクセルシェーダーで合成すればいいんじゃじゃね?
370 :
デフォルトの名無しさん :2008/05/07(水) 19:17:02
今頃DirectX10のサンプルみたら、三角形ポリ描画するだけでシェーダー必要とかXファイルがサポートされてないとかアホか。 DirectX使うのは思いついたゲームをちゃちゃっと作りたいからなのに、生産性下げてどうする・・・
質問です 頂点ブレンディングはDirectXの機能で実装するのと 頂点シェーダで実装するのとでは、どちらが一般的ですか?
>>371 調査統計をとるようなマーケティング能力や、
規格を立ち上げる権限をもった人間がいるわけでもないのに、
そんな不確定な情報を誰とも知らない人間に聞くその意図を明確にせよ。
ロボットのように命令が無ければパンツもはけないというのなら、
一般的かどうかを聞くより、最初からあらゆる事を指示してと言えばいい。
まずは一般的という基準を明確にすることから始めないといかんだろ。
聞き方が不味かったのかな? ここの人たちはどっちでやってますか?と言う聞き方ならまだ良かったとか?
人それぞれ
ターゲットマシンによるべ あくまで古いマシンでも動かしたいなら頂点シェーダ使うのはきびしいんじゃね?
おまえら意地悪ですね 俺はこうしてるってだけでもいいんじゃないの
そもそもシェーダを利用するのはDirectXの機能とは言えないのか? シェーダを利用するしないに限らず、ハードが対応していなければ、 DirectX側がエミュレーションするし、していなければハードが処理するだけで、 データを渡すのはDirectXが処理していると言える。
行間から固定機能パイプラインorシェーダと読めたんだが違うのかな?
つまりDirectXではなくOpenGLからシェーダを利用するかどうかという話なのだろう。
どちらが一般的かと言われれば固定機能パイプラインだろう なぜならそれしかなかったから だが、いずれ消え行く技術をいまさらやってもだし シェーダーでやっといたほうが後々まで使えるんでね?
383 :
291 :2008/05/08(木) 00:04:46
仕方が無いのでDXUTの解析から始めようと思います。 (解析して光明が見えてくればいいのですが・・・)
馬鹿はシェーダーを使えない。それだけ。
頂点ブレンドってスキンメッシュとかのことよね? だとしたら、一般的とかいうより色んな制約で変わってくるんじゃね? ・自前形式ではなくXファイルを使うなら、D3DXのスキンメッシュサンプルと 同じ方法が使える ・でもそのやり方だと行列パレット使うので関節のSLERPが出来ない(LERPになる) そこらへんにこだわると、必然的に自前コードで広げることになる ・でも固定機能パイプラインの行列パレットは、最近のビデオカードではほとんど ハードウェアサポートされてない(ソフトウェア頂点処理に頼ることになる?) ・頂点シェーダで計算する場合、シェーダ3.0までは定数レジスタが256しかないので 1ボーンあたり3レジスタ(SLERPなら2で足りるが)だとすると80ボーンしか使えない 俺がやった限りこういう事情が絡んで来たから、色々調べつつ 自分のやりたいことと照らし合わせてたら必然的にやり方は決まるよ。
DirectX9使ってるんですけど ID3DXEffect::SetTexture とか ID3DXEffect::SetFloat って コスト高いんですかね? ループの内側で使っちゃダメかな?
>>371 頂点シェーダでやるのが良いと思うよ
まず、ソフトウェアエミュで頂点シェーダを行なってもそれほど重くないのが1つ。
ブレンド可能数が頂点シェーダのほうが融通利くのが1つ。
他の頂点シェーダエフェクトと一緒に利用できるのが1つ。
固定パイプラインでハードウェア処理の頂点ブレンドやるとバグるグラボが少なからずある
(ドライバアップデートすればなおるんだけど、ユーザーは必ずしも…ね)
だから私は頂点シェーダ+ソフトウェアエミュ派
>>385 横槍で質問
・頂点シェーダで計算する場合、シェーダ3.0までは定数レジスタが256しかないので
1ボーンあたり3レジスタ(SLERPなら2で足りるが)だとすると80ボーンしか使えない
これって、1頂点へ影響するボーンが最大80って意味?
それともモデル全体を通して80ボーンが限界って意味?
必要に応じて分離すりゃいいだけ
DrawPrimitive1回に対して80ボーンが限界って事。 D3DXMesh関係だと其処を考慮してDrawPrimitiveを何回かに分けて256本までのボーンに対応できるようになってるだろ。
391 :
385 :2008/05/08(木) 17:00:17
うん、説明不足だったけど1回の描画では、ってこと。
>>390 みたいにすれば確かに制限は無くなる。
自分はやってないからわからんけど、
事前に頂点のリンクと面の接続を考慮してメッシュを分割しておけばいいかと。
ミス、
>>389 みたいにすれば。
D3DXMeshが自動で何かやってくれるのは知らない
うわ、最近D3D始めたばっかりなんだけど、スキンメッシュってそんなに定数レジスタ使ってるなんて気づいてなかったw D3Dのサンプル様様だなぁ… ちゃんと26ボーン毎に分割して、正常に表示できるように調整されてるっぽ (サンプルのSkinnedMesh)
アプリが終了すると Direct3D9: (ERROR) : [0] : Address 04F1E4CB Direct3D9: (ERROR) : [1] : Address 04F1E59B Direct3D9: (ERROR) : [2] : Address 04F1E440 Direct3D9: (ERROR) : [3] : Address 0501CCA5 Direct3D9: (ERROR) : [4] : Address 05023345 Direct3D9: (ERROR) : [5] : Address 05002898 Direct3D9: (ERROR) : [6] : Address 05016E13 Direct3D9: (ERROR) : [7] : Address 00486437 Direct3D9: (ERROR) : [8] : Address 00474CBE Direct3D9: (ERROR) : [9] : Address 004770CA Direct3D9: (ERROR) : [10] : Address 7C23ABCC Direct3D9: (ERROR) : [11] : Address 7C23B209 Direct3D9: (ERROR) : [12] : Address 7C235CC1 Direct3D9: (ERROR) : [13] : Address 7C22FF89 Direct3D9: (ERROR) : [14] : Address 7C22F067 Direct3D9: (ERROR) : [15] : Address 7C22EFDE が複数行 みたいなデバッグログ(OutputDebugStringで書けるやつ)でるんだけど 何が悪いんですか? あと、m_pd3dDevice->GetRenderTargetで取得したやつは、 Releaseすべきですか?
ワンスキンしか作れないとかいうウンコモデリングソフトに当たったら最後w なんでもかんでもすべての頂点に影響与えるとかギャグですか?w>某会社の自作モデリングツール 捨 て ち ま え よ ! (中小害虫社員(28歳♂))
同い年ですね。 わかります。
371です ありがとうございます とりあえず頂点シェーダでやってみます
>>395 DrawPrimitiveが減らせるので逆に高速化することが可能な場合も多々。
たとえばロボットみたいなものをパーツ毎にDPするよりは、ウェイト仕込んで
ボーンでドーンと1回のDPで描く方が実は速い。
>>395 せめてそのウンコモデリングソフトが何か書いてくれないと
どう考えてもボーンとかよくわかってない人がとりあえず 頑張ってみました的臭いするやんか?
スキニングの計算をCPUでやることになるから グラフィックカードあんまり関係なくね?
ボーンを使おうが使うまいが階層のマトリックス演算は結局行なう。 そのマトリックスをWorldとして頂点シェーダーで計算するか、 スキン用のマトリックスとして頂点シェーダーで計算するかの違いだろ。 ボーンの場合Offset用の演算が加わるが、 DrawPrimtiveのコールはマトリックスの乗算とは比較にならないくらい重い。 スキンの処理までCPUでやるっつーなら話は別だけどDirectX7でやってるわけじゃないっしょ。
>>406 DirectX7世代でやるならそうなる。
それ以上ならもっとよい方法が存在する。
>>407 よかったら輪郭線抽出について情報いただけませんか
Zバッファの差を見る方法や、マテリアル境界を見る方法、モデルをちょっと太らせて裏返して黒描画する方法など色々調べましたが
406のURL先ほどまで「正確」で「自在な太さ」にできる術が見つかりませんでした
トゥーンレンダリング
>>406 のは
希望をこめて絵を修正してるって書いてあるやん
>>408 自分で答え書いてるじゃん。
深度バッファやマテリアルの境界を輪郭検出のアルゴリズムで線を引けばいい。
その場合1ドットのラインしか引けないわけだが、
1ドットのラインを別のバッファに書いてそのバッファを上下左右にずらして
もう1度書くと太くなるというのはわかるかい?
>>412 もちろんその手の「太くする」方法はわかりますが、
深度バッファ法はちょっとひいったアゴのような、深度差が浅い部分に輪郭線が出ません
マテリアル法でも同様です。
モデルをちょっと太らせて裏返す法や、406のURL先のものほど「正確な」ものはなかなかありません。
内積が正か負で判断して線引く
>>406 のをシェーダでかけば同等の正確さじゃないの?
○輪郭線アルゴリズム
確かに
>>406 のものが
最も正確でキレイに作れそうなので、
>>406 を主にすべきだな。
○ジオメトリ操作は、なるべくGPUでやりたい。
1パス目:D3DFILL_SOLIDで描画
2パス目:D3DFILL_WIREFRAMEで描画
この2パス目を、先のアルゴリズムで
輪郭線のみ描かれるようにすればいいんじゃないの。
○線の太さは任意に変更したい。
これは、2パス目を
>>412 の方法で太くすればいいんじゃないの。
>2パス目:D3DFILL_WIREFRAMEで描画 > >この2パス目を、先のアルゴリズムで >輪郭線のみ描かれるようにすればいいんじゃないの。 書いてから気付いたけど、これはちょっと難しいかなぁ
>>414 頂点シェーダで線を引くことはできないと思いますけど…
>>415 その方法ですと、やはりアゴなどに輪郭線を出すことができませんよね。
>>406 のものと同等の正確さというのはかなり難しいなぁ…
GPUを使ったものは、やはり速さ優先で作られてるし
うるせえ!!!
「自在な太さ」というのが
>>406 だと結構難しいはずなので(あと処理がキツイだろこれ)
結局のところ割り増しモデルを裏返し手法に落ちついちゃうんだよなぁ。
精度は落ちるけど、押し出す頂点位置を距離によらず一定になるように頂点シェーダで
調整すればそれなりの見栄えにはなる。
>>420 I3DXLine使えば太さは楽勝じゃね?
頂点データをもとに自前で線引いてるんだから
>>421 使ったことないので知らんが、あれでは太くなったら普通に線の一部が元モデルにめり込むか、
Z値を考慮せずに描画されるならなおさらこの手法には使えないのでは?
一ドットの線ならZバイアス使わんでも自前で射影行列なり弄れば
>>406 の「理想」の線は描画できるが、
それ以上の太さになるとポリラインで表現することになり、そうなればどこまで線のZ値を前に押し出せば
元のモデルと重ならずに描画できるかは簡単には見積もれないはずだ。
>>422 ああ、ごめん。モデル側にめり込むのはご法度って考えだったのね。
俺は太さ3までだったら、モデルに1ドットめり込むだけだから別にいいやって思ってたもんで
>一ドットの線ならZバイアス使わんでも自前で射影行列なり弄れば
>>406 の「理想」の線は描画できるが、
よかったらこのあたり、詳しく解説してくれないか
法線方向にプッシュして裏返すのって、特許取ってなかったっけ?
ちょっとD3DFILL_WIREFRAMEが話題にあがったから試してみたんだが D3DFILL_WIREFRAMEにしてもD3DFILL_SOLIDと描画時間が一緒だったんだが… 何かの間違いだろうか? PixelShaderの呼び出し回数が段違いだと思うのに…
なら頂点シェーダーかCPUがボトルネックなんだろ。 たいした量描画してるわけじゃないなら大抵CPUがネック。
質問です 今、PixelShaderを使う描画を学んでおり、自分のメインPCでは正しく動作しました。 試しにと、PixelShaderに対応していない(1.0にすら対応していない)古いサブマシンに持っていって動かしたところ、正しく動いてしまいました。 ここで疑問なのですが、何故正しく動いてしまったのでしょうか? どうやら PixelShader = compile ps_1_1 PS(); と書いた部分が、メインPCだと正しく適用されるが、サブPCだと無視され固定パイプライン(という呼び方でOK?)のPixelShaderにより描画されているっぽいです。 これはHLSLの仕様なのでしょうか? てっきりHLSLのコンパイルエラーとなり、fxファイルのロードに失敗するかとふんでいたのですが…
補足です。 >ここで疑問なのですが、何故正しく動いてしまったのでしょうか? の時点では、書いていたPixelShaderが固定パイプラインのそれと同等だったため「正しく動いているように見えた」のです。 ためしにPS()内で必ず「黒」を返すようにしたところ ・メインPCでは正しく黒を ・サブPCでは通常通りの描画を したため「サブPCではPS()が無視され、固定バイプラインのPixelShaderが呼ばれている」と判断したのです。
>>426 どうやらボーンによる頂点変換(ソフトウェア処理)がボトルネックだったっぽ
すまん
確かに俺の環境も PS2.0世代のGPUのくせに PS3.0コンパイルのShaderが HWで動いているな。 多分これは、PS2.0に対応とか3.0に対応ではなく 2.0、3.0で追加された機能に対応しているという話だろう。 ただアンタの言うPSの代わりに固定機能が動くというのはないな。 勘違いだろ。
対応してなくても動作はするけど 対応してないPCじゃコンパイルはできないよね あとピクセルシェーダーの動作って コンパイルしたマシン(のGPU?)に依存してる? 家のPCでテストした実行ファイルを仕事場のPCで動かすと 家のPCと同じ動作するけど コンパイルしなおすと動作が変わったりする
>>430 お返事ありがとうございます。
>ただアンタの言うPSの代わりに固定機能が動くというのはないな。
うーん、どういじっても
PixelShader = compile ps_1_1 PS();
の PS()の中身は無視されてしまいます。
float4 f = {1.0f, 1.0f, 1.0f, 1.0f}
return f;
という単純なPS()の中身ですら、メインPCだと正しく真っ白になり、
サブPCだとPixelShader = compile ps_1_1 PS();の宣言がないがごとく振舞います。
エフェクトは
D3DXCreateEffectFromFile
でロードしています。
D3DXが気を利かせてくれてるのかねぇ・・? PS非対応環境なんてもはや持ってないから、アドバイスできん。すまん
なんもエラー出てないの?
何もエラーでないですね…。 ただ、ReleaseビルドのEXEファイル生実行ですので、次はサブPCのVC6.0上でDebug実行し、D3DXのログ出力を見てみます。 家に帰るのは夜です 正直質問した時は、あっさり 「PSが無い環境では、compile ps_1_1 PS(); って記述は無視されて、固定パイプラインとして実行されるよ」 とかくるかと思っていたのですが…
435です。 やはり特にエラーメッセージもなく、単にスルーされているだけっぽい動作です。 どなたか心当たりあるかたいらっしゃいませんかー? 仮説 PixelShader = compile ps_1_1 PS(); などは、動作環境のサポートバージョンが、コンパイル指定したバージョン未満の場合は (エラーを出さず)変わりに固定パイプラインを呼び出す
>>436 はじめにサポートバージョンってわからないっけ?CAPSで
つか、何がしたいんだっけ?
>>436 それ固定昨日と頂点定義が一致してないとランタイムで死ぬだろ
>>437 やりたいことというより、こういう動作をするものなの?という疑問を解決するのが目的ですね。
CAPSでシェーダのバージョンはとれるので、意図しない動作を起こさないようにバージョンではじくことは可能ですね。
>>438 ちょっといまいちわかりませんが、頂点シェーダでの出力定義が「(固定パイプライン的に)普通」じゃないとランタイムエラーになるということでしょうか?
そもそも頂点シェーダでは「普通」じゃない出力はできないと思っていましたが違うのでしょうか?
(だから計算結果とかを、使ってないテクスチャーUVの中に入れるとかでごまかして渡す)
とりあえず、そんなことをしている場合は描画がしっちゃかめっちゃかになりそうですね。
440 :
788 :2008/05/13(火) 17:48:16
directXのAppwizardってVC++6の時代のものですか? UPdate Summer2003(v9.0b)では,CD3DApplicationという汎用クラスが あったのに最新バージョンではなくなっています. その代わり,DXUTというフレームワークがふんだんに使われています. directXのバージョンによってプログラミングテクニックがころころ変化して いるように見えるんですけど(1〜2年前の参考書が最新バージョンと大きく 食い違っている),いったいどのバージョンを勉強したらお得なんでしょうか? 小生,これからdirectXを勉強しようというものです. やっぱり,最新バージョンでSDKを使ってシコシコ書くのがベストでしょうか? MFCのdaialogベースでdirectxを使ってみたいのですが. あと,DXUTを解説している本やサイト(英語でも可)があったら教えてください.
442 :
デフォルトの名無しさん :2008/05/13(火) 19:48:34
>>441 ありがとうございます。早速、購入してみます。
ID3DXLineって便利だけど 遅いの?
>>439 例えば、自分が固定パイプラインと同じ機能をシェーダ使って実装するとしてどうなる?って話じゃねぇの
シェーダの質問なのですが、 D3DFMT_R16FやD3DFMT_A8のように4要素のないテクスチャで float4でtex2Dを取得した場合zやwはどんな値になるのでしょうか? 不定なのか、0が入るのか、前の値が保持されたままなのか、など教えていただけると助かります。
ドキュメントくらいはちゃんと嫁。 float4(0, 0, 0, 1)に対して渡された要素が上書きされるイメージ。
>>446 ありがとうございます。
ドキュメントの探し方が甘かったようです。申し訳ありません。
>>448 PCに入ってるSDKのバージョンがそのソースの想定したSDKの
バージョンとあってないとコンパイルできないよ
ごめん、コンパイルは通るけどオリジナルと挙動が違うってこと。。
引数とかも違うだろ?
>>450 exeがなかったので違いがわからないけどソースからビルドしたやつも普通に動作してるよ
挙動が違うとは具体的に何が違うの
質問です。
Radeon 9600 series AGP 128MB(ドライバは
ttp://ati.amd.com/support/drivers/2k/radeonx-2k.html )の環境にて、かなりおかしな挙動をしています。(OSはWindows2000)
何か情報ありませんでしょうか。
なお、その他の環境3個所くらいで試してみましたが、特に問題は見られませんでした。
・テクスチャーの表示がおかしい
256x256サイズのテクスチャーを10枚程度読み込んだあたりから、一部のテクスチャーの表示がおかしくなります。
テクスチャはD3DXCreateTextureFromFileで読んでいます。
テクスチャーが張られているモデルは、Xファイルで読み込んだ板ポリや、立方体などの単純なものです。
テクスチャーが張られているところが全体的にRGB(0,255,0)な感じに色になり、ほんのちょっとだけ元のテクスチャーの名残が見られるような、なんともバグった感じになります。
読み込むテクスチャーの数を減らすと、さっきバグって表示されていたものも綺麗に表示されます。
描画はプログラマブルシェーダを使わず、固定機能のものです。
・固定シェーダの挙動がおかしい
pDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CURRENT);
pDev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TEXTURE);
pDev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pDev->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT);
pDev->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_TEXTURE);
pDev->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
と設定しているのですが、
pDev->SetTexture(0, NULL);
pDev->SetTexture(1, pTexture1);
としたとき、pTexture1の色が乗算されません。
pDev->SetTexture(0, pTexture0);
pDev->SetTexture(1, pTexture1);
ではきちんと両方の色が反映されるようです。
Radeon 9600は比較的新しいボードですし、むしろ超古いGeForce2MX400とかではまともに表示されます。何か原因が思い当たる方いらっしゃいますでしょうか。
454 :
デフォルトの名無しさん :2008/05/16(金) 16:37:56
伝説巨人RADEON
使い方がおかしい
>>455 どこか、
>>453 の中に使い方がおかしいことを示す情報があったでしょうか?
ご教示願えればありがたいです
ATIとnVIDIAの違いなんじゃね
>>453 の追加情報です。
pIDirect3D9->CreateDevice(adapter, D3DDEVTYPE_REF, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, ¶m, &pDevice);
REFモードならバグりようがあるまい。と思って試してみようとしたのですが、
RADEON環境だとこの生成に失敗しました。
…RADEONというものは、思いのほかDirect3Dと相性が悪いのでしょうか?
>>453 SetTexture(0, NULL)してるのに、ステージ0でテクスチャ参照したら駄目だろう。
When a texture stage has D3DTSS_COLORARG1 equal to D3DTA_TEXTURE and
the texture pointer for the stage is NULL, this stage and all stages after it are not processed.
ARG1にD3DTA_TEXTUREをしておいて、テクスチャにNULLを設定するとそのステージ
以降が無効になる仕様だが、ARG2については何も書かれていないので未定義かも。
>>459 なるほど。ARG2がテクスチャ、かつNULLなときに後のテクスチャを参照してくれていたのは
GeForceが「たまたま」そう定義していたからであったわけですね。
気をつけます。
ちなみにそこに気をつけるよう改良してみましたが、1番目の「・テクスチャーの表示がおかしい」は相変わらずです。
>>460 それもなんかおかしいんじゃねぇの?w
基本的にnVidiaのボードは確かに未定義や
おかしな部分を変な風に救っちゃう設定だからRADEONで開発したほうがいいぜ
俺も開発のときにnVidiaのボード使ってて苦労した
固定シェーダの恐怖だな nVidiaとその他一部のボードでは動くんだけど それ以外ではうんともすんとも言わないとかいう状況がありえる恐怖 (納期まで一週間とかいう状況ではじめてRADEONで動かして画面真っ黒になったときは血の気が引いたw) HLSL使うようになってからそういう苦労は一応消えた 固定シェーダ止めるとこの辺はグッと楽になる
>(納期まで一週間とかいう状況ではじめてRADEONで動かして画面真っ黒になったときは血の気が引いたw) > いやあああああああ
>>461 なるほど、とりあえずRADEONの購入は検討してみます
>>463 それは血の気が引きそうですね
私も公開するゲームを作っているので、なるべくRADEONにも対応したいところです
全てHLSLで書くのも検討していますが、「・テクスチャーの表示がおかしい」の件は、HLSLを使った描画の部分でも発症しているので困ったものです…
DirectXの勉強をはじめたいのですがもう固定機能パイプライン?は無視してHLSLとかプログラマブルな シェーダーの勉強を始めたほうがいいのでしょうか?
自分の開発環境がプログラマブルシェーダに対応しているなら、そっちのみでいいと思われる。 VertexShaderは最低でもソフトウェアエミュレートができるし、 PixelShaderにしてももう対応していないグラボなんて存在しないと思っていい。 でもオンボは対応してねーんだよなぁ('A`)
468 :
466 :2008/05/16(金) 21:58:34
MSのカンファレンスでもらったVS2008スタンダードにGe7900gs、OSはXPです。 固定機能はさすがにいいですかね。
469 :
466 :2008/05/16(金) 21:59:39
ありがとうございました。
皆さんノートPCのことも考えてあげてください もしくはこの世から全てのオンボードPCを破壊してくださいマジでもう
>>452 vc++2008ではまんまではコンパイルとおらなかったので、DInput.cppの
63行目 ret = DirectInput8Create(hinst,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&lpDInput,NULL);
115行目 ret=lpDInput->EnumDevices(DI8DEVCLASS_GAMECTRL,InitJoystickInput,lpDInput,DIEDFL_ATTACHEDONLY);
に修正してコンパイルとおしたんだけど、126行目がfalseを返してくるの。
472 :
453 :2008/05/16(金) 22:29:39
色々アドバイスありがとうございました。
>・固定シェーダの挙動がおかしい
この件ですが、RADEON上だけでなく、GF上でもREFモードだとうまく表示できませんでした。
>>459 さんのアドバイスがクリーンヒットだったようで、気をつけながら直したところ、REFでも綺麗に表示されるようになりました。
RADEON上でpTexture1が乗算されるようになったようです。
(ただし、pTexuter1自体がバグっているため、乗算はされたものの、おかしなテクスチャが乗算されています)
今後はREFモードでちょくちょくチェックしながらやっていきます。
現在は、RADEON使いと連絡がとれなくなってしまったため、
「・テクスチャーの表示がおかしい」については後日また調査して、報告します。
どうしても治らない場合はまた相談させていただくかと思いますが、その時はよろしくお願いします。
お疲れさん ちゃんと報告してくれる質問者は歓迎だぜ
ウホッここを覗いててよかった ラデオン買ってくる
>>471 DIrectX 7以下じゃないと動かないよ
8にするなら全部書き換えろ
>>448 Dinput.hに
#define DIRECTINPUT_VERSION 0x0700
を追加
関係ないけど、DirectInputってウイルスバスターが不正変更で〜って怒るとない? お兄さんたちはどうしてるのかな?
あ、あれってDirectInputのせいなんだ。。。 僕の作ったソフトも怒られるから気になってたけど。。。
ウイルスバスターはDirectInput使うと怒るのね 友人にテストしてもらったら 「不正な変更とか出る ウイルスだろこれ?」 とか言われたお ネットワーク対応ゲームでも作ろうかと思うんだが、 DirectPlay使うのとWinSock使うのとどっちがいいんだろ DirectPlyaはWinSockに比べるとダメだという話をよく聞くけど どこがどうだめだかよくわかんね 手軽に実装するならDirectPlayのほうが楽そうにも感じる そこら辺詳しい人いませんか?
あんま詳しくないが、TCP使えないらしいお。 そういった制限があるから、やっぱ「お手軽通信」なイメージはある。 Winsockは、アプリケーションが使うTCP/IPの基本かつ全てだから DirectPlayに出来てWinsockに出来ないことはない。 そういう意味だとオモ<Winsockに比べるとダメ 本当にTCPが使えないのなら、オンラインRPGには無理なだ。
今右ドラッグで3Dオブジェクトを回転させるのをやっていて、とりあえず D3DXQuaternionRotationYawPitchRoll(&q,マウスのX変移,マウスのY変移,0); とやってそれっぽい動きにはなってるんですが、どうもメタセコとかと操作感が違うんですよね。 ドラッグ開始時にXYの回転軸を作って、それに対する回転てやりたいんですが 何使ったらいいですか?
>>481 RotationYawPitchRollは角度が非常に小さければ任意軸周りの回転に
近い動きをするが、本来は全く違うもの。
マウスの移動量とZ軸で外積を取って、その軸周りの回転を使う。
>>482 親切にありがとうございます。意味はなんとなく分かるんですが、頭がついて来れなくて・・・
で、それはZ回転が起こらない場合にのみ使えるんですよね?多分(今回はそれでもいいですが)
>>479 色んな通信に対応しすぎてて、初期化が遅いのが一番の不満かな<Play
といってもPlay使ってたのはDirectX7の頃だから、改善されてるかもしれんが。
WinSockなら全ての通信を自分で把握できるのが強み。
>>484 DirectPlayは廃止されて久しい。
WinSockを叩くのが一番無難で楽しい。
WinSockだとセッションとかのゲーム的な概念がないから そこらへんも全部自分で実装しなきゃならないんだよね? WinSockのネットゲームで使えそうなお手ごろサンプルがあるといいんだけど
質問です。 DirectXを使って2Dゲームを作ってみようと思ってMSDNのリファレンスを見ていたところ、 CreateVertexBuffer()で頂点バッファを作ってLockとUnLockの中で頂点を処理していました。 ですが、別のホームページにはこれらを使わずに描画してるページもありました。 2Dの場合はCreateVertexBufferを使わずに描画したほうがいいのでしょうか? それともCreateVertexBufferを使わなくても描画出来るという解釈でいいのでしょうか?
別にどういうやり方しても構わないよ。 ただ、 ・頂点バッファをビデオメモリ上、AGPメモリ上に作ると描画が速い ・が、そういう場所に作った頂点バッファをLockするのは重い(ビデオカードの処理を止めるから) ・システムメモリ上に作った頂点バッファのロックなら遅くない(多分。)が、 それは頂点バッファ作らない方法と同じこと。ビデオカードから遠いので描画は遅い 毎フレーム書き換えるような頂点配列なら、システムメモリに置くか 頂点バッファ使わずにやるのがのがいいんじゃないかと。 検証とかしたことないので間違ってたら指摘ヨロ
チラシの裏にでも書いてろ
490 :
487 :2008/05/19(月) 03:43:14
>>488 なるほど、どっちの処理が重いかで使い分けるといいみたいですね。
ありがとうございます。
>>488 追加⇒DYNAMICとDISCARDフラグを組み合わせると描画もLockも速いがメモリを食う。
>>489 なるほど、チラシの裏ですね
よくわかりました
493 :
472 :2008/05/19(月) 19:22:45
色々アドバイスいただいた
>>453 です。
>>459 さんのアドバイスによる修正のおかげか、RADEON上でも綺麗に表示されたそうです。
ありがとうございました。
D3DTSS_COLORARG1 にTEXTURE
D3DTSS_COLORARG2 にCURRENT
なるべくこうするのが吉。というわけですね。
大抵の初心者サイトがこうしている一方、時々は逆も見かけるようです。
他の人が同じ失敗しませんように…。
チェックしたら見事に失敗してたわ SDKをもう一回全部読み直したほうがいいかもなー・・・
演出について質問 キャラが地面に着地した際、演出として着地点のまわりに衝撃波を立てたいと思っています 例えるなら、牛乳の入ったコップに牛乳を一滴おとした時にできる、王冠のようなものです こういう演出はどのようにして実装するのが良いでしょうか? 今まではボーンアニメまでしかやったことがないのですが、モーフィングという技術のほうがより良さそうな気がしています
497 :
487 :2008/05/20(火) 00:09:01
>>492 調べてみたら動的に確保したメモリを静的に確保したように見せるとのことだったんですが、
これはVRAMとAGPメモリに確保して同期させるという解釈でいいのでしょうか?
498 :
487 :2008/05/20(火) 00:09:52
>>497 昔はそうなんだが、現在のVGAだと諸々の理由でシステムメモリを介したコピーを
行っているものが多いので、動的な頂点バッファはほとんど意味を成さなくなっている。
経験で言うならシステムメモリよりも頂点バッファを使う方がパフォーマンスが高くなる
傾向があるのは確かだが、大半は大した性能差があるわけでもないし、
そもそも適切に扱うためのフラグ設定が頂点バッファはわかりにくいので、
個人的にはシステムメモリ(DrawIndexPrimitiveUP等)で実装することをお勧めする。
2Dスプライトの実装なんぞDrawPrimitiveのバッチ処理さえしておけば
それ以上は深く考えんでも良いと思うぞ。
AGPメモリを使うか否かで動的なデータは速度に大差が出るぞ
非同期で処理させるかの違い
502 :
デフォルトの名無しさん :2008/05/20(火) 19:02:00
まあ、自分のゲームでやってみるのが一番 つーのは想定している状況によりけりって感じだから なんでも使える汎用ルーチンなんて作ろうと考えないで状況に応じて対処したほ
503 :
487 :2008/05/20(火) 20:53:38
>>499-502 2Dの処理にそこまで考える必要はないけど、
詳しく知りたい場合は自分のゲームで実装して調べたほうが早い、とのことなので、
時間に余裕があるときに調べてみたいと思います。
色々ありがとうございます!
環境にもよるんじゃないか
WinSockだとポート空けるのをユーザー側に頼まなければならないので UPnP対応してるDirectPlayつかうことにしたぽ
UPnPの対応はDirectPlayに頼らなくても簡単に出来るぞ
Direct3D9.0のデバイスロストからの復帰で ・D3DPOOL_DEFAULTのテクスチャ解放 ・D3DXFONTのOnLostDevice()呼び出し この2つは順番適当 ・D3DXSpriteのOnLostDevice()呼び出し pDevice -> Reset(&Param); ・D3DXSpriteのOnResetDevice()呼び出し ・D3DPOOL_DEFAULTのテクスチャ確保 ・D3DXFONTのOnResetDevice()呼び出し この2つは順番適当 ・レンダーステートの回復 てやってるんだけど、画面真っ暗です。これ以外に何やるんでしょう? あと順番に決まりはあるんでしょうか?
>>508 確保したリソースの解放をちゃんとしましょう。
Debug Runtimeでエラーメッセージの確認をしましょう。
>>506 ひょっとして upnp.h とか使うの?
ネット探しても具体的なやりかたが乗ってるところがないのが困る
お前は空気読め
「頂点ベースの描画」という言葉の意味がよく分かりません 対になるものは何でしょうか?
ポリゴンで描画(3つの頂点)で描画と思ったらいいんじゃね? ポリゴン2個で四角形になるお
515 :
513 :2008/05/22(木) 16:53:09
>>514 知識不足ですみませんが、そうでない描画の方法があるのでしょうか?
つーか、「ポリゴンで描画で描画」ってなんだよ。
そもそも 「頂点ベースの描画」なんて聞いたことがない
>"ポリゴンで描画で描画"との一致はありません。 >"頂点ベースの描画"の検索結果 1 件中 1 - 1 件目 (0.14 秒) >"頂点ベース" の検索結果 約 148 件中 1 - 10 件目 (0.24 秒)
頂点シェーダーでライト当てるかピクセルシェーダーでライト当てるかって事でないん? そのくらいしかない気がするんだが。
>>513 どこで頂点ベースって聞いたんだよ?
>そうでない
DirectDrawのスプライト描画のことじゃね?
さいきんのゆとりはDirectX7以前を知らんのか
ポリゴンで描画の間違い
そもそもDirectXにスプライトなど存在しない
ジオメトリベースド イメージベースド
524 :
508 :2008/05/22(木) 23:22:56
バックバッファの解放と確保 ステンシルの解放と確保も付けたんですが、まだPresent(0,0,0,0)がD3DERR_DEVICELOSTを 出してきます。何が足りないんでしょうかT-T
それは作った本人にしかワカリマセン。
POOL以外で作ったテクスチャとか頂点とか全部削除する
>>526 StateBlockとかもだな。
EffecとかFontとかSpriteも中でStateBlock作ってるからロスト対策が要るけどなー
528 :
508 :2008/05/22(木) 23:45:28
フロントバッファは何もしなくていいんでしょうか?StateBlockは作ってるつもり はないんですが・・・何か他に暗黙的なものがあったら教えていただけないでしょうか?
スレ住人が超能力に目覚めるよりはソースを出す方が解決は早い思います。
D3DX〜系のLostDevice()は全部やってる?
DX10で作ればおk
Resetしてないんだろwww
533 :
508 :2008/05/23(金) 00:43:08
>>528 ソースのみですか?関係ないクラスを除いた抜粋でいいですか?
>>530 フォントとスプライトなら呼んでます。
>>532 Resetからの返り値も出力してるので多分大丈夫だと思います・・・
ResetはPresenがD3DERR_DEVICELOST以外を返した後の話だから関係なくね?
535 :
508 :2008/05/23(金) 00:58:54
現在、大学3年でシェーダーの勉強をしています。 それで、データの可視化の研究をしてみたいと思うようになったのですが、シェーダーの出番ってありますか? 無駄になるのもなあと思っているのですが。 OpenGLも少し勉強したことはあったのですが、可視化の分野はどちらを使ったほうがいいでしょうか? また、仮にシェーダーを使う場合、どのような研究のネタがあるでしょうか?
どう可視化したいのかも書かずに質問とな?
と言うか、綺麗に見せたきゃ使うような物だからあんまり意味なくね?
>>535 common.h無いいわれるお
できればプロジェクトもあげてほすぃ
デバッグしやすい
関係ないが Graphics::drawSprite のBegin End の対応がおかしい
541 :
508 :2008/05/23(金) 19:03:13
現在ブロック崩しを製作中なのですが、もし「20個あるブロックがなくなったら」という状況を表現するために下記のように打ったら、「error C2106: '=' : 左のオペランドが、左辺値になっていません」とエラーが出ました。 どうすればいいのでしょうか。 if(block1==0&&block2==0&&block3==0&&block4==0&&block5==0&&block6==0&&block7==0&&block8==0&& block9==0&&block10==0&&block11=0&&block12==0&&block13==0&&block14==0&&block15==0&& block16==0&&block17==0&&block18==0&&block19==0&&block20==0)
543 :
デフォルトの名無しさん :2008/05/23(金) 23:12:19
すいません、正式に言うと「ブロックがなくなったら」ではなく、「ブロック変数がゼロになったら」でしたね
block11=0
545 :
508 :2008/05/23(金) 23:26:17
よくこの釣り間違い探しをやるな
>>544 intした名前が「block11」だったのがまずかったってことですか?
>>546 マジで言っているならプログラミングなんてやめて旅にでも出ることをお勧めしておく。
>>547 今気がつきました=が一つしかありませんでしたね
初歩的なミスでした
もっと根本的に変数使いすぎ 配列など、別のアプローチを考えれ
いやあ、恥ずかしいです…
配列はおろか、ブロックの数をカウントするカウンター作ったほうがいいだろ…。あとここDirectXスレ…
おっとここはDirectXスレだったな 釣られちまったぜ
>>545 誰もやってない悪寒。
少なくとも俺はソースがあまりにひどかったので1度動かして消した。
この前RADEONだと色々厳密という話しがでたので、RADEON買って来て試してみた 今まで遊びで作ってたほとんどのゲーム、まともにうごかねえw 色々見直そう
Radeon、Geforce両方をDebugRuntimeでチェックするのがベスト。 nVidiaのドライバーは空気を読見すぎるのが困る。 しいていうならタグが変でも一応見れちゃうIEと手厳しいネスケの違いみたいなもんか。
556 :
508 :2008/05/24(土) 12:18:10
>>553 545のは直上の人に言った言葉です
ていうか、特に何がやばそうでしたか?
>>556 まずアプリの終了時にバックバッファ解放してないだろ。
Getしたものは全部Releaseしろ。
あとSDKいれてるならDebugRuntimeで試せ。
それなら終了時に解放してなかったりD3Dエラーが出たときにデバッガで落ちるようになる。
CComPtrマンセー
俺はこんな感じでやってるわ class ICallbackDeviceReset { public: ICallbackDeviceReset();// std::setでつくられたグローバルリストに登録 virtual ~ICallbackDeviceReset();// std::setでつくられたグローバルリストから解除 virtual OnLostDevice()=0; virtual OnResetDevice()=0; }; デバイスのロスト>リセット時に呼び出されたいクラスは、このクラスを継承するようにすれば 自動的に呼び出されるようになる。
560 :
508 :2008/05/24(土) 16:59:16
>>557 バックバッファの解放とはGraphicsオブジェクトにセットしたポインタをリリースしろということでしょうか?
それならばGraphicsオブジェクト終了時に自動解放されています。
ところが、デバッグモードで見たらMemory still allocated! Alloc count = 94の文字がorz
しかもAllocIDが出ないので、何がまずいのか分かりませんでした・・・
CreateDeviceの際にパラメータに書いてあるバックバッファやステンシルバッファといった物は
明示的な解放はいらないですよね?
>>559 std::setがstd::listなだけでまったく同じことしてます。
>>560 listに入ってないリソースを疑うか
listの処理そのものを疑え。
562 :
508 :2008/05/24(土) 17:27:19
リリース忘れはどうやらスプライトのようでした・・・
これで先のエラーは出なくなったんですが、Ctrl+Del+Altを押した時に
Direct3D9: (ERROR) :Device is in an invalid state. Only Reset, TestCooperativeLevel or Release could be called
がひたすら出てしまいました。デバイスロストからの復帰に失敗してるんでしょうが、なにぶんメッセージの意味が分かりません
>>561 どうやらlistが怪しいようです・・・。ここをもうちょい詰めてみます。
>>562 listだと、アドレスを登録する時に
・重複が怖い(コンストラクタでのみ自動登録されるなら心配ないが)
・解放時の検索速度が、setのほうが圧倒的に速い
って利点があるぜ。
ソース見ようとしたけど404だったんで突っ込んだアドバイスしてあげられないな。
もう一回UPする気ない?(スプライト修正版を)
なんか日本語があからさまにおかしいが、脳内補完してくれ。 setのほうがいいよってことで(;´Д`)
メッセージの意味は、 デバイスが不正な状態になってます。 この場合、Reset、TestCooperativeLevel、Releaseのどれかのメソッドしか呼び出せません。 つまり、まぁデバイスがロストしてるよと。復帰させるか、あきらめろと。
566 :
508 :2008/05/24(土) 18:01:32
oggがどこで生成されるのか謎だからあくまで予測なんだが デバイスを作成したスレッドと、デバイスをリセットしようとするスレッド。 違うスレッドになってね? 全部リソース解放してても、スレッドが違うと失敗するんだが。
すまん、oggの作成場所発見したわ。 同じスレッド上だな。 しかし綺麗なソースだな。 うちの部下どもに爪の垢を煎じて飲ませてやりたいわ パッと見問題はなさそうな分、とりあえずD3D関連の生成物を全部カットしてリセットして、問題なければ一部だけ生成するようにしてリセットしてみて… ってやっていくしかないなぁ
Graphics& GameWindow::getGraphics(){ if(device != NULL && g.target->target == NULL){ device->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&(g.target->target)); } return g; } ここのバックバッファをReleaseしてないのが原因じゃねーか?
570 :
508 :2008/05/24(土) 19:03:26
>>569 できたお
ありがとうございました。
ところでテクスチャからサーフェイスをGetしていた場合Releaseの順番てどちらからでも問題ないですか?
作ったのと逆の順で解放するのが良い。 そうしなかった場合不具合が起きるかは未検証だが、プログラムでは逆順解放が基本。 サーフェイスは描画前に取得して、描画終わったらさっさとReleaseしちゃいな。 取得にほとんど時間かからないから。
CComPtrとか使えって言ってんだろ。初歩的なミスが綺麗さっぱりなくなるぜ?
573 :
508 :2008/05/24(土) 19:50:08
>>572 CComPtrってデバイスロストでもリリースとかしてくれるんですか?
なんか話のポイントが違う気が・・・
>>572 確保しっぱなしだったから、結局はデバイスリセットの時に正しく解放できなかったと思うぜw
そういや508よ。
「ベース メンバ初期化リストで使用されました」
のワーニング出てたぞ。直しておけよ。
warningをちゃんと潰す、DebugRuntimeでエラーがない事を確認する、 nVidiaのドライバはATiに比べるとかなりエラーに甘いのでちゃんと nVidiaとATiの両方で動作確認をしっかり行なう。
576 :
508 :2008/05/24(土) 20:39:35
>>574 マジすか・・・BCCでは出なかったのに、工夫してみます。
本当に親切にありがとうございました。ノシ
デバッグの警告レベルを最大にしたら (WARN) :Ignoring redundant SetTextureStageState が出まくるんだけど・・・ かといって、デフォルト値使われるのかと思ってコメントアウトしたら全然違う動作しやがる
同じのを何度も設定してるんでないの? 最大レベルだとどうでもいいwarningが大量にでるから1レベル下がいいよ。
あるねー>どうでもいいwarning なんか最近のVCで昔ながらのstr〜関数を使うだけで 警告出しやがるようになりやがったし VC作った奴の感性がちょっとわからなくなった リソースわけられないとかそっちの方をどうにかしてほしいのに 余計なもんばっかり増えていくな
580 :
577 :2008/05/24(土) 21:52:09
何度も設定はしていないけど、 一番最初に描画される時にも出てるから、そこで警告出るんならデフォルト値使われてるのかな、と思ったんだけど、 ちゃんと設定しないときちんと描画されない。 余計な警告は無視する方が吉みたいですね
警告でウザイのは、例外を使ったときのだな。 わかって使ってるのに
>>580 それはデフォルト値が使われているという警告じゃなくて、
Aという値を前回セットしたにも関わらず、同じ値をセットしたときに起きる。
フレームをまたいでもチェックされる。
583 :
577 :2008/05/24(土) 22:36:24
いやだから、一番初めにセットした時に出るってことは、デフォルト値とかぶってるんじゃないのか、 と思ってたってこと
DirectXで両面ポリゴンは、描画可能なのでしょうか?
可能です!
ありがと。 エクスポートがうまくいかなかったのかな…。 もしかして、なにか設定が必要ですか?
自己レスです。 LW使ってたのですが、付属プラグインは片面になってしまうそうで・・・。 LWからのエクスポートで、何か方法を知っていたら教えてください。
実行時のD3DのSetRenderState()の設定次第なんだが・・・
LWでダブルサイド指定じゃなく、 ちゃんと倍の頂点使って裏のポリゴンを作っておく エクスポート時に、ダブルサイド指定のポリゴンを 裏ポリ用頂点を作ってくれるエクスポーターなんて知らんね… UVやらマテリアルやら関係なく、ただ両面描画しれてば良いだけなら >588の言う通り
とりあえずD3DRS_CULLMODE(ですよね?)を指定しておき、 あとで裏にポリゴンを作ろうと思います。 ありがとうございました。
591 :
デフォルトの名無しさん :2008/05/25(日) 06:32:23
Xファイルを出力、編集するソフトって何がありますか?
メタセコイア 有料版でもインポート・エクスポート以外は使える。 その.mqoをLEで読み込めば・・・・
現状、メタセコでモデル作成。POSERでBVH作成。LWで合成してXファイルで出力 ってやってるわ
DLL_APIってなんですか?DLLを作る命令?
デバイスロスト時ってもしかしてSetTextureStageStateで設定した情報も失われてる!?
Presentしたらステート必ずセットし直すか、ステートブロックでも使え。
Xファイルに出力したカメラのアニメーションを利用したいのですが、どうすればいいのでしょうか?
>>597 ステートブロックはデバイスロストしたら一緒にロストすんぞ。
>>598 どうもこうもアニメーション情報を読んで再生する。
フルスクリーンのときにスクリーンサイズを600×400にするとCreateDeviceに失敗し、 640×480などのサイズにすると成功するんですが、どういった理由でこうなるのですか? LPDIRECT3D9 p_d3d; D3DPRESENT_PARAMETERS d3dpp; D3DDISPLAYMODE d3ddm; p_d3d = Direct3DCreate9(D3D_SDK_VERSION); m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); ZeroMemory(&m_D3Dpp, sizeof(D3DPRESENT_PARAMETERS)); d3dpp.BackBufferCount = 1; m_D3Dpp.Windowed = TRUE; m_D3Dpp.BackBufferFormat = d3ddm.Format; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // ここまで同じ設定 d3dpp.BackBufferWidth = 600; d3dpp.BackBufferHeight = 400; // これをCreateDeviceに指定すると失敗する d3dpp.BackBufferWidth = 640; d3dpp.BackBufferHeight = 480; // これをCreateDeviceに指定すると成功する
600x400のモードをデバイスがサポートしてないだけじゃないの? 関数の戻り値とか調べてください
600x400なんて画面モード、存在するのか?
>>600 グラフィックボードで使える解像度じゃないからだよ
EnumAdapterModes( )でそのデバイスで使える解像度を列挙できるからその中から選べ
>>602 PC-98時代の遺産だな。仕事で出会う確立はもはやレアだろ。
PC-98でも横は640だし・・・
606 :
604 :2008/05/28(水) 17:54:34
をや??・・・640×400と見間違えた。
607 :
600 :2008/05/28(水) 20:59:35
>>601-606 なるほど、使用出来る解像度の問題だったんですね。
ありがとうございます。
ついでに質問なんですが、解像度は現在のディスプレイの解像度を使ったほうがいいのでしょうか?
それとも各ディスプレイごとに使用出来る解像度を調べて、自分のプログラムにあった解像度を選んだほうがいいのでしょうか?
>>607 他のゲームを参考に汁
どっちのタイプもあるよ
自分の合う方法を探せ
320×240,640×480,800×600,1024×768のどれかなら、 必要な解像度を動作環境に明記しとけば大丈夫。 一般的な解像度はこの辺だからな。
そういや、2Dゲーは解像度固定が、3Dゲーは解像度可変が多いよな。
ポリゴンは解像度に依存しにくいからな
612 :
600 :2008/05/29(木) 01:10:37
>>608-611 他のゲームの解像度と一般的な解像度と開発環境などと相談して決めるのがよさそうなので、
そこらへんを考慮しつつ可変か固定か決めてみたいと思います。
ありがとうございました。
>>609 320×240
↑はWindowsではぜんぜん一般的じゃないっぽ
出来ないとはいってないってw オンボードとかだとこけるやつが結構あるって話 無理に使う必要もないしね
>>614 快適にWindowsライフが過ごせそうですね
せっかくだからVisualStudioとかでやってほしかったぜ
320x240は画面プロパティからは選べなくても、内部的にサポートしてる場合が多いよ。 というか、サポートしてないのみたことないな…。 同人ゲームで恐縮だが、EFZという格闘ゲームがフルスク320x240固定なんだが、動作しないって人聞いた事ない
256色を使えないXPが無いのと同じだよな
>>618 ゲーム画面が320x240でも、
640x480で画面作って拡大して描画してる場合もあると思う。
グラフィックボードがしょぼくてソフトウェアレンダリングな同人が流行ってた頃、
このサポートはどこでもやってたような気がする。
と思ってたが、640x480もサポートしないディスプレイとかあるのか。 引き延ばしできないノートとかでありそうだな。 レアすぎるから、 これは無視してもいいか。
>>622 EeePCがダメだった希ガス>640*480
あと、Pivot使っていると480*640は選択できるが640*480は選択できなくなる。
まぁ、最近のビデオチップはハードウェア的にはどんな解像度でもいけるが、 ドライバで制限してるだけなんだけどね。
サポートするのは、最近だけじゃねえよ
>>621 そうそうそうそう
解像度の最低ラインが800x600になったおかげで
昔のフルスクリーンのゲームが起動できなくなったのな
後、256色のゲームも起動不可
つかWindowsXPは640x480を正式サポート対象外にしてた憶えがあるぞ あやふやだけど
うっそ、640x480+16色 はハードが絶対サポートしてるんじゃねーのかよw ドライバいれてない時や、セーフモード時はどうなってんだそれ
winならMSの標準ドライバがインストールされてるしょ
XP以降は画面のプロパティで選択できないように制限かけてるだけで 640*480が使えないわけじゃないよ。8bitカラーだって使える。
>>627 間違っています。
以上。
はい次の方。
uzeeeeeeeeeee 結局、普通に640x480使えねーのがあるってことでいいじゃないか
あるの?
>>633 いや、ほんとに640x480が動かないPCなんてあるの?って話なんだが。
確たるソースある?
>>637 思いっきり9x系からXPに移ったPC初心者の書き込みじゃねーかw
DirectXで640x480に設定できないのかという話じゃないのかね
>>635 動く、動かない、という話じゃなくXPで640x480はサポートできないだろって話
WinXPの通常使用のシステム要件に、「800x600以上対応のVGAが必要」というのがある以上、
640x480でWinXPが動かなくても、XPで800x600未満が選択できないPCがあったとしても
「それは残念でした。640x480を使うので、Win2000とかで動かしてみてください」と
返すのが正常、という話。
>>641 意味わからん
「XPの動作には800x600以上対応のVGAが必要」であることと、
XPで640x480でフルスクリーンモードのデバイスが作れないこと。
これらはイコールではないでしょ。
「XP用のドライバでは640x480をサポートしなくても構いません」と規定されているのかという話をしてるの。
おまえらもういいだろうw
ところで本当は何について話していたの?
2Dゲーの解像度のサポートを何処までやるか?だったっけ?
古いエロゲーがどこまで動くかですよあやよさん
>>641 OS的に選べないようにしてるだけで、グラボのプロパティからなら
余裕で320x240とか選べるようになってる。
つまりDirectX利用可能。
ちょっとまて、俺、今普通に640x480解像度のDirectXつかったゲームしてるんだが、XP64bitで。
もういいよお前ら 自重しろ
>>635 インクレティブマシーンが動かなくなってる
まず256色に変更できない
ディスプレイはサポートしてる
いま、こんな状況
256はわかったから、640はどうなんだよ
>>650 だから、変更できないってなんだよ…
画面プロパティからは変更できないだろ、XPとか使ってれば。
ここはDirectXスレだっての
DirectXのスレで画面プロパティとかアホですか
>>652 だから、アプリの方でエラーがでちまって起動できないっての
256はわかったから、640はどうなんだよ!
どうなんだと聞いている 答えろ
今日はここに沸いてるのか
640×480は256色しかサポートしてないってメーカーPCも昔あったな まぁ結局の所解像度決め打ちにしてるなら動く解像度を動作環境内に書いておけってことだ。 Windowsなんてタダででもいろんな環境がありすぎるんだから全部テストなんて出来ん。 解像度くらいはプロパティから数値が見えるんだから環境限定でいいだろ。 グラボのDXサポート状況に比べればどうと言うことはない
フルスクリーンじゃなくて窓を開いて640×480の256色モードとかなら XPもサポートしてるよ Delphi Graphic Secretsという本を持っているんだがここでいろいろな 画面モードを実験している
LPD3DXSPRITE::DrawとLPDIRECT3DDEVICE9::DrawPrimitiveを両方使ってるのですが 前者より手前に後者を描画するにはどうすればいいですか? 描画の順番変えても必ずスプライトが前になってしまいます
Z
663 :
661 :2008/05/31(土) 22:59:42
解決しました 位置のZ座標指定してもうまく処理されないと思ったらClearするときにZバッファ指定してなかっただけでした。 スプライトのZ座標は描画順だけらしいので交錯させる等複雑な描画をしたい時は完全にDrawPrimitiveの方に統一するしかないですか?
SetRenderState( D3DRS_ZENABLE , FALSE ); 3DやらないならZバッファ使わんだろ 使ってもいいけど 使わん方が早いだろ ついでにステンシルバッファも作らなくていいし クリア時もZ消さなくていいし
>>664 Zテストの前から描画って2Dだとそんな効果ねぇっけ?
>>665 半透明や加算合成を一切使わず、抜き色で使うアルファ値も
エッジにAA効果を持たせない二値限定のスプライトが前面に多く
描画されると仮定できる状況なら、大幅にフィルレートを稼げるかもね
でなけりゃただの逆効果
>>666 α値が0%(不透過)のところだけZバッファだけ書き込んでなんとかならんかったっけ?
>>667 だからカラーキー目的で二値しかアルファ値使ってなけりゃ、アルファテストでいけるよ
でもエッジにアンチェリ(段階的なアルファ値の適用)使った時点で駄目だし、
当然アルファブレンドも使えないしで、2Dスプライトの描画において深度バッファで
速度が稼げるってのは結構レアケースだと思うよ
>>668 α値が1のときだけ〜って処理いけんかったっけ?
まあ、いけたとしてもそんなに早くないか・・・
かなり重いピクセルシェーダーを使わない限り深度バッファでの高速化って恩恵ないだろ
もしくは、点を打つのが激重なグラボ
俺のディスプレイ 最低解像度800x600だった でも、640x480できたお
674 :
デフォルトの名無しさん :2008/06/04(水) 00:19:51
自分で定義した頂点情報をDrawPrimitiveで表示するときや、 読み込んだXファイルをDrawSubSet()で表示するときなどにmaterialを設定しても描画に反映されません D3DXCreateSphere()等で取得したメッシュをDrawSubSet()する場合は反映されます materialを有効にするにはSetMaterial()以外に何か設定が必要なのでしょうか?
675 :
674 :2008/06/04(水) 01:53:23
すいません、自己解決しました D3DRS_DIFFUSEMATERIALSOURCEでマテリアルを参照するよう設定するのを忘れていました
676 :
デフォルトの名無しさん :2008/06/04(水) 19:25:36
ビルドは上手くいくのに実行するとすぐに終了されてしまいます DirectX 9.0 SDK Update (Summer 2003) に変えてからこうなりました 以前はSummer 2004を使っていたのですが不具合が色々あったので変えました もしかしたらDirectXの設定がおかしいのかもしれませんわかる方いたら教えていただきたく思います
ブレークポイントしかけて、ステップ実行してみれば?
678 :
676 :2008/06/04(水) 19:58:37
すみません BCC Developerを使っているのですがブレークポイントの設定の仕方がわかりません…
>>678 VC(正規OSならタダでダウンロード可能)にしてやってみるか
printfをおきまくれ
680 :
676 :2008/06/04(水) 20:10:01
VCは以前インストールしようとしたのですが 「サーバとの接続を再度確立します」と表示されてインストールできなかったのでやめました 自分で組んだプログラムではなく、サンプルをダウンロードして実行しようとしただけなのでコードに問題は無いと思います Summer 2004で実行したときは大丈夫でしたが Summer 2003に変えてからおかしくなりました おそらくDirectXの設定を間違えていると思うのですが…
なんだバージョンダウンかよ DX関数に必要なDLLがないんじゃね?
682 :
676 :2008/06/04(水) 20:29:59
診断ツールではsystem.dlがないとありましたが 調べてみるとそこまで必要なものではないようでした サンプルがSummer 2003を対称にしているのでDLLが足りないわけでもないと思います
BCCはVCといろいろ違いがあるんで BCC対応のライブラリを作るなり取ってくるなり手間が必要だったような気がするが
685 :
676 :2008/06/04(水) 20:38:01
firefoxですがIE6が入ってます OSはノートの正規品です もともと古いPCなのでグラボの性能が低いのが原因かもしれませんが Summer 2004で実行できたので…
>>685 いくつか関数の仕様が変わったもんがあったような気がするけどそこは直した?
ビルド通らないと思うけど
2004のサンプルを2003で動かそうとしてんだろ? 足りないもんとかあるんじゃね? 変なコントロールまわりなんかやけに9.0初版のときより豪勢になってるし バージョンダウンで動かそうとするのなんて時間の無駄じゃね?
688 :
676 :2008/06/04(水) 21:06:24
ビルドは通ります エラーもありません サンプルは2003用のです 2004からコンパネでDirectXが設定できなくなっていたので 2003にしました
最終奥義「クリーンインストール」
実行してすぐに落ちてるんなら普通に戻り値調べたらなんか出てそうだけどな ちゃんとエラーチェックしてる?w
691 :
デフォルトの名無しさん :2008/06/05(木) 01:33:17
CとC++ってどう違うの?
CのインクリメントがC++
サンプルは環境によって落ちるものは落ちる、市販のゲームとは違うよ サンプルの実行に拘る理由がよく分からない
694 :
デフォルトの名無しさん :2008/06/05(木) 03:34:04
質問です. MPEG-2を取り扱うアプリケーションを作成したいんですが. Directshow()で可能だとは思うんですが. マニュアルはありますか?
>>693 言ってることも割れ臭いし
目的もなく2003だしで正直胡散臭いよねw
>>694 英語で良いならWindows SDKのドキュメントにある
日本語ならDirectX9 SDKの古いドキュメントがまだMSからダウンロードできたはず
場所の検索は自分でやってネ
DirecctX SDK(Mar 2008)とVS2005を使っています。
使っている参考書は
http://www.amazon.co.jp/dp/4839912475/ です。
この本ではDirectXのアプリケーションウイザードがVSに追加されているのですが、私の環境では追加されませんでした。
VS→SDKの順にインストールしました。
最近のバージョンだとDiretctXのアプリケーションウイザードは削除されたのでしょうか?
698 :
676 :2008/06/05(木) 19:38:46
2004 Summerにしたら実行できました 2003にしようと思ったのもコンパネから設定変えたかっただけなのでこのまま2004でいこうと思います DirectX勉強してるサイトのサンプルだったんで何とか実行したかったんです 原因はわかりませんでしたが色々とありがとうございました
>>697 結構前に廃止された
たぶん2004年のどっか
>>698 最近のは確かにコンパネに設定が追加されなくなったが
DirectX UtilitiesのなかにDirectX Control Panelってものがあってだな
昔コンパネから設定できたことと同じことができるんだぜ?
700 :
676 :2008/06/05(木) 19:55:53
>>699 教えていただきありがとうございます
ただ、2004にはないようです
最新のはPCの性能的に難しそうなのでこのまま我慢することにします
ちなみに5年くらい前のpentiumVです
シェーダーを使ってトゥーンシェード(逆引き500に載ってる方法)をやろうとしているのですが、 一部を除き真っ黒になってしまいます。 どういう時にこうなるのでしょうか?
ごめんオレエスパーじゃないし
703 :
デフォルトの名無しさん :2008/06/05(木) 23:45:32
DirectPlayがサポート打ち切られたとかマジですか
DirectX SDKドキュメントのなんと1ページ目にDirectPlay is deprecatedの一文がッ!
2007年6月あたりのSDKがサポートラスト。 ランタイムは当分のこるだろうけど。
9cはもう終わりか? 10の時代なのか?
9cの時代のままです
10はVISTA限定という暴挙にMSが出たからね おかげで10の普及は相当に遅れるだろうね
XPみたいに皆にブーブー文句言われながら8年後位には普及してるよ
そう思っていた時期がMeにもありました
細かいバージョンを見れば、MSは失敗作をけっこう出してるよ そしてすぐに無かったことにしている SEとかCEとか3.0とかMMCとか、NTとか Vistaもそんな感じ
そりゃXPよりブーブーいうだろ 基本的に全てのアプリはDirectXで組んでくださいっていうスタンスなんだから
__
,...-‐:"´:.:.::.:.::.:.``:‐,,、
,.-..,、/:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:`、 _
/:.:.:./:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:';;´::.:.l
l:.:.:.:.:.l:.:.:.:.:.:.:.:.:.:/|:.:.:.:.:.:.:.:.::l、:.:.:.:.::.:.:.:.:l:.:.:.::|
. |:.:.:.:.:l:.:.:.:.:.:.:.::.::/ |:.;:.:.:.:.:.:.;l:l l:.::l;:.:.:.:.:.:l:.:.:.:;l,
|:.:.:.:.:.|:.:.:.:.:.::l:.:/ |:|.l:.:.:::.:.:l|l |:.:ll:.:.:::.::.ll:.:.:.::|i
. |:.:.:.:.:l|:.:.:.::.::l.|/` 、|l l:.:::./l _,,.-l:j´l:.:.:.:.:| l:.:.:.:lii
l:.:.:.::.:l i/l:.:.:l |l‐ェ-ュ,` l:://´ェ--,-,.l:.:.:lヽ l:.:.::.l.ii
. l:.:.:.:.:;l l (l:.:.:.lヽゝ_ノ '" ゝ_ノノ.l:.::l,l l .|;:.:.:.l.ij
l:.:.:.::.lij `ゞ::.:l ,、, ∧/l:.:.l/ j|:.:.:.:l.ii
. |:.:.:.:.:|.ii ';:.:l、 ' . ,l::/ l.l:.:.:.l.i|
. |:.:.::;.;| ii ヾl >、. 0 , イl:/、 | |:.:.:.l li
. |:.:.:.|i| ji,.-ィ'´l `l ` ‐-‐ '´ l l``l‐-l、|:.:.:.l ij
|:.:.:.:|i|'´/ l ヽ `、 / / l .l |:.:.:.| i|
すとーっぷ。
>>712 は素早く変な空気を作るねぇ…
>>709 より不安な子を見つけたよ。
DX9、C++でのテクスチャに関する質問です。 テクスチャのクラス(CTexture)を作り、コンストラクタに画像ファイルのパスを渡してクラス内でテクスチャ(Texture)を生成しています。 CTextureのデストラクタでTextureを削除するようにし(delete Texture)、メモリの解放を試みているのですが その状態でCTexture* で作ったオブジェクトを削除すると、ヒープが壊れているというエラーが出ます。 多重deleteでエラーが出ることは調べてわかったのですが、 if(Texture) delete Texture; としているにも関わらずエラーが出るので困っています。 どのようにしてテクスチャが占有したメモリを解放すればよいのでしょうか?
>>714 見事にスレ違いだ。
そして君のやりたいことは多分こうだ。
if (Texture) { delete Texture; Texture = NULL; }
>>715 できました、ありがとうございます!!そしてごめんなさいでしたァ!!
delete Texture; Texture = NULL; これでおk delete NULL;は合法 ま、どのみちスレチ
718 :
デフォルトの名無しさん :2008/06/07(土) 12:22:05
http://www.h2.dion.ne.jp/~takusoft/directx8/d3d/chapter1/sec07/d3d_07.html のサンプルプログラムを参考にお勉強しているのですが
画面の頂点情報を動的に変えるために
頂点バッファを確保する箇所
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
を処理で何回も経由させる場合
以前に確保したメモリはどのように解放してあげれば良いのでしょうか?
よろしくお願い致します。
確保も何もそれはロックしてるだけだと思うが・・・。 あと頻繁にロックするならDYNAMICで作ってDISCARDでロックしろ
なるほど、メモリのロックという概念をよく分かってませんでした 動的に確保してるわけでは無いんですね 同じところに何度も上書きしてる感じなのかな? DYNAMIC と DISCARD は調べてみます ありがとうございました
Direct3DのX-ファイルとテクスチャに関しての質問なんですが。 Xファイルのモデルを作って、それにプログラムでテクスチャ座標を設定して一つのアイテムを作成するのではなく。 モデリングソフトでモデルを作ってる段階で、視覚的にテクスチャを設定して、その情報が入ったXファイルとテクスチャを読みこませて テクスチャ座標をいちいち設定しなくてもアイテムを表示させたりって出来ないんですかね? なんだか大体の本はモデルの読み込みと表示は説明してても、モデルの作成からテクスチャの設定部分が余り説明されてないので分かり辛い… DirectXで使うことを前提とした3Dの本とかってないですかね? 長々と読み辛い文章スマソ。
メタセコイアとかで普通にやればそうなると思うんだけど
>>721 キミが求めている情報を知りたいのならプログラムの本ではなくデザインの本を買うべきだよ。
DirectXだのOpenGLだと自前レンダラーだの関係なくそれはグラフィックデータの話だ。
>>721 普通にモデリングソフト触ればわかるだろが
ちなみにXファイルの中にマテリアルってもんがあって
そのなかにたくさんテクスチャ設定できるようになってるじゃん
構造でいうと
Xファイルx1
メッシュxN
マテリアルx1
テクスチャx1
モデルのUVx1
な感じになってるのか?(バンプ(マルチテクスチャ2枚以上考慮外)とか考えないと)
Xファイル1つにメッシュがたくさんあって
メッシュ1つにつきマテリアルとUVが1つずつあって
マテリアル1つにつきテクスチャが1つあると・・・
だから、Xファイル1つにテクスチャは複数ある構造がいまのXファイルなわけよ
メッシュに対するマテリアルの数に制限はないぞ
>>725 そうだっけ?
あーでもそうなってる気もするな
でも実用性なくね?
どの頂点がどのマテリアルか決定しなきゃいけないから
読み込むときにマテリアル単位でメッシュわけなきゃいけないな
この辺はモデリングソフト次第って感じ?
モデリングの段階でテクスチャやマテリアル毎に わざわざメッシュを分けて作る方が現実的じゃないだろ。 実際D3DXMeshでも属性テーブルって形式でマテリアル毎に分割して描画するようになってる。
XFileに組み込んだマテリアルやテクスチャって1回XFileから読み込んで デバイスにセットする方法しかないの?
デバイスにセットしないでどうやってレンダリングするのかと
>>727 メッシュ1つのマテリアル毎にテクスチャが違うって状況か?
あんまり違いがないならメッシュ1つに付きテクスチャ1枚な
俺の経験だとそんなモデルは重過ぎて動かねぇ
まあ、いまソースみたら俺もできるように組んであるけどなw
スキンメッシュでかなり苦労してた記述がみられるw
スキンメッシュのデータはマテリアルごと描画できるデータになってねぇのなw
抜けてんだな>Xファイルの担当者
>>730 何を言ってるかわからねえがスキンメッシュだろうなかろうが同じように描画できるが・・・。
顔の表情とかをテクスチャ差し替えでやろうと思ったら顔だけテクスチャ別にするだろjk
>>731 ボーンと頂点を結びつけるインデックスがそうはなってないと思ったが
>>731 メッシュで分けちゃってるな俺んとこのデザイナさん
もちろんプログラムではなんでもできるようにしてあるが
>>731 インデックスとマテリアルは関係ないじゃろ。
最終的にはポリゴン1つ1つにマテリアルのインデックスが振られているんだから
それを使ってマテリアル毎に分解して再構成するだけ。
っていうかD3DXで読み込めば全部やってくれるけんど。
>>733 >それを使ってマテリアル毎に分解して再構成するだけ
この作業が面倒臭いって話だな
インデックスがメッシュごとだから、自前で読み込むときは
1回マテリアルごとに直す必要があるな
736 :
デフォルトの名無しさん :2008/06/07(土) 22:22:43
>>736 そんなの貼っても割れ厨にはどうせ見れないぞw
?
ああ、そういう事か。 犯罪者の都合は考慮しないよ。
>>738 ランタイムのウェブインストーラーや開発キット、ヘルプなんかは
ウィンドウズの正規OSでないと落とせなくなった
なのでたまにこのスレで「落とせません」とか「見れません」とか
「わかりません」とかいう奴はほぼすべて割れ厨
PC買えばOS付いてくるのに割れ厨って意外と多いのな
オンラインゲームをやってるんですが directxを前のverに戻したらパフォーマンスって下がりますか?
あ
安全に Release メソッドを呼ぶマクロとして SAFE_RELEASE のようなものを見かけますが、 // safe release #define RELEASE(p) ( (p) ? ( (p)->Release(), (p)=NULL ) : (0) ) このマクロで何か問題ありますか? 参照を使った関数だと BCC に注意されたので
>>744 翻訳しないで原文ママのエラーメッセージを。
DirectShowを使ってGUIのメディアプレイヤーを作っているのですが、 IMediaSeeking::GetDurationで再生時間を取得すると、 3分33秒より長いファイルはオーバーフローして負の値になってしまいます。 IMediaPosition::get_Durationで取得しようとすると、E_NOTIMPL(実装されていない)が帰ってきます。 3分33秒より長いファイルの再生時間を取得するにはどうすればいいのでしょうか? 開発環境はVisual Studio 2005 Pro、言語はCです。
最小のコードくらい出せカス
CComPtr使いなさい
749 :
746 :2008/06/08(日) 17:49:53
>>747 IGraphBuilder *pGraph;
IMediaControl *pMediaControl;
IMediaSeeking *pSeek;
IMediaPosition *pMediaPosition;
REFTIME length;
REFERENCE_TIME TotalTime;
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **)&pGraph);
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pSeek);
pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPosition);
pGraph->RenderFile(FileName, NULL);
pMediaPosition->get_Duration(&length);
pSeek->GetDuration(&TotalTime);
こんな感じです。
REFERENCE_TIME は普通に使ってる分にはオーバーフローしないが どこかで int にキャストされてるんじゃね SetTimeFormat 指定しておいたほうがいいんじゃねえ
DirectMusicを最近扱っているのですが、 GetGlobalParam(GUID_PerfMasterVolume, reinterpret_cast<void*>(&V), sizeof(V))で 何故かE_INVALIDARGが返ってきて音量の取得ができません。 不正な引数とありますが、どれが不正な引数なのでしょうか?(Vはlong型です) ちなみに、この処理を行う前にパフォーマンスの作成、パフォーマンスとシンセサイザーの初期化、 ローダーの作成を行っています。
>>751 msdnによると以下のようにあるけど、SetGlobalParamは使用済み?
>SetGlobalParam が rguidType について一度も呼び出されたことがない場合、このパフォーマンスが現在処理している
>グローバル データ リストの中に、rguidType がない可能性がある。その場合、このメソッドは E_INVALIDARG を返す。
>つまり、どのパラメータにも、GetGlobalParam を使って取得できるデフォルト値があると想定しないこと。
質問です
ttp://richa850.hp.infoseek.co.jp/programming/dx9_01.html ここを参考に、後述のプログラムを書いたのですが、少なくともRADEON9600SEで画面がおかしくなります。
正しい方法はどうやればいいのでしょうか?
・APIリファレンスを読んだところ、MultiSampleTypeなどは以前のものと一緒でなければならないとあったので、上記ページでは決め撃ちになっているのを修正しました
・画面がおかしくなるを具体的に言うと、テクスチャが壊れていたり(正しいテクスチャの一部が緑や白のペンキでラクガキでもされたように塗りつぶされてる)、まったく描画されなかったりです
・old.Widthが中途半端な値(672とか)だったりすると、OSごと巻き込んで落ちます。(PC再起動がかかります)
・
D3DSURFACE_DESC old;
CComPtr< IDirect3DSurface9 > pCurrentDepthStencil;
pDev->GetDepthStencilSurface(&pCurrentDepthStencil);
pCurrentDepthStencil->GetDesc(&old);
// 新しく作ったテクスチャーの大きさと、現在の深度ステンシルの大きさを比較.
if ((old.Width < descNewTexture.Width) || (old.Height < descNewTexture.Height))
{
// 深度ステンシルを作り直す。
CComPtr< IDirect3DSurface9 > pNewDepthStencil;
pDev->CreateDepthStencilSurface
(
__max(descNewTexture.Width, old.Width),
__max(descNewTexture.Height, old.Height),
old.Format, old.MultiSampleType, old.MultiSampleQuality, TRUE, &pNewDepthStencil, NULL
);
pDev->SetDepthStencilSurface(pNewDepthStencil);
}
// 上記を行なっただけではまだ問題はおこらず、下記を行なうと発症します。
// 上記だけ、もしくは下記だけだと問題はおきません。
pDev->GetSwapChain(0, &pSwapChain)
pSwapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pRenderTarget);
pDev->SetRenderTarget(0, pRenderTarget);
>>752 ありがとうございます、使用しておりませんでしたorz
デフォルト値がないのですね、なぜこんな仕様になっているのやら…orz
変数でも何でもとりあえず初期化しやがれとしか言い様が無い
Ver9あたりからボタンとかテキストボックスのような コントロールのようなものが使えるようになってるみたいなんだが あれってなんて名前でしょうか? 使い方書いてあるHP検索したいわけだが なんて検索したらいいかわからんのです
DXUT
dxutに未来はあるのでしょうか?
モデルの、パーツだけ別のモデルに差し替えることって なんという言葉でしたっけ
void PartsDakeSashikae_to_OtherModel(void) { return; }
#define PDtoOM PartsDakeSashikae_to_OtherModel PDtoOM();
自前の画像を使ってボタンを作るとき、レスポンス(押しっぱなし) の頻度をループ数とタイマーのどちらで制御すべきだと思いますか?
タイマー ループにして何か良いこと有るの?
ループだとFPSに依存するから怖いよ
766 :
763 :2008/06/14(土) 03:46:37
thx やっぱりそうなんだ。 処理落ちすることって前提なのね。
メッセージで処理しろよ。つーかwinプログラミング覚えろよ。
軽いゲームならfps依存でかまわんと思うよ。 ただ、その処理をカウンタで実装したところで タイマーと比べて簡単になるとは思わんが。
769 :
767 :2008/06/14(土) 20:46:38
>>767 プロシージャのタイマーより
クラス内でtimeGetTime()使ったほうがいいだろ?
変な人がおる・・・
IDirect3DBaseTexture9から画像サイズって取れますか? IDirect3DTexture9じゃないです
取れないよ。 取れないけど・・・どういう状況でその要求が出てくるんだ? まともな設計してりゃありえないと思うんだが。
シェーダークラスで GetTextureで0のテクスチャの幅と高さを シェーダーに渡したかったのです。 Textureは、普通のテクスチャだったり、RENDER_TARGETだったりするし、 サイズを別に持たせたくなかった(メモリけちった)のです 無理っぽいので、別個に渡すようにします。
あぁ、GetTextureからという話ならIDirect3DResource9::GetTypeで判別して 各継承クラスにキャストすりゃいいだけだよ。
普通のテクスチャもRENDER_TARGETも同じIDirect3DTexture9だとおもうけんど
ボ、ボリュームテクスチャも作るつもりだもん
お前かわいいな ちょっとこっち来いよ
LPDIRECT3DDEVICE9から ライトのポジションは、GetLightから取れるのですが、 カメラのポジション取得は、できるのでしょうか? 無理ですか?
カメラのポジションも当然取得できる。 つか出来ないわけねーだろ。
カメラの「位置じゃなくビュー行列が取れるだけだから そっからカメラの位置は計算しないといかんけどな
」
やっぱ、シェーダでカメラの位置が必要になるので カメラ行列生成情報は、グローバルで持っておくべき? あと、ビルボード行列も
>>782 同じことで悩んでる人発見
カメラのクラスってどこに配置すればいいんでしょうね
カメラを管理するクラスをワールドを管理するクラスが持つだろJK
785 :
デフォルトの名無しさん :2008/06/19(木) 13:49:00
カメラはワールドに複数配置できて、 アクティブな奴を切り替え出来るように作っておくとデバッグにも便利
その発想は無かった
いろいろ3Dツールを使って試しているのですが 分からないことがあるので質問です。 例えばメタセコイアでpng形式のアルファ付きテクスチャをポリゴンに張ると レンダリング結果はテクスチャの透明部分はポリゴンも透明になりますが xファイルに出力してビューワで見ると透明部分は白色表示になってしまいます これはxファイルにはテクスチャのアルファは無視(白と認識)されるという事なのでしょうか?
1) メタセコにおいて、テクスチャマップとアルファマップの両方を指定している場合、 xファイルはマルチテクスチャをサポートしていないので、xファイルに保存した段階で アルファマップの情報は失われる。 2) そのビューワ(何のビューワか知らんが)がテクスチャのアルファ値を無視しているだけ。
>>789 1に関してはテクスチャは1枚しか使用していません。
メタセコイアの材質設定で「模様」のテクスチャにアルファ付きのpng画像を指定した場合と
材質設定の「透明」に白黒のbmp画像を指定した場合の両方を試しましたが
どちらもメタセコイア上で透明に見えていた部分はxファイルで白になっていました。
2に関してはSDK付属のMeshViewerを使って見ていました。
一応自作のプログラム上でも表示を試しましたが
ビューワと同様でアルファの影響は見られませんでした
(DirectX初心者な自分が作ったプログラムなので
それ自体にアルファに関する抜けがある可能性もありますが)
透過効果を使ったxファイルのサンプルでもあればいいのですが
現状では表示するプログラム側に誤りがあるのか
3Dツール側の設定が足りてないのか分からずなんとも・・・
PNGのアルファってかなり怪しかった気がするんだけど。 素直にDDSを使う方がいいと思われ。
失敗しているとしたら、テクスチャの読み込み段階でアルファ値をわざわざ削ってしまっているか、 レンダーステートおよびテクスチャステージステートの設定が適切でないか、だ。 後者の方が圧倒的に多いパターンなんだけど、 このへん実はピクセルシェーダ使った方が余程わかりやすかったりするんだよねぇ。
なんだかんだで DirectGraphicsのほとんどの要素をラッピングしたクラスが必要なんですね。 たいへんですね
795 :
790 :2008/06/20(金) 08:34:24
>>791 DDS形式使っても無理でした(つД`)
>>792 レンダーステートとテクスチャステージステートは
特に設定していなかったので、レンダーステートに
D3DRS_ALPHABLENDENABLE設定してみたのですが
結果は変わらず。
テクスチャステージステートはデフォルトでイイと思うのですが
この辺の設定も自信無いので違ってたらご指摘お願いします orz
ちなみに使用してるSDKのバージョンは2004/Oct
>>795 半透明描画はSRCBLENDとDSTBLENDの設定とCOLOR_OPの設定もちゃんとやらないと話が始まらないぞ。
>>795 まずはテクスチャのα値をちゃんと参照する方法を覚えろ。
しかしコンパイル済みMeshViewはテクスチャのα値無視するのは確かに不適切だよな
ソース入ってるから自分でリコンパイルすりゃいいんだけど、メニューでON/OFFくらいつけといてほしかったわw
798 :
790 :2008/06/20(金) 10:18:37
>>796 ,797
d、やっと出来ました!ヽ(`Д´)ノ
pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
この二行が抜けてました、ってか
D3DRS_SRCBLENDALPHAとD3DRS_DESTBLENDALPHAの定数と勘違いして使って混乱してました(つД`)ゴメンナサイ
テクスチャステージステートはとりあえずデフォルトでも大丈夫でした。
それにしてもMeshViewerはα反映しないんですね
お陰でデータの方に問題があるのかと勘違いして無駄な時間を・・・orz
今さっき、テクスチャのαを適用するようにしたMeshViewを作ったわ 2008だとそのままじゃコンパイル通らなくて、いろいろめんどかった てか、存在しないヘッダファイルをincludeするなよサンプルなのにって思った
800 :
790 :2008/06/20(金) 20:58:27
昼に解決したと思って放置してたものを弄ってて 背景透けたと思ってたら、バックグラウンド(クリア色)は 透明ポリゴン越しに透けて見えたけどすぐ後ろに別ポリゴン置いたら そのポリゴン無視してバックグラウンドの色が表示されてることに気づいた・・・orz
801 :
790 :2008/06/20(金) 22:44:21
ぁぁ・・・Zバッファ有効にしてたら透過が上手くいかず Zバッファ無効にすると前後関係を自動処理してくれないから 自前で描画順序を制御しなけりゃいけないって事かな(;´-`)
半透明 Zバッファ でぐぐりまくりんぐ
803 :
790 :2008/06/20(金) 22:52:38
つい先ほどからぐぐりまくりんぐです。 初歩の初歩みたいな疑問をグダグダ書き連ねて申し訳なさ爆発です。
昨今の事情を鑑みるからには、半透明でモデルを書くな。 使うなら見た目は諦めるか深度ピーリングでもしろ。 頂点処理なんてアホほど浮いてるんだしアルファで抜くより全部 ポリゴンのほうが圧倒的に最近の主流だったりはする。
あおりじゃなく、深度ピーリングってなんのことだ? あと、「半」透明じゃなくて、アルファ値を使った「透過」がやりたいだけなら、アルファテスト使えばよくね?
>>804 頂点処理が浮いてるっていうのは、
大抵の場合ピクセルシェーダが忙しくて、頂点シェーダが遊んでるってことですか?
どうやったらコアの稼働率?を調べることが出来るんでしょうか?
>>806 まだそんなことを気にするレベルに至って無い
順番にやっていけ
半透明とZバッファの相性の悪さは昔からの命題
一般的には半透明の描画だけリストに登録しておいて、完全不透明の描画が全て終わった後、カメラから遠い順に描画していく
std::multimap<float, IAlphaDraw*> でリストつくると楽だよ
floatがカメラからの距離
IAlphaDrawは半透明描画の描画インターフェースを提供するインターフェースクラス
なんか2度書きってなかったっけ?
不透過の物体を描画するときはZバッファをONにしてカメラに近いほうから描いていくと速いぞ
エフェクトやパーティクルなんかは別として、 モデル自体の半透明処理はかなりの例外扱いだからなぁ。 被写界深度やモーションブラーなんかもやれないし 特殊な条件以外で使うようなものじゃない。
2Dゲーでかなりの枚数を重ねようとしてるなら 正直、PCのグラボではフィルレートがまったく足りてないと思う
3Dでもハイレゾで普通にバンプ、スペキュラ、シャドウとかやってると 普通にピクセルシェーダーカツカツになるよ。 逆に頂点は数百万クラスになってきてるけど、今は統合型アーキテクチャが主流だしどうなることやら。
うんうん頂点シェーダはなにやっても落ちないわ でもピクセルシェーダはα物をちょっと拡大して表示するだけでもう処理落ちはじめやがんの これってなんで? PS2とかだとそんなことなかった気がすんだけっちょ
PS2はフィルレートバカじゃん。 使うテクスチャも16色や256色のパレットが殆どだし。 そもそも解像度も640x480より小さいしなー。
頂点毎に呼ばれるVSと違ってPSはピクセル毎に呼んでるはずだから 解像度あげたらエライ負担になるだろ
817 :
デフォルトの名無しさん :2008/06/21(土) 11:29:23
DirectXについて料金のことですが これって無料でダウンロードできるんですか?
いいえ。MicrosoftとNDA契約を結んだあと 利用目的に応じたライセンス料を支払う必要がありますん。
初心者質問スレなんだから意地悪しないでググレカスでいいじゃないか・・・
ダウンロードセンター行けば無料か有料化は一瞬で分かるだろ
やべ、俺NDAのサインしてねぇ。 あれ、誰かきた。
DrawPrimitiveを使った描画で消失点を画面中央以外にするにはどうすればいいですか?
>>823 即レスありがとうございます。
色々調べてみたのですがよくわかりません。
D3DXMatrixPerspectiveFovLHの他に座標変換するのですか?
>>824 D3DXMatrixPerspectiveOffCenterLHとか使うといい。
827 :
デフォルトの名無しさん :2008/06/21(土) 18:38:44
boost::intrusive_ptr<IDirect3DVertexBuffer9> spVB; とVBを確保したのですが、 pd3dDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX)*4, 0, D3DFVF_2DVERTEX, D3DPOOL_DEFAULT, m_pVB.get(), NULL ); と、作るときにダブルポインタに出来ません・・・ IDirect3DVertexBuffer9* buf=spVB.get(); pd3dDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX)*4, 0, D3DFVF_2DVERTEX, D3DPOOL_DEFAULT, &buf, NULL ); と渡す以外の方法で良い方法ありませんか? intrusive_ptrを使うのが悪いのだろうか・・・
CComPtr使えよ
>>828 ありがとうございます。
DXUTを使ってるので、
atlbase.hをインクルードするときに
Need to include strsafe.h after tchar.h
って言われるのでIntrusiveに逃げようかと思ったんですが、
やはりDXUT.hの中に入れ込んででもCComPtrのほうが良いのでしょうか。。
その程度のリソースは余計な事せずにそのまま管理すりゃいいだろ・・・
>>827 &(spVB.get())じゃダメなのか?
>>829 何を嫌がってるのか理解できんが、だったらintrusive_ptrをそのまんまぱくって
T** ptr_ptr() { return &px_; }
みたいなのを付け足したのを自前でこしらえたらいいじゃん。
>>831 こらこらw
>>830-832 ありがとうございます。
やはり普通にCComPtrを使うことにしました。
>>832 の意見は大変参考になりました。
ありがとうございました。
>>827 CreateVertexBufferに渡すのは素のIDirect3DVertexBuffer9*で、
それを使ってintrusive_ptrを初期化すればいいかと。
>>829 その警告だったら、DXUT.hの中でATLのヘッダ読み込めば出ないけどね。
ATL使うのがデフォなら、DXUT.hに追加してプリコンパイル済みヘッダと
使用するのもありだと思うけど。
836 :
835 :2008/06/21(土) 21:00:56
ああ、すまん。上のレス読んでなかった。 DXUT.hの中で読み込めばいいのは知ってたのか。 typoしたんだが直すまでもないな。
>>833 CComPtrはかなり独立したテンプレートクラスだから、コピペでパクるのもいいぜ?
ってか俺はそうしてる。
なぜならVS2008にはatlbase.hが入ってないからだ;;
スマートポインタって不必要になったら自動で削除っていうけど 不必要になったときっていつなんだ? スタティックで参照されると一生消えないんだろうか?もしかして
俺はデータを管理するクラス経由でアクセスするようにしてるから vector、list、set、map、stringくらいしか使ってないな・・・。
>>839 setとmapってどういうときに使うの?
>>840 mapは外部ファイルから読み込みするリソース(シェーダー、テクスチャ、モデル)なんかを
二重に読まないようにファイル名をキーにインターフェイス突っ込んどいて参照カウンタで管理に。
multimapとかmultisetなんかはパーティクルとかの挿入ソート代わりに。
>>837 入ってないのExpress Editionだけだろ
しかも2008に限らず無料版でATLが入っていたことなどないはず・・・・あ、2003(コンパイラのみ提供)はATLありだったっけ?
>>842 じゃあ、うっかりスタティックで参照しやがった馬鹿が開発チームにいたら
デフォでリークし続けるってこと?
参照あってもこっちが削除したいっていったら強制的に削除してほしいときは
どうしたらいいだろうか?
参照があるのに削除したらスマートポインタの意味がないじゃん。
プライオリティ設定できないの? 優先度高の奴が残ってるときだけ参照あったら削除しないで 優先度低の奴は残ってても強制執行・・・みたいな
weak_ptrみたいなの?
>>846 言ってることがよく分からんが
その「スタティックな参照」を行ってるスコープから出れば解放されるんじゃないの
一番大きいスコープ=プログラム(プロセス)
スコープから出る=プログラムの終了
>>850 スコープから出る時にデストラクタが呼ばれるならそれはLocal変数であってStatic変数ではない罠。
>>851 スコープは例えただけで、関数内スタティック変数が関数抜けると
解放されるとかそういう意味で言ったんじゃないんだ
分かりづらい例えですまんかった
「プログラム終了時に消えると思う」に対して「スタティック参照したらリークするんじゃ」
って話だったから終了時に消えるって事を押したんだが
関数内スタティックが関数抜けても消えないっていうのを問題にしているのかね
>>846 は
>>846 参照カウンタの概念は理解してるか?
それとグローバルスコープ(プログラム終了)を抜ける時に
グローバル変数やスタティック変数のデストラクタが呼び出されて
解放されることも。
その辺りは実際に書いて試してみたほうが早いよね
要はバッサリ削除したいのに 使いもしないスタティック参照がインスタンスを消させなくしているから どーでもいいような優先度の参照に関してはつかんでても無視して強制的に削除したいということだよ
普通に管理クラスつくって自分でマネージメントした方がいいと思うけど。 DirectX関係のインターフェイスは余計な事しないでシンプルに扱ったほうがいい。
そもそも使いもしないスタティック参照がいて かつ参照がいるのに強制削除って状況がおかしいよ。
確かに・・・リソースの強制削除なんて特異な状況聞いたことないな。 単にまともな管理が出来ていないだけにしか聞こえないな。
>>858 シーンを何回も呼ぶ(ロードアンロードを繰り返す)んだけど
そのうちの1シーンがスタティックでポインタを保持してるところが多いのよ
いらなくなったらそのシーンは破棄するんだけどプログラム自体はスタティック参照だから
残るのよこれが
範囲が広すぎて修正不可能だからどうすんべーって感じなわけ
staticにした時点で間違ってると言うことだNE
シーンが破棄されるときに、デストラクタから開放するべきなんじゃ? てか破棄されうるシーンがスタティックなポインタを持ってるっておかしくね?
>>846 のレスからすると何か変な勘違いを前提にして、
強制削除とやらをしなければならないと思っているような気がするが。
>>838 からの流れなんだろうけど、その後の他の人のレスと
話が噛み合っていない。
そもそも、リソースの管理に問題ありというのには同意。
スタティック参照って言葉でややこしくなってる気が
オンボードビデオカードだと CreateDeviceでD3DCREATE_HARDWARE_VERTEXPROCESSINGが失敗すると思ってよいのでしょうか? また、ビデオカードを使ってる環境でオンボードでも動作するように開発するには D3DCREATE_SOFTWARE_VERTEXPROCESSINGで初期化を行えばあとはCPU速度次第ということになるのでしょうか?
>>865 少なくともここ1年以内のIntel製オンボードは
D3DCREATE_HARDWARE_VERTEXPROCESSINGでも通るぞ
恐らくだが3年前の物でも通ると思う
>>866 ありがとうございます
自分の環境が945Gなのですが駄目でした
この環境で動作させるには、頂点数やライティングに気をつければよいのでしょうか?
>>867 頂点数とライティング、あとはVRAMを食いすぎないようにすれば十分な速度は保てると思う。
オンボードグラボは基本的にメインメモリからVRAMを取るから十分にメモリを積んでない
システムでVRAM食いすぎると酷いことになる。
でかいテクスチャを何枚も使ったりしないで簡単な3Dエフェクト程度の利用だったら
特に問題なく動くんじゃないかな。
intelGMAは未だにピクセルシェーダはサポートするけど 頂点シェーダはサポートしない(HW頂点処理ができない)んじゃなかったっけ
ピクセルシェーダー/バーテックスシェーダー2.0に対応していない グラフィックボードって何年前ぐらいの物ですか?
GeForce3とかRadeon8500とかだな
この前GF5200FXで動かしたら、ピクセルシェーダ2.0に対応してるのはいいけど物凄い遅さでびっくりした (PS処理省いたらめちゃくちゃ軽くなった)
D3D10でD3D9のD3DPERF_BeginEventに相当するものってありますか?
bmp形式の画像ファイルを背景色の代わりに表示させることってできますか?
>>875 スプライトなり何なり使って画像を描画
↓
Zバッファだけクリア
後はお好きなようにどうぞ
>>876 できました!
ありがとうございました。
えええ
D3DXLoadMeshFromXInMemory のオプションで指定するD3DXMESH列挙型にはどんな意味があるのでしょうか? 色々と試してみたのですが、パフォーマンスに影響があるようには思えないのですが
HLSLの組み込み関数「ddx(x)」ついての質問です。 SDKのヘルプには、 スクリーン空間の x 座標について、x の勾配を返します。 とありますが、具体的にどんな計算をしているのですか? 教えていただけないでしょうか?
英語では、Returns the partial derivative of x xの偏微分を返すって書いてるね。
>>881 レスありがとうございます。
x方向の傾きを返してくれるみたいですね。
その傾きを求めるための具体的な値が、どのようなものなのか、
わからなくて困っています。
傾き == 高さ / 距離 の「高さ」と「距離」は、
どんな値が使われるのか知りたいです。
どなたか、よろしくおねがいします。
プログラムと一緒にd3dx9_?.dllとかをダウンロードさせたいのですが、どのような形式なら 配布してよいんでしょうか?cabですか?
>>883 添付して配布は、ライセンス的に面倒なことになるんじゃなかったかな。
ウェブインストーラへのリンクを出せばいいと思う。
>>882 HLSLのddx()/ddy()は、PSのdsx/dsyに対応する。
dsxのマニュアルには、レンダリングターゲットのx 方向の変化割合とあるので
↓か、それに近い形になるんじゃないかなあ
float2 delta = 1.0f / rendertarget.size;
float1 dsx = ( pixelcolor( x+delta.x, y ) - pixelcolor( x, y ) ) / delta.x;
float1 dsy = ( pixelcolor( x, y+delta.y ) - pixelcolor( x, y ) ) / delta.y;
まあ、なんかトラブルあったら、クレームは全部MSに来るわけだしな。 動かない、なんとかしろ、しか言わないキチガイにつきあうよりは、 自分トコから一括ダウソにしておいたほうがまだしもマシってことだろう。
firefoxみたいなブラウザの画面をテクスチャにするにはどうしたらいいでしょうか? win32APIを使うべきなのかDirectXを使うべきなのかもよくわからないです
両方使え
これからDirectXの勉強をしようと思ってるんですけど、 SDKはどのバージョンを使えばいいのでしょうか? 9.0c以降多すぎてよく分からないです 開発環境や実行環境のサポート状況で適当に選んじゃっていいのかな
891 :
882 :2008/06/30(月) 00:53:27
>>885 レスありがとうございます。
実際に値を入れて、いろいろと調べてみます。
コンパイルすると以下のようなエラーが出ます サンプルプログラムなのでソースにエラーはないと思います 調べましたが原因が分かりません よろしければどなたか御教授いただけないでしょうか? エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 113: '_D3DCOLORVALUE' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 60: 一つ前の '_D3DCOLORVALUE' の定義位置 エラー E2146 c:\Borland\Bcc55\include\d3dtypes.h 130: 宣言には識別子が必要 エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 132: '_D3DRECT' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 70: 一つ前の '_D3DRECT' の定義位置 エラー E2146 c:\Borland\Bcc55\include\d3dtypes.h 149: 宣言には識別子が必要 エラー E2238 c:\Borland\Bcc55\include\d3dtypes.h 151: '_D3DVECTOR' の宣言が複数見つかった エラー E2344 C:\Program Files\mdsdk\Include\d3d9types.h 51: 一つ前の '_D3DVECTOR' の定義位置 以下略
>>890 日本語マニュアル必須なら2004OCT
不要なら最新版使っとけ
まだBCC使ってるやつ居るのか…
BCCはDirectXに対応してないハズ どうしてもBCCがいいなら昔のバージョンを使うしかない VC使えばいいと思うよ
BCCからVCへの移行は難しい物なのでしょうか?
やってから言え どうしてお前が難しいと思うか予想しなければいけないんだ?
VCはISO準拠度が高いので もし、移植できないコードがあれば、それはコードが間違ってるってことだから 安心して修正していいよ
分かりましたVCを導入してみます
どうせ趣味グラマだろ? 正規版OSならタダなんだから導入も糞もないだろ
恐ろしいことに2005年以降でもExpressEdition+PlatformSDKを無視して BCCを使う入門書(笑)や入門サイト(爆)は実在するんだ…
古いサイトが更新されてないだけではなく?
HDVファイルの任意のタイムコードの場所を表示する(orビットマップファイルで吐き出す) コマンドラインのプログラムを作らないといけなくなったのですが、DirectShowベースで 実現可能でしょうか? C:\> showHDV.exe /pid 10 /timecode 00:00:00:25 test.m2t ← こんな感じ
スレ違い。 とりあえずSDK読んで考えろ。
言葉が足りなかったので IDirectSoundBufferはサウンドの再生時に必要になるので必要な間にReleaseすると問題になります。 であれば、IDirectSoundNotifyは通知位置を設定するのに使ったので解放すると設定無効にならないのでしょうか?
>>904 あんまり有益じゃないアドバイスですね。
一応スレにはルールがありますので、ルールに則った回答をお願いします。
このスレは初心者と優しい人とギスギスした人で成り立ってます プログラマーって極端だな
最近のSDKではDirectX9の更新が無いようですが、 最後に更新されたのはどのバージョンですか?
d3dx9_xx.dllのバージョンが上がっている以上、 今でも更新されているとお考えください
マスターアップ前のPGは生理痛の時の女と一緒 つまり、女のPGは大変てこった
ロックできる指定サイズのサーフェィスってどうやってつくんの
質問です。 DirectSoundでプライマリバッファのボリュームをいじると、Windowsアプリケーションの「ボリュームコントロール」でコントロールできるWavのところに反映されてしまうようでいまいちよろしくありません。 ゲーム終了時に元に戻すことも考えましたが、ゲーム中にユーザーが「ボリュームコントロール」からいじってたら〜と考えるとこれでも不適当かと。 なので、いったん 「ゲームのBGMや効果音のセカンダリバッファ」 > 「セカンダリバッファ」 > プライマリバッファ と、1つセカンダリバッファをかませたいのです。 DirectXのヘルプを読むと「ほとんどのバッファの場合、出力先はプライマリ バッファと呼ばれるミキシング エンジンである」 とあったため、工夫すればセカンダリをかませることはできそうなのですが、良い手法はありますでしょうか?
マスターボリュームをいじるプログラムにするな 以上!
AOE2はゲーム終了時とかフォーカス喪失時にボリューム元に戻すような仕様だったな 大企業でさえそれなんだから別に気にしないってのも一つの手だとは思うが どうしても嫌ならManagedDirectXのセカンダリバッファがヒントになるかもしれん
丁度DirectSoundで盛り上がってるみたいで便乗を
現状、効果音を多重に鳴らす際にDuplicateSoundBufferを使ってます
でもこれ、鳴り終わるまではReleaseしちゃいけないので面倒です
今はここのイベント通知処理を利用し
ttp://msdn.microsoft.com/ja-jp/library/cc370470.aspx play時にDuplicateSoundBufferで複製。ついでにstaticなリストにCComPtrでくるんで追加。
再生が終わったらリストからはずす(よって開放される)
という感じに実装しています
でもこれが異常に面倒。とてもほかの方々がそうやってるとは思えません
そもそもDuplicateSoundBufferについてぐぐるにひっかからなさすぎ(26件)
みなさん多重に再生する必要がある効果音などは、どのようにしているのでしょうか?
>>917 補足です
再生が終わったらイベントが通知され(登録したコールバック関数が呼ばれ)、そこでリストからはずすようにしています。
リストが壊れないようにクリティカルセクションでかこってやったり、かなり面倒なんですよね
一度作ってしまえばあとは使うだけとは言え・・・
効果音を鳴らすたびに作って解放するのかと逆に問いたい
Managedの話で悪いが俺は最大同時再生数と同じ数だけセカンダリバッファ作っちゃってるわ 再生終了はコールバックじゃなくて毎フレームのポーリングで対処してる 少なくとも俺のPCでは遅延とかメモリ食いすぎとかは起こってない
>>920 私もそんな感じの作りにしてます
他で使うメモリに比べればサウンドで持っていく割合とか微々たるもんだしって感じに思えたので
>>920 デュプリケートって内部的にカーソルとかその辺のインターフェイスがコピーされるだけで、
実体のサウンドファイルは1つのままだと思うだけどまさか全メモリコピーなのか?
>>922 なん・・・だと・・・?
今まで全メモリコピーだったわけだが
SDKのリファレンス見たらそんなような事書いてあるな
どう考えてもDuplicateSoundBuffer使ったほうが効率的じゃねえか・・・
>>923 お前w
昔のDirectX7本とかじゃこの手のは当たり前にのってるのに、最近はおざなりだよなー
directxのapiで音声入出力のメモリに直接アクセスする手段ってありますか?
DuplicateSoundBufferに対応していないサウンドボードがまだありそうな気がする・・・
927 :
925 :2008/07/07(月) 23:35:36
自己解決
自己解決したときにその情報を出さないやつが、なんで質問して情報を出させようとするんだろうな
929 :
925 :2008/07/08(火) 00:08:35
「DuplicateSoundBuffer」がサウンドカードの機能だと思っている人が居たことに衝撃。
マルチポストに答えてやったら、別スレで「自己解決しました」って 報告してるのを見たときは吹いた
>>930 ちげーの?
「ドライバだよ!」とかいう言葉遊びは簡便な
>>932 いやDirectXが処理してる。
音を出すのはサウンドカードだが音のデータをサウンドカードに流してるのはCPUだぞ。
デュプリケートは1つのバッファに対してどこ部分をプライマリにコピーするかって
情報をもったインターフェイスが増えているだけの話だからぶっちゃけ全部CPU処理だぜ。
不安ならセカンダリをLOCALで作成してDirectSound自体をCPU処理固定にすると
環境依存のバグが発生しなくなるのでお勧め。
元々サウンドカード上の専用メモリとかISA時代の転送が遅かった時代のカードにしかないし。
>>933 おいおい、そりゃ「DirectXでソフトウェアエミュレート」すればDirectXの仕事だけどさw
普通に使ってればDuplicateSoundBufferの命令をうけて(ハード上なり、PCのメインメモリー上なりに)バッファを確保するのはサウンドカード・ひいてはそのドライバの仕事だぜ?
だからこそ、DuplicateSoundBufferは必ず成功するとは限らないんじゃないか。
実際に動作しないサウンドカードの製品名を挙げてくれ。 そもそもいったいいつの時代の話をしているんだ?
動かないハードがあるとして、その場合はソフトウェアで勝手にやってくれないもんなの?
具体的名称までは聞いたことないが、 「PCゲー作ってる会社でのよくあるサウンド関係のトラブルはそれだから注意しな」 と付き合いのある会社から言われたな ちなみにSDKサンプルでも、きちんとDupできないならCreateでごまかすように組んである 自動ではやってくれない
>>937 >DupできないならCreateでごまかす
それこそまさにISAの時代の話じゃなくて?
オンボードReadtek、USB外付け音源、サウンドブラスター、
MonsterSound あたりはテストしたが、そんな大きな不具合に遭遇したこと無いな。
それより、ASIO にした方が良いのかぁ、と思ったことは何度かある。
そういうわけで完全ソフトウェア処理のXAudio使えや愚民共、と相成りました
XACTがないと早送りや巻き戻しすらできないあれか
今時クエリーインタフェイスとか 愚民杉
今も昔もそもそもDirectSoundにハードウェアのまともな対応を期待する方が愚。 かなり初期の頃からDirectSoundだけはソフト処理でやるのが鉄板になってたはずだぞ。
DirectSoundをソフト処理って、どういう意味合いで言ってるんだみんな? IDirectSoundBufferの確保時に、フラグでDSBCAPS_LOCSOFTWAREをいれるってこと?
選べるようにしておけばいいだけの話だろ
たしか、DirectSound ってサウンドカードのメーカーのあまりものグダグダさに、 マイクロソフトが嫌気がさして、ソフトウェア処理でこれからは行く、とかっていう 記事を見た気がする。 Vista DirectSound HAL で検索をかけるといろいろ出てくる。 Windows は DTM 系のソフトが弱いってのはこの辺りが原因なのかねぇ? ローランドあたりが先陣切ってやってくれないとね。
VistaのMIDIへの冷遇は忘れねえ
>>943 そういうこと。
たとえば最初の3つはサウンドカードのメモリに確保されていて、
その後はメモリが足りなくてシステムメモリに確保された場合に、
ミキシングが絶望的な状況になる。
いまどきのCPUならSSEとかMMXあたりでミキシングできるし、
10個20個程度ミキシングしてもCPUの負荷なんざ1%も食わないのでサウンドカードは
ただの音声出力装置以外の機能は期待しない方がいいと思われ。
そもそもサウンドカードに専用メモリ乗ってたのってCPUからの転送が遅かったISA時代だしな・・・。
soundblasterの割と最近のサウンドカードがスタティックバッファ持ってるけど、あれが使える状況ってあるのかな
DSBCAPS_LOCSOFTWAREフラグたてておけば、DuplicateSoundBufferは必ず成功するのかな? みんなわりと音楽系はそんなに気をつかってないんだね
SOFTWARE でもサイズが大きいと失敗する。 正確には、Duplicate の時は成功するが Play の瞬間に失敗するようになる。
>>947 今のCPUをもってしても遅延が絶望的に大きいのが欠点。
外部入力への反応での遅延は致命的。
ASIO であってもまだ不満。
DirectSoundでDuplicateして鳴らすなんて普通はゲームのSEだろう。 その程度なら1,2フレ遅れたところでたいした問題ないよ。
>>951 ASIO がだめってどんなんだよ・・・。
ゲームの場合は少し前からSEを鳴らし始めればいいわけで。
音ゲ厨と60fps厨が組み合わさった怪物だろう
> 外部入力への反応 って書いてあるから、サウンドエフェクタとかボイスチャットみたいに リアルタイムにキャプチャーした音を加工するやつじゃね?
ゲームとマジDTMとはまた違うからなぁ
ボイスチャットなんざネットワーク介して時点で遅れてるんだから関係ないだろ
出力だけ同期してりゃいいんだよ
質問です。 DirectSoundには、Direct3Dの D3DCREATE_MULTITHREADED のような、スレッド間利用に関するフラグのようなものはありますでしょうか? どうも別スレッドでwavを読み込ませた時に「うまく読み込めない場合がごくまれにある」のです 私自身のたんなるミスの可能性も高いですが
>>959 >DirectSoundには、Direct3Dの
>D3DCREATE_MULTITHREADED
>のような、スレッド間利用に関するフラグのようなものはありますでしょうか?
SDKのドキュメントをみたらどうだい?
>私自身のたんなるミスの可能性も高いですが
そう思うならデバッグしたらどうだい?
>>960 すいません。言葉足らずでした
ドキュメントはさらってみましたが「無い」と確信することができませんでした
ミスの可能性のほうももちろん調査中です。
ですが現状、SDKのサンプルをコピペしてテストしている状況でして、原因となりそうなのが
「DirectSoundを生成したスレッド以外のスレッドで、音のロードを行った」
くらいしか思いつかない状態なのです
>>961 お前が言うなよ
>>962 「うまく読み込めない場合」って具体的に何?
言葉が足りないのはそっちじゃないの?
スレの趣旨理解しようぜ 知ってる人がいれば教えればいいだけの質問なんだから
>>959 俺は別スレッドロードで失敗したことがないのでわからにい。
ファイル読み込みのルーチン自体がスレッドセーフじゃない可能性もありそうだ。
DirectX9で Sprite->Draw() IDirect3DDevice->DrawPrimitive() の両方でテクスチャを変形させて表示したときスプライトの方はアンチエイリアシングみたいな色の補間が効いてたんですが これって仕様と思っていいんでしょうか? よくわかってない素人ですがよろしくお願いします
>>966 FilterTypeは変更できる
グラフィックボードのドライバにも依存
>>965 なるほど、別スレッドでのロードで失敗したことがない方がいらっしゃるということは、
単純に私のコードの問題そうです。
ちょっとネットで別サンプルを探してみるとします。
ありがとうございました。
ありがとうございました
971 :
969 :2008/07/15(火) 12:07:36
自己解決しました
>>971 事故解決した内容を詳しく!
後でログを見る人の為にも
PointSpriteでマウスとのあたり判定処理は出来ますか?
960が延々と粘着してるんだな こういうやつって通報してアク禁にしてもらうことってできねーのかな?
978 :
969 :2008/07/15(火) 14:01:23
>>974 そこのソースではサイトにかいてあるようにうまくいかなかったなのです
あと、ヘッダーファイルもなかったですし・・・
>>976 アニメーションXファイルは、その本を買ってきて実現しました。
いま、スキンメッシュのXファイルをやってるのですが
これがうまくいかなくて困っているのです
>>969 そこのサイトのヤツでOBBもとめるのはうまくいったよ、多少問題が出るから適当に手直しはしたが。
最小二乗法でOBBもとめるところさえ使えればボーン毎にOBB作るのなんてただの単純作業だし。
960は、いらない子
>いま、スキンメッシュのXファイルをやってるのですが だからXファイルは使うなと何度言えば分かるんですか!! いい加減にしてください!
>>981 Xファイルと同じくらい手軽に扱えるフォーマットと、ライブラリができないと、それは無理ってもんだぜ
xファイルの表示って、モデリングソフトやエクスポーターの違いで速度全然変わってきたりしますか?
>>983 それを知るためには Xファイルのフォーマットを知る必要がある。
だから、それを聞きたいときには
「X ファイルのフォーマットの詳しい解説をしているサイトってありませんか?」
と聞いた方が良い。
>>984 どうせ最後には「Xファイルから独自フォーマットへの変換(ry」だしな。
Xファイルの駄目っぷりを分かりやすく解説してるサイトってありますか?
>>986 スキンメッシュが使えて対応ソフトの多さやDirectX上での扱いやすさを考慮した場合決してダメなフォーマットではない。
仕様が古いのとソフトによっては出力形式にクセがあるのが欠点なだけだ。
シェーダーがんがん使うような用途には厳しいのは確かだが商用レベルを目指すのでも無ければ問題ない。
逆にXファイルのダメさを語ったところでMAYAとかXSIみたいな高価なソフトを所持していて
専用のエクスポートプラグインを書けるようなスキルがなけりゃ結局Xファイル使うことになるよ。
Xファイルとそれのアレンジ設定用ファイルあればいいじゃん
専用のエクスポータ程度かけないスキルでアプリを作る? おいおい冗談よせよ
でもエクスポーターなんて作ってたらゲームとか全然進まないよ エクスポーターはお前に任せるから俺はゲーム作りたい
ゆとり乙
ゆとりで構いません、ゲームつくりたいです
ツクールマジおすすめ
エクスポーターなんて半日かからんだろうに・・・。 と思ったけどここは初心者スレなんだよな。 正直、Xファイルに身体を合わせる方が俺には難しい。
対象ソフトのプラグイン用のAPIの解析と、情報の取り方を調べるだけで、 とても半日では終わらないんだが、作ったことが無い奴ほど適当なことを吠えるな。
俺の場合、マップデータのエクスポーターは仕様考えたり調整こみで2ヶ月以上かかった スキンメッシュは3日もあれば出来た。 自分でフォーマット作ったらxファイルとか2度と使う気にならなくなる。
SDKサンプルのMeshFromObjから手をつけるのがオヌヌメ
あとはこことか
ttp://www.inframez.com/ いきなり独自フォーマット作るとか初心者には無理。
既存フォーマットを独自で読み込んでるうちに自分が作りたいものに対して効率の良い
フォーマットが分かってくる。
.
.
1000ならジュースでも飲むか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。