【C++】 DirectX初心者質問スレ Part24 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part23 【C】
http://pc12.2ch.net/test/read.cgi/tech/1242977486/
四十年勤め上げた會社を退職し早二十年、何やら張り合いの無い日々を送る内、 大學生の孫に「退屈しのぎに遣って見たまへ」と勸められた弐チヤンネル。 當初は「こんな電腦?示板、何たる幼稚加減」と莫迦にしてゐたものの、 遣つて見ると存外に面白ひ。 華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、 食ふや食はずやで慌しく過ぎ去つた學生時代が自ずと思ひ返され、 「戰爭さえ無ければ、小生もこのやうな青春が送れたやも知れぬ」と獨りごちる事も屡々。 すつかり?となつた今では、孫の部屋から白銀色の電腦計算機をせしめては書齋に篭もり 存分に「祭り」を堪能する毎日を送つている。 「小四女兒遺棄事件」なるスレツドを拜讀した際には、その餘りに不憫な境遇と過酷な 運命に落?し、臺所で葱を刻む家内に「かような理不盡が許されて良いものか!」と 熱辯を振るって呆れられる始末。年甲斐も無い、とはこの事と後で赤面する事しきり。 下手の横好きとは云え「繼續は力なり」の言葉通り、最近ではブラクラの回避や コピペの管理にも慣れ、「好きこそものの上手なれ」を座右の銘として弐ゲツトに勵んでいる。 同年代の友人達が癡呆や重い病に惱まされる中、老いて尚矍鑠としてオフ會に向かえるのも、 偏に弐チヤンネルの御蔭かと思えば、再三に渡る「半年ROMつてろ」の罵り文句も、 何やら「まだまだ死ぬには早いよ」と言われているやうで愉快極まれり。 一つ間違えれば自らが乗り込んでいた機體と同じ名前を持つコテハンに出會える日を 樂しみにしつつ、今日もデスプレヱに向かう。 それでは、弐ゲツト。
乙
スキンメッシュのクラス化を試みているんだが、 メソッドとソフトウェアフラグだけはグローバルに置かないとエラー終了する 何故? クラスのメンバに含めるのは無理?
それはスキンメッシュ関係なくC++が分かってない
staticで解決したお
staticはやめましょう
staticは別に悪くないだろ。
>>4 のソースは悪いのは確定だが。
サンプルにあるDrawSubsetを使うmesh描画でモデルを描画してみたのですが糞重いです 同じPCで市販のゲームというか無料MMOなんかを見ると どれもこれももっと大量のモデルを表示してるように見えるのですが それでも十分な速度が出ています これらはどうやってるのでしょうか? モデルを細かく分割して、視野に入るものだけを描画とかはしています 何か根本的に別の描画方法だったりするのでしょうか?
それだけでは状況がよくわからん どう重いのか、メッシュの数やポリゴン数、シェーダー使ってるかやFPSはどの程度なのかまで網羅されてないとな 結論から言うとDrawSubset以外の描画は無いけどな
PIX仕え
ID3DXFont::DrawTextA で日本語が文字化けするのはどんな理由が考えられますか? 渡している文字列 (char*) をデバッガで確認するとちゃんとなってます。 プロジェクトのプロパティで、「文字セット」は「設定なし」になっています。
ためしに MultiByteToWideChar で CP_THREAD_ACP で wchar_t* に変換したものを DrawTextW にわたしても、 やっぱり文字化けしているのです。DrawText にそのままわたしても、char* と wchar_t* どちらも文字化けします。
炎を表現するためにパーティクルを行っているのですが、質問です。 ・1つの炎を表現するのに、DrawPrimitiveUPを1回使っています。10個程度の炎を画面に出しています。 ・ポイントスプライトを使っています これで、100個程度のポイントスプライト×10炎 を表示していうのですが、動作の重さで疑問点があるのです。 描画にかかる時間(DrawPrimitiveUPを呼び出す前から、Presentが終わるまでの時間)を測っていると ・画面に大きく映るように、カメラの視野角を変えた場合 ・画面にすごく小さく映るように、カメラの視野角を変えた場合 で、後者のほうが遅いのです。 前者だと10ms、後者だと17msくらいになります。 比較する際、カメラの視野角以外は一切変えていません。 何かしら「ポリゴンは小さく表示しすぎると遅くなる」などの制限があるのでしょうか?
最近のSDKのサンプルを読んでいたら s_hModD3D9 = LoadLibrary( L"d3d9.dll" ); のように、Direct3DのDLLなどを動的に読み込んでいました。 昔の本などによると、あまりよろしくない手法で、だからこそ 「対応したDirectXがインストールされていないマシンだと、DLL不足を指摘するダイアログがでて終了するので、ユーザーにわかりやすい警告ダイアログを出せない」 とかされていたような・・・
だからこそからの繋がりがよく分からん 自前の警告を出すためにプログラムからロードしろって事?
視野角狭くした状態でも全部の頂点・面が画面内に入ってんの?
>>17 はい、画面内に視野角が広くても、狭くても、全ておさまっています。
頂点シェーダの負荷は変わらないでしょうし、
ピクセルシェーダの呼び出し回数はむしろ大きく映っている方が多いはず・・・
と悩んでいるところです。
日経盛り返してきました、ありがとうございます あと50円上がったら利食いしますのでそれまで上げてください
>>14 ポイントスプライトが大きいが為に
殆どのピクセルのZテストが通らなくなって
結果、更新されるピクセル数が少なくなってるとか。
DirectX9で2Dゲームを作ろうとしていまして、画像ファイルが独自フォーマットで メモリ上に展開してそこからsurfaceに変換して、たくさんのアイテムやキャラクタが 存在するわけですけど、それらはまとめてバックバッファのsurfaceにupdateSurface() を使って描画しようと企んでいるのですが、一つ問題がありまして というのは、この様にsurfaceにばかりたよって描画してしまうと、アルファブレンディング が出来ないということです surfaceをアルファブレンディングしてバックバッファに書き込むということさえ出来たら いいのですが、textureやらsprite辺りが全く理解できていないので分かりません 全部textureとして持ってspriteに描画すれば解決しそうだというのは分かるのですが、 surfaceとして持てるものをわざわざ全てtextureとして持つのは少し躊躇いがあります 何かいい方法はあるでしょうか
ポイントスプライトって回転ないから 小さく薄いパーティクルを無駄に数を出しがちじゃね? 炎・煙・水しぶきとか形のあるものはランダムに角度付けたいじゃん。
>>21 バックバッファ更新用の
キャラクタが描かれたサーフェイスは
どうやって作っている?
そこにキャラを描く際、アルファを
反映させればいいんじゃないの?
>21 画像データをサーフェイスに溜め込んで、描画はStreachRectやりきりたいということですね? そんな手法でいろいろやろうとしてるのは世界であなただけです。だれもノウハウ持ってませんよ。
>>23 実はまだ作っていはいないんですが、色々と調べたところ
1. 空のsurfaceを作って、lockrectして色情報を書き込んでいく
2. D3DXLoadSurfaceFromMemoryを使う
この二つが候補に挙がっていまして、2.を使おうと思っています
MSDNを良く見ると、ここでアルファを設定できるみたいですね
これでUpdateSurfaceの時にうまく動くのですね?
今の段階では必要になるかは分からないですが、アルファ値が動的に変わるような
surfaceの場合、既にあるsurfaceのアルファ値を変えられるのか、それとも
また新たにsurfaceを作らないといけないのかどちらでしょう?
>>24 その通りです
普通はspriteにtextureを描くのでしょうけど、どうもそれらの正体がはっきりとしなくて使い渋っているのです
加えて、メモリにある色情報からtextureを作成する方法も分からなかったのも原因の一つです
>>メモリにある色情報からtextureを作成する方法も分からなかった サイズ分のテクスチャを生成して ロックして色情報を書き込むだけでいいだろ
SetStreamSourse DrawPrimitive をセットで何回も呼び出すよりも CPUでそれを1つのトライアングルリストにまとめて DrawPrimitiveUP一回で描画する方が速いのですが これはストリームソースの使い方が間違ってるでしょうか?
>>28 DrawPrimitiveのオーバーヘッドの影響かな?
頂点数を相対的に増やしていけば、
その差は縮まるんじゃないかなぁ。
DrawPrimitiveの読み出しがそもそも遅い
HLSLでVSからPSにグローバル変数で値を持ち越す事って出来ないですよね? なんか挙動を見る限り入ってなさそうで・・・
>>29-30 頂点数と転送回数のバランス次第ではありえるということですね
ありがとうございます
>>31 そもそもシェーダからグローバルメモリへの
書き込みは出来ません。(DX10はしらね)
>>33 varyingみたいに使えればなーと思ったんですが
やはりVSから構造体に詰めて渡すしかないんですね
ありがとうございます
>>34 そもそもそれぞれが並列処理で動いてるのにグローバル変数をどうやって管理するつもりだったんだ?
シェーダーは逐次処理でまわってるわけじゃないぞ。
シェーダーを延々と長々書き足していったら途中で動かなくなってしまい どうやら一定量超えると動かないみたいなのですが、これは容量オーバーなのでしょうか?
シェーダープロファイルでインストラクション数に制限がある
ありがとうございます
>>20 情報不足で申し訳ない。
加算合成なので、Zテストはしていないんです。
ただ、どちらにしろそれが「小さい方が遅い」結果にはつながらない気がしますね。
>>22 むしろ角度をつけないのが良い。とか思っていましたが、そういうものでしょうか。
確かに飛び散る火の粉がいつも同じ形なのは問題かもしれませんね
後考えられるとすれば、縮小時は元の解像度より下がってフィルタがかかってる 拡大時は元の解像度より上がってフィルタがかかってない そういうフィルタ設定でテクスチャを張ってる前提だけど。 テクスチャ外してみたらどうなるよ
41 :
デフォルトの名無しさん :2009/06/25(木) 13:11:04
ウィンドウを一色で塗りつぶすことって出来ますか?
>>40 ミップマップの生成はD3DX_DEFAULTで、拡大も縮小もLINARです。
テクスチャ外しても再現しました。
視野角ではなくカメラからの距離(遠くなり、小さく描画されている時の方が遅い)でも、再現しました。
それと、パーティクルの生成数を10倍にしたところ、「大きく映っているほうが遅い」という常識的な結果になりました。
つまりまとめますと
「描画量が少ないと、小さく映っているほうが遅い時がある」
って感じですね。
これだとロジックのどこかにバグがあるかと思われるかもしれませんが、本当にカメラ位置しか変えずにコンパイルしています。
描画量が少ないと。といっても、毎フレーム100個ほどのポイントスプライトを描画しているんですけどね。
500個にしたら逆転しました。(小さく映っているほうが速くなりました)
インスタンス処理について質問があります サンプルのInstancingなのですが、技法3、定数のインスタンス化の処理はあまり意味ないように思えるのですが これって効果あるのでしょうか? for( int nRemainingBoxes = 0; nRemainingBoxes < g_NumBoxes; nRemainingBoxes++ ) { // set the box Instancing array V( g_pEffect->SetVector( g_HandleBoxInstance_Position, &g_vBoxInstance_Position[nRemainingBoxes] ) ); V( g_pEffect->SetVector( g_HandleBoxInstance_Color, (D3DXVECTOR4*)&g_vBoxInstance_Color[nRemainingBoxes] ) ); // The effect interface queues up the changes and performs them // with the CommitChanges call. You do not need to call CommitChanges if // you are not setting any parameters between the BeginPass and EndPass. V( g_pEffect->CommitChanges() ); V( pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, 4 * 6, 0, 6 * 2 ) ); }
>>43 サンプルをみたが、1(HWInstancing)以外は
あまり意味はないな。
1の比較対象として、用意しているに過ぎない。
特に3は、普通に描画してるだけだな。
ありがとうございます。 2だとDrawPriitiveを減らせる効果はあるぐらいですかね 同じモデルを複数回描画するのを効率化したいのですが、 ハードウェアインスタンスを使えたら使う、使えなければ普通に描画するしかないということでしょうか?
2だか忘れたけど、同じモデルデータを大量に複製して 頂点にID持たせてつなげてビデオメモリに転送しとく奴だっけ? 板ポリゴン大量に扱いたいけどハードウェアインスタンス使えないって時に結構使えて気もするが
>>46 2はそうだね。
無駄重複が大量にあるのは、
キモイな。
1は、メッシュx1、DrawPrimitive x1
2は、メッシュxN、DrawPrimitive x1
3は、メッシュx1、DrawPrimitive xN
4は、メッシュx1、DrawPrimitive xN
かな。
>>45 そうだね。HWのそれ以外
DPを減らす方法は無いと思う。(D3D9)
ただ、サンプルの2はボックスの頂点データを
そのまま大量に複製しているように見えるが、
座標データを定数や頂点テクスチャに移せるなら、
頂点バッファは純粋にインデックスのみって構成も
可能だよね。
これがいけるんならサンプル2も、対象に入りそうだな。
49 :
デフォルトの名無しさん :2009/06/25(木) 17:06:01
初歩的な質問で申し訳ありません。 C言語が必要になり、根っからの文系人間が「Cの絵本」という本でもってプログラミングに挑戦しています。 if文のところで、 #include <stdio.h> main() { int s = 65; printf("あなたの点数は%d点です。\n", s); if(s < 70) { printf("平均点まであと%d点。\n", 70-s); printf("がんばりましょう!\n"); } else { printf("よくできました!\n"); } } という文を作りました。 ここから月数に応じてコメントを表示するプログラム(1月ならばwinter、3月ならspringといった具合に)を作りたいのですが、どのように変化を加えればよいのでしょうか? 月は1月〜12月までなので、13月以上と1月未満の数値を打ち込んだ場合はerrorと表示させたいです。 よろしくお願いします。
凄くすれ違いです・・
SetRenderTargetで描くのと UpdateSurfaceでコピーするのは どっちが速いですか?
52 :
デフォルトの名無しさん :2009/06/25(木) 19:11:09
頂点バッファ作成で躓いてますorz struct VERTEX { float x,y,z; DWORD color; enum{ FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE }; }; IDirect3DVertexBuffer9* pvb = NULL; Graphics->GetDevice()->CreateVertexBuffer( sizeof(VERTEX)*3, D3DUSAGE_DYNAMIC, VERTEX::FVF, D3DPOOL_MANAGED, &pvb, NULL ); ってやってるんですがCreateVertexBufferを呼んでもpvbがNULLのままで・・・ エラーではD3DERR_INVALIDCALLが返ってきてます. MSDNみると メソッドの呼び出しが無効である。 たとえば、メソッドのパラメータに無効な値が設定されている場合などである。 とあるのですがおかしいところも見当たらない気がします. どこか他で不具合出てるのでしょうか・・・. 思い当たる節がないので困ってます
インデックスバッファや頂点バッファは D3DPOOL_MANAGEDをD3DUSAGE_DYNAMICでは作れなったかったきが気がする D3DPOOL_DEFAULTが推奨
動的なバッファにする必要がないなら D3DPOOL_MANAGEDのままで使用方法に0を指定するのも有
髪の毛みたいなソフトボディ?のアニメーションもキーフレームアニメーションでできるのですか?
スキニングを探してるのか?
57 :
52 :2009/06/25(木) 21:54:53
ご協力ありがとうございました. CreateVertexBuffer解決しました. Usageを0にしたのと D3DPRESENT_PARAMETERS構造体の AutoDepthStencilFormatをD3DFMT_D24FS8にしていたのを D3DFMT_D24S8に変更でいけました.
DirectInputについて質問です。 秒間60回入力を拾っても、描画の垂直同期待ちとかで 一瞬予定通りに拾えない時間帯があると思います。 (ペイントソフトを作ってマウスで線を描くと、線が切れる部分が出る) 自分はマルチスレッドで入力を回収し、バッファにためておくことで解決しようと 考案中なのですが、みなさんが他に良い方法を使用していたら、教えてください
DirectInputでマウスさんさとゃでめよん
>>58 変なことやらないほうがよくね?
仮に1フレームで押してる・押してないと2つの状態がとれたときにそれはどっちが優先なの?
たまに押した状態がくっついてるような変なアプリみるけど
それって小細工のたまものだと思うw
IDirectInputDevice8::GetDeviceDataで 入力履歴の配列が得られる。 これで何時押されて、何時離されたか 判断出来る。
それってパッドの入力履歴とれる?
>>58 入力はスレッドでやり、スレッド優先度を高くしておく。
ただしそのままだとそいつが処理を食ってしまうので、きちんとWaitEventやらで沈黙することが大事。
普通のメッシュファイルは表示できるんだけど、 テクスチャとかマテリアルでアルファ値が設定されていないものを 任意のアルファ値で半透明に表示する方法はないですか?
そういうシェーダを書く。 マジで。 固定シェーダ(笑)でもできるけど、面倒この上ないよ
なんか質問するごとにシェーダでやれと言われまくるんだよなー そろそろ勉強したほうがいいのかな どこから勉強すりゃいいのかよくわからんのだが
D3DTA_TFACTORを使えば簡単だけど シェーダーでやった方がいいな
SetTextureStageState( D3DTSS_CONSTANT, 任意色 ); SetTextureStageState( D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); SetTextureStageState( D3DTSS_ALPHAARG1, D3DTA_CONSTANT ); 別に面倒ってほどでもないなあ
>>66 エフェクトからやれ。
エフェクトファイルは必須だから。
スプライトをSetRenderTargetの咲に描くにはどうしますか?
>>66 はぁ?
ていうか今日はじめて今日できる
ウンコする時間も考慮すると後3〜4時間?
余裕過ぎる
そんな程度
>>66 気持はわかるが、マジでシェーダオンリーにしたほうがいい。
本気で。
俺も固定シェーダにこだわってゲームつくってたけど、プログラマブルシェーダに移行したら天国だった。
HLSLがC言語だとすると、固定シェーダーは得体の知れないアセンブラ
シェーダーの勉強のとっかかりになるところでいいところない? いきなり高度なことやってるページばかりしかなくてこまる
×固定シェーダ ○固定機能 間違った用語を平気で使い続ける馬鹿って何なの?
たぶん、プログラマブルなシェーダに対しての、プログラマブルじゃない固定という意図では?
まぁ将来シェーダーいじるようなゲームプログラマーになりたいとかじゃなけりゃ 好きなもんを好きなように使っておけとしか言えないが。
まあでも固定機能パイプラインを示す 適当な言葉がないのも事実。 固定シェーダでいいんじゃないの。
固定機能パイプラインで良いんじゃ
定食
内部を考えると固定のシェーダーとも言えなくもないがw
通じりゃいいだろ こだわるところじゃない
DirectX11では 「演算シェーダ」「ハルシェーダ」「ドメインシェーダ」の 三つのプログラマブルシェーダと テッセレーションを行うための「固定機能シェーダ」が新設されるそうな もう紛らわしいから固定機能パイプラインは無かった子にして良いよ
もう固定機能パイプラインをちゃんと言うしかないな
固定機能パイプラインが無くなる事で 良書が増えるといいねぇ
directxライブラリと標準ライブラリを同時に使うことってできないんでしょうか?
勝手に使えよ。
多分同じ変数や関数が複数回使われてるみたいなエラー出たんだろ
DirectXつかっててそんなの出るか・・・?
maxとminがdefineされてるから、 std::maxとstd::minと衝突するってやつか? NO_MINMAXでぐぐればいけた気がする。
同じMS製品でそんなの出るとか不良品じゃねーか
もともとmaxとかminとか定義してたライブラリありまくるぜ vectorとか標準ライブラリ作った人なんでこんな名前にしたんだと思った std::〜っていちいち書くぐらいしかないのかな?
いちいち書いたほうがいい STLだけ差し替えたりするし。
SYSPROCはどこに書けばいいの?
>>93 DirectXのmin maxはマクロだから、std::つけてもエラーが出る。
rad0 が #define されてるのが地味にトラップ。
DirectInput8のGetDeviceStateメソッドでジョイパッドの入力を生で受け取り コード側でそれを、否定・論理積を使ってトリガ情報に加工して使おうとしています。 当該処理はDLLに放り込みました。 それを、Win32コンソールアプリケーションをドライバにしてforループでガンガン回しながら テスト実行してみたところ、ベタ入力もトリガ入力も正しく取れるのですが、 本番環境のWin32アプリケーションに組み込んでみたところ、 トリガ入力がベタ同然の振る舞いをするようになってしまいました。 理屈の上では、メインループでどれだけの時間がかかろうと、かかるまいと、 GetDeviceStateが押された瞬間にキーが押しっぱなしでさえあれば トリガとしてのふるまいをしてくれるはず・・・と期待しているのですが、どうにもなりません。 これって、いわゆる「直接入力における取りこぼし」ってやつなんでしょうか・・・
外人「OH〜ユーアーサムラーイCOOL!」 農民「ノー…アイ アム ア ファーマー…」 外人「オウマイゴー アイムソーリー ユーアープアー」
>>98 実を言うとそこまで深く突っ込んで調べたことが無い。
そのテスト版のプログラムもし公開できるものなら見てみたいよ
DLLにした時点でどこのキーとってるのか俺にはわからないけど メインの処理のキー入力を勝手にとってくるもんなの?そーゆーのって?
法線とライトの内積を求めてその値で境界の範囲を決めるトゥーンシェードで Sio29さんのCelsView見たく境界の色をあいまいにするのってどうやってやるんですか?
>>102 参照するトゥーンマップの段階の変わり目をグラデーションにするだけ
>>103 つっこみありがとう
Sio29さん独特の技術なら聞いてこようと思います
やりたい事がわかりやすいように例を挙げただけだったんですが
>>104 それじゃなんねーと思うぜ
法線は段階的に角度がついてるわけじゃねーし
>>104 ありがとうございます
色の決定にトゥーンマップを使用していないのでつまづいています
>>106 なんで?
頂点シェーダでマップの参照位置を計算してピクセルシェーダにわたして
実際の色参照をピクセルシェーダでやれば問題ないんだけど
>>107 トゥーンマップを使わないでどうやってるの?
いちいち内積の値でifで条件分けして陰つけてるの?
>>108 関係なくね?
例えば立方体の辺にグラデ入れたいとしてその方法で何かつくの?
VS上の法線などのベクトルは、 PSには線形補間されて渡される。
>>110 はライティングの仕組みを全く理解してないと思われ
そんなこと言ったら普通のグローシェーディングもできないことになる
>>111 だから頭の中でそれでグラデがつくか考えてみろっての
>>112 だからその仕組みとこの仕組みがリンクしてねぇって俺は主張してるわけだよ
115 :
102 :2009/06/30(火) 20:23:13
>>109 そうです、ifで条件つけてやってます
マテリアルごとにトーンマップを用意するのが面倒なので
>>114 VSの計算結果で頂点Aが黒で頂点Bか白としましょう
PSで頂点AとBの中間地点のピクセルを描画するときは
線形補間された灰色という値が入ってきますよね?
だから通常のライティングが成立してるのはわかりますよね?
VSで頂点Aのマップの参照位置を(u,v)=(0,0)
Bの参照位置を(u,v)=(1,0)としましょう
PSでAとBのちょうどまんなかのピクセル描画時には
線形補完された(u,v)=(0.5,0)という値が入ってきます
この値をつかってマップの色をサンプリングすればOKなのですよ
>>116 そこまで来てねぇよw
法線の値でグラデかけたマップから値とりにいくところで
うまくいかねぇと思うぜ
customUI使うには何をincludeすればいいでしょうか。 ソース分割とかやったことなくてさっぱりわかりません。 bccDeveloper使ってやっています。
>>118 CustomUIの中のCoreとOptionalプロジェクトを
インポートして使う。
VCならそのままだが、bccDeveloperはシラね。
げちょげちょすっげキタネェのができるぞ トゥーンマップ(?)でうまくいくのって2〜3色ぐらいでグラデなしの ときだけのような希ガス 綺麗にならないのはグラデがかかってほしいところでちょうど 法線(内積?)が段階的にかわってくれるとは限らないってところがポイントだと思う つまり、内積→マップの値の変換でうまくいかない
境界って輪郭線じゃなくてシェーディングの部分でしょ? だったら実際のところトーンマップの中間をグラデにしてるだけだと思うが>CelView きたねぇところはきたねぇし
>>123 境界の認識はあってるよ
実はCelView見てないけど
だったら高解像度になるにつれ余計なことしないほうがいいな
ようはシェーディングの境界をぼかしたいわけじゃなくて
シェーディングの境界がジャギってんのが気に入らないんだろ?
プログラマブルシェーダについて質問です。
bool型定数を使った静的分岐をやろうとしました。
ttp://msdn.microsoft.com/ja-jp/library/bb944006 (VS.85).aspx
>静的分岐では、ブール型のシェーダー定数に基づいてシェーダー コード ブロックのオン/オフを切り替えることができます。
>これは、現在レンダリングされているオブジェクトの種類に基づいて
>コード パスを有効または無効にできる便利な方法です。
>描画呼び出しの間では、どの機能を現在のシェーダーでサポートするかを決定し、
>その動作に必要なブール フラグを設定できます。
>ブール定数で無効にされたステートメントは、シェーダー実行中にスキップされます。
下記のようにやってみたのですが、
fcx.exeでコンパイルしたものを覗いたところ、cmp命令が使われてしまっていました。
それでは分岐による負荷がかかってしまいますよね。
分岐負荷がかからないコードブロック単位での静的分岐とは、どうやるのでしょうか?
bool UseTexture;
float4 PS(VS_OUTPUT In) : COLOR
{
if (UseTexture)
{
In.Color *= tex2D(DecaleSamp, In.TexDecale);
}
return In.Color;
}
#ifdef #else #endif
>>125 静的に決定させる為には、
静的に決定出来なきゃ駄目だよね。
>>125 のコードだと、「bool UseTexture」は
いつ何時変わる可能性があるので、コンパイラは
決め撃ちすることは出来ない。
方法としては、
>>126 のプリプロセッサ以外に、
@「static const UseTexture = true;」にする。
Aシェーダの引数で受け取り、passで分岐する。
float4 PS(VS_OUTPUT In,
uniform bool UseTexture ) : COLOR
{
if (UseTexture)
{
In.Color *= tex2D(DecaleSamp, In.TexDecale);
}
return In.Color;
}
technique T
{
pass P0{ pixelShader = compile PIXELSHADER_TARGET PS( false );}
pass P1{ pixelShader = compile PIXELSHADER_TARGET PS( true );}
}
いづれも、最適化とプリシェーダはONにしておくこと。
>>126-127 アドバイスありがとうございます。
静的分岐とは言え、さすがにON/OFFのチェンジはしたいので
>>126 や、
>>127 の@というわけにはいきません。
ひとまず、
>>127 のAではうまくいきました。
そこで再質問なのですが、グローバル定数は、uniformとして扱われるMSの説明に書いてある上、
1回の描画命令の間では不変ですよね?
グローバル定数ではダメなのでしょうか?(ダメだったから
>>125 はダメだったわけですが…)
正直引数のuniformでやる方法ですと、
pass P0{ pixelShader = compile PIXELSHADER_TARGET PS( false );}
pass P1{ pixelShader = compile PIXELSHADER_TARGET PS( true );}
このようにtrueの場合とfalseの場合をいちいち定義しなければならず、
組み合わせが多い場合(ライトON/OFF、影ON/OFFなどなど)に組み合わせ爆発が厄介そうです。
uniform int の場合はintの取りうる範囲が多すぎるため、
PS(0) PS(1) のように定義しなければならないのはわかるのですが、
MSの説明を見る限り「bool型のシェーダ定数は特別扱いだよ」みたいに読めるのですが、
bool型を使うことによる利点のようなものは何かないのでしょうか?
MSの説明を見て
>>128 >1回の描画命令の間では不変ですよね?
シェーダの生存期間は、コンパイルによって
exe(的なもの)として生成されてから、破棄されるまでの間です。
描画命令間ではありません。
定数が静的であるとは、生成から破棄の間静的であることです。
描画命令の間不変としたいなら、描画毎のコンパイルが必要。
>組み合わせが多い場合(ライトON/OFF、影ON/OFFなどなど)に組み合わせ爆発が厄介そうです。
そうです。これはD3D9世代の欠点でもあります。
これを補う為に、フラグメントシェーダやデファードレンダリングなどがあったりします。
DX11では動的リンクが加わるそうなんで、ちょっとはマシになるかも。
DX11でシェーダの連結ができるって大騒ぎしてるけどさ なんかDX9のフラグメントリンカーの存在忘れたような大騒ぎがよな 無かったことにされてるのか?? 情報もえらく少ないし。
シェーダ爆発なんて騒ぐのはキレイなエンジン作りたいやつだけで 普通は運用でどうにでもなるだろ。
>>130 フラグメントリンカを使ってる人は
今現在、世界で4人、
商用・非商用プログラムで使われてる例はゼロらしいよ。
現状のPC構成だと殆どのケースでネックになるのがCPUだから GPUで多少分岐したところで全体の速度に大差はないからな。 多少のシェーダー負荷は承知の上でまとめちまうほうが管理が楽。
DirectSound で再生しながら、 横軸に周波数、縦軸に音量を表すようなグラフを リアルタイムで描きたいです。 とりあえずWAVを再生するところはできてるんですけど、 そのようなグラフを描くにはどうすればいいですか?
すれ違いじゃねっかな。 再生できてるならそのデータをそのまま解析すればいい。 どういう風なデータ構造になってるか分からないって質問は論外。
spectrum analyzer source code でググったら。
フルスクリーン描画をしているときに画面中にダイアログを表示するのってどうやるの? フルスクリーン描画しているウィンドウがフォーカスを失うと device->Present()が失敗してしまう問題と、 フルスクリーン描画をかけるとほかのウィンドウが表示されてても 描画内容が上書きされてしまう問題とがあるわけだけど。
深度バッファシャドウについて質問です。 完全な影になる部分は、RGBA(0.5f, 0.5f ,0.5f, 1.0f)であるとします。 普通の理屈通り使うと、ライトから見て裏面になる部分は、深度バッファシャドウ的に影であると判定されますよね。 でも、ライトから見て裏面になる部分は、すでに頂点シェーダ上でCOLOR0の値が半減しているはずです。 ピクセルシェーダでの判定にひっかかったからといって、さらに半減してしまうと、影が濃すぎることになりますよね。 これは、頂点シェーダでは影による表面色の補正をかけず「影の濃さ」を計算してピクセルシェーダに渡し、 深度バッファシャドウとライティングのシャドウを先に計算し、最後に表面色に反映。としなければならないのでしょうか?
影と陰ね これは同じ物理現象だよね たしか
シャドウマップのサンプルがあるんだからそれ見ればいいだろ 三項演算子使ってるから
Direct3Dの色ってどうして少数使うの? 遅いでしょ。
シャドウマップを影を追加する為のギミックとして 使うのではなく、 光が当たっているかどうかの判断に使うといい。
>>143 あ、なるほど。
すんなり理解できました。わかりやすい教示ありがとうございます。
SAFE_RELEASEマクロの代わりに以下のようなインライン関数を書いたのですが、IUnknownのポインタがうまく変換されないのでコンパイルができません inline void SafeRelease(IUnknown *& pUnk) { if (pUnk) { pUnk->Reelase(); pUnk = NULL; } } 以下ポインタの型変換をテストしてみたものですが、どうしてエラーになるコードが駄目なのかがわかりません このように変換ができない理由を教えて下さい IDirect3D9 * pD3D9 = Direct3DCreate9(D3D_SDK_VERSION); //IUnknown *& rp = pD3D9; // エラー //IUnknown *& rp = (IUnknown*)pD3D9; // キャストしてもエラー IUnknown * p = pD3D9; IUnknown *& rp = p; // 一時変数にコピーしてからだとOK [ VC++2008 EE / DirectX SDK March 2009 ]
IUnknown *& rp = pD3D9; // エラー
関数のコンパイルが成功しない理由は148だと思うのですが、どうしてこの変換が認められないのか教えて下さい
ポインタは変換可能だが、参照は変換できないというだけ。
ありがとうございました。
あえて関数化する必要がないしなー
スマポ使えってこった
むむ RegexOptions^ Option = gcnew RegexOptions(); Option |= RegexOptions::CultureInvariant; これでコンパイルエラーerror C2676が出てしまいました・・。
すまぽってComPtr的な動作したっけ?
無理、よって完全に的外れ。
/ ̄ ̄ ̄\ / ⌒ ⌒ ヽ / ( ●)(●) | | (__人__) } … /、. ` ⌒´ ヽ / | | | / ヽ_| ┌──┐ |丿 | ├──┤ | | ├──┤ |
レベル低いなぁ
directX9で2Dゲームを作る為にPNG画像を表示しようと思ったのですが D3DXCreateTextureFromFileInMemoryEx(g_pD3DDevice,ptr,SizeofResource(NULL, hRsrc),40,40,8,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED, D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL, &img[i]); で40pxの画像を読み込むと64pxに拡大されて表示されてしまいます。 元の画像のサイズのままで読み込みたいのですがどうすればいいでしょうか。
自分でそうなるようにしているからだろ。 他人の作ったAPIが使えない、ヘルプを読むつもりもないのなら、 全部自前で読み込めよ。
162 :
160 :2009/07/05(日) 00:25:32
>>160 VGAによってはそうなる。
自分のPCだけで無くどこでも動くようにするなら、テクスチャは2のべき乗サイズになると想定したほうがいい。
>>163 VGAのせいじゃねえよ。
どんだけ馬鹿なんだよ?
>>162 引き延ばす設定が入っているから。
いったいヘルプのどこを読んだんだよ?
VGAによってはサイズ制限があるから D3DXがフラグの設定どおりに拡張してテクスチャを作る。 ⇒VGAのせいってコトだったんじゃね?
客:アプリが起動しません。 サポ:デフラグかけてみて。 客:直りました。 動くプログラムを早く作るのは、いちいち理屈を勉強するプログラマではなく、魔法を信じるプログラマの方である。
俺の経験だけかもしれんが デフラグをかけた(かける必要が出た?)PCは例外なく復活は無くお亡くなりになるw
NT4時代から毎日かけているがそんなことは無かったぜ。
まめにやってると数秒だな
>>160 ところでテクスチャのサイズと表示のサイズには何の関係性もないんだけど
なぜ拡大されていると判断したの?
作成したテクスチャのGetLevelDescでサイズを取得してみて
本当にサイズが64のテクスチャとして作られているか確認したの?
もしそうならそれはビデオカードの問題
テクスチャのサイズが40なのに64で表示されているっていうなら
それは表示のさせ方の問題
貼り付けてるポリゴンはどうなってるの?
射影行列の設定は?
viewポートとウインドウサイズが一致してないとかは?
171 :
160 :2009/07/05(日) 02:01:54
>>170 GetLevelDescでサイズを取得したら64×64でした。
Draw関数で40pxに縮小して表示してみたんですが若干ぼやけてしまいました。
テクスチャは2D画像を表示させるのに適していないってことでしょうか。
画像を表示させる別の方法を探してみます。
アドバイス有難うございました。
>>171 2Dゲーム作るならOpenCVでいいんじゃない?
>>171 元々テクスチャというのは不定形のメッシュに伸び縮みさせながら貼り付ける道具だから、
デフォルトでフィルターがかかるようになっている。
FilterとMipFilterをD3DX_FILTER_NONEにすれば補間は起こらないよ。
>>164 初心者に嘘ばかり教えない。
おまえ、ネットブック(GMA950)で動作チェックしたことないだろ?
174 :
160 :2009/07/05(日) 02:49:04
>>173 ありがとうございます。
黒い領域が残ったけどクリッピングで消せそうなので大丈夫そうです。
VCproだと64×64になってしまったのですが、ExpressEditionでプロジェクトを
作り直したら40×40のテクスチャを作れました。
原因はVCの設定ミスなんでしょうか・・・
175 :
デフォルトの名無しさん :2009/07/05(日) 05:17:56
スキンメッシュをリソースファイルから呼び出すにはどうすれば良いですか?
>>173 GMA950はNONPOW2CONDITIONALがYesだったと思うが。
NONPOW2CONDITIONALはドライバレベルで対応できる機能だから、
よほど古くてドライバが更新されてないのでなければ使える。
デフラグを頻繁に行うと間違いなくHDDにダメージを与える事になる PCの調子がおかしい時は基盤とかにホコリがたまってて電源不足になってる可能性あり
>>174 なんでUVを適切に設定しないでクリッピングなんだ?
意味分からん
>原因はVCの設定ミスなんでしょうか・・・
人の話を聞かない奴だな
断片化した状態で使うのは常にデフラグをかけているのと同義
結局確率の話でしかないだろ。 対象のファイルが ・頻繁に読む・固定長で書き込み HDD側で2桁程度の高速化 ・永久に使用しない 無益 ・追記する場合 また断片化する
まぁSSDにしとけってこったな
はいはい、スレ違いスレ違い
コンパイルしようと思ったら
1>------ ビルド開始: プロジェクト: a, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
・
・
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
1>D:\Program Files\VC\project\a\Debug\a.exe : fatal error LNK1120: 外部参照 9 が未解決です。
1>ビルドログは "file://d:\Program Files\VC\project\a\Debug\BuildLog.htm" に保存されました。
1>a - エラー 40、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
と出ます。何が原因でしょうか?
コード自体は
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html#R6 の6.プログラムを組む、というプログラムです
>>183 はいはい、CRTの設定ミス。全プロジェクトで統一しようね。
>>184 ありがとうございます
CRTよくわかりませんがぐぐって調べてみます
他アプリ(DirectXモノ)画面に上書き描画出来るようになったんだが、チラツキが多すぎて微妙です。 タイマーを使っているのが間違いだと思うのですが、解決方法ありますか? Presentフックが王道とは思うのですが、vsync待ちの処理ができる方法があるならアドバイスいただけないでしょうか。
質問です。 D3Dで地面に影メッシュを表示しようと思うのですが、地面とまったく同じ高さに描くと Z-fightingが起こってしまいますよね。 これに対処するためわずかに地面から浮かせていたのですが、Z-fightingが起こらない程度に浮かせると 影の位置がずれているのが結構見えてしまいます。 そこで「描画位置はそのままに、Zバッファでの比較の際バイアスをかける」方法がないか探しているのですが、 どうにも見当たりません。 バイアスをかける方法があれば教えていただきたいのです よろしくお願いします。
188自己解決です float bias = -0.1f; pDev->SetRenderState(D3DRS_DEPTHBIAS, *((DWORD*)&bias)); で出来ました。 が、D3DRS_DEPTHBIASはマイナーな上、サポートしていないグラボも少なくないとか? このあたりの情報おもちのかたいらっしゃいましたら、教えていただければと思います。
>>188 単純に地面のあとから描けばいいような気がするんだが、それで問題があるんだろうか。
シェーダーでやれば問題ない。
質問です。 Xファイルとやらでオブジェクトを表示させようとしたのですが、メッシュ(?)だけ表示されて色の情報が描写されません。 同じようなことがあった人がいたら解決法を教えてください。お願いします
あーいーうーえーおー あ あしかの赤ちゃん雨の中 赤い雨傘甘えん坊 い いちご畑の一年生 石ころ一個 コロコロ う 宇宙の海で運動会 え 円盤遠足絵の具で絵日記 お 折り紙のオルガンで あ い う え お の 音楽 あーいーうーえーおー
再現する最低限のコード晒すといい。
Xファイルはあくまでデータのコンテナであって、 中のデータをどう描画するかは自分次第。 よって自分でやっていないからとしか言いようがない。
色々やってみたら、テクスチャのファイルネームに何も入っていないことがわかりました。何とかなりそうです、ありがとうござました
GDIのコントロールを描画しようというのが根本的に王道ではない。 王道だったらMicrosoftがやってる。
>>197 ありがとうございます
描画対象エリアのみ2D使ってるぽいところに2D上書き予定なのですが、
zが手前になるように追加描画が出来るか調べてみようかと思います
質問です。 ピクセルシェーダの色出力を省略し、深度バッファへの書き込みだけを行う方法があったと思うのですが どなたかわかる方いらっしゃいますでしょうか? PixelShaderの返り値をvoidにしたらHLSLコンパイルエラーになりましたし、 PixelShader = NULL; にしたら妙な色が書き込まれてしまいました。
SetRenderState()で色の書き込みをマスクする。 DirectX10ならSetRenderTargetでNULLをいれる。
D3DRS_COLORWRITEENABLE ですね。 ただこれは、マスクを0にしてもピクセルシェーダ自体は呼び出されてしまうようです。 ピクセルシェーダ自体を呼び出さずに済ませてしまう方法があったような気がするのですが・・・ 曖昧な記憶で申し訳ないです
9でも連打ーターゲットNULLでいけなかったっけ
>>201 DirectX9にはない。
0.0を出力しとけ。
普通は色の出力を全部マスクしていればドライバー側で
PixelShaderの処理はスキップしてくれるはず。
>>202 インデックス0に対してはNULL無理。
ピクセルシェーダから深度値を変更できるんだから、 カラー出力しなくてもスキップされるわけないだろう。
深度値を出力した時だけ早期Zカリングがスキップされたりするんだから カラーマスクと深度出力をみて不要ならスキップもしてるだろ。
スキンメッシュのプログラムはマテリアルを設定してないの?
それは自分次第だろ。
HELP ME Xファイルを表示するためにマテリアルの数を変数に格納したはずなのになぜか格納されていません。 推測で原因を教えてください
推測だがお前が悪い
210 :
デフォルトの名無しさん :2009/07/06(月) 22:54:50
directsoundでIDirectSoundBuffer8::SetVolumeをセットしても音量に変化がありません。なぜだすか?
>>211 IDirectSound8::CreateSoundBufferが内部で初期化してるけど、音量変更前にもう一回初期化するってこと?
そもそもループ内でそれやるの難しくない?
最初にやれよ
CreateのときにDSBCAPS_CTRLVOLUMEフラグを立ててないからって落ちじゃ?
215 :
デフォルトの名無しさん :2009/07/07(火) 00:51:34
a
DI8で pDI8->EnumDevices でデバイスを列挙するのはわかるんだが pJoyDevice->EnumObjectsでプロパティを列挙したときに何が取得できるかよくわからない たぶんボタンがいくつあるとか軸の範囲とかの取得・設定ができるんだと思うんだけど EnumObjectsCallback内でpJoyDevice->SetPropertyとかやっているサンプルが多く、 これだとpJoyDeviceが1つのときは問題ないんだろうけど 複数のpJoyDeviceを扱いたいときとかどうすればいいのだろう? とか考えるとさらによくわからなくなりまつ BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext ) のpContextに、プロパティ設定したいデバイスのpJoyDeviceでも渡して pContext->SetPropertyとでもしておけばいいんでしょうか?
PCでパッド2個つけて2人用プレイって需要あるんかな 格闘ゲームでも1P vs COM か COM vs COMしか利用されないだろ
家庭用ゲーム機のエミュとか?
http://abnormal.sakura.ne.jp/upfiles/2008/06/29/keiou.jpg l i i i i l
/ ̄ヽ 昼l ゝ ノ ゝ ノゝ ノ
, o ', 食ご l i´ `i _ i´ 講 `i `l
レ、ヮ __/ べはl l / \ l 義 l l
/ ヽ よん.l {@ @ i が l l
_/ l ヽ うを l } し_ / お
しl i i l > ⊃ < わ
l ート lヽ、 / l ヽ っ
 ̄ ̄¨¨'~~ ‐‐‐--─| ヽ 、 / /l 丶 .l`\ た
____ __ | (_/ | } l`\|
|| |WC| | へ へ ヽ、 l ! \||
||  ̄ ̄ |/ \ `ヽ、 ヽし! /|| ガタッ
|| | / / ヽ、||
◎|| | / / ヽ、
 ̄ ̄ ¨¨¨ー─‐‐--- ,,, __ ____
,, _ |  ̄¨¨` ー──---
モパ / `、 | モパ |:::::::::::::::
グク / ヽ | グク /  ̄ ヽ:::::モパ
モパ./ ● ●l | モパ l @ @ l:::グク
グク l U し U l | グク } し_ /::::モパ
l u ___ u l | _ /=テ⊃ <_グク
>u、 _` --' _Uィ l ◎ー)/キ' ~ \ヽ
/ 0  ̄ uヽ | | | | i二二二i-' ) ',
. / u 0 ヽ| ~~~ ~ l ヽ--┬ ' ./
テ==tニト | / ̄/ ̄ ̄` ノ /
/ ̄) ̄ | ̄ ̄ ̄ ̄ ̄| | | |二二二)
220 :
sage :2009/07/07(火) 18:55:08
>>216 pJoyDevice->EnumObjects は 第3引数で指定したフラグの情報が取得できる
例えば軸情報なら DIDFT_AXIS を指定すればいい。
ttp://msdn.microsoft.com/ja-jp/library/cc351884.aspx >BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext )
引数には DIDEVICEOBJECTINSTANCE オブジェクト と EnumObject で渡した第2引数 pContext がある。
コールバック関数で指定したフラグの情報を含む DIDEVICEOBJECTINSTANCE オブジェクトから pContext に情報を
引っ張ってくればいい。
ex)
Joystick* pJoy = (Joystick*)pContext;
if (pdidoi->guidType == GUID_XAxis) /* 処理 */
トイレでプログラミングはしても良くて助かった
監視カメラ設置かよ
あれあれ? 俺ライブラリをVistaに対応する前にWindows7とかでちゃったw
DirectXと関係ない宣伝行為乙
どう見てもDirectXだが 推奨環境 Vista 日本語版WindowsXP / Vista Intel(R)Core(TM)2 Duo プロセッサ 2.40GHz 以上 メモリ 以上 2.0GB 以上 DirectX9.0cに完全対応し ビデオメモリ256MB以上で ピクセルシェーダー2搭載の GeForceまたはRADEONシリーズ (メーカーから最新のグラフィック ドライバサポート必須) 画面解像度1280X960ピクセル フルカラー推奨 メインメモリと共有と表記のあるビデオシステムは動作保証外となります サウンド DirectSoundに完全対応したサウンドカード DVD-ROM 4倍速以上のドライブ HDD 5.0GB以上の空き容量
224の仕組みとDirectXは関係ない。 OpenCVのスレにでも行けばいいかと。
てs
宇 宙 の 大 規 模 構 造 (太陽の∞倍)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∧ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 帝ハ神ナリ!帝ハ神ナリ! グ レ ー ト ウ ォ ー ル  ̄ ̄ `――(長さ:太陽の3500兆倍、幅:太陽の2100兆倍) __ , -―― ∧ 守るも攻めるも黒鉄の〜♪ _,,,,,,,,_ /` `'i、 超銀河団 | l <ゴミクズども氏ねよwwwww ゙l、 / `'ー---'" (太陽の約680兆倍〜) 銀河系 o <太陽?誰だよそれwwww (太陽の6800万倍) IRS5 。 <太陽?俺の国民だよ (太陽の10000倍) 太陽 . <たいようたいよう〜! (直径140万km)
カメラの使用はDirectShowの範疇でありDirectXではない。
DirectX9のフックについて、初心者向けの詳しいHPはありませんか? 当方、VC(++は少し苦手)、VB、Delphi分かります。dllのコンパイルも出来ます。 目標は、フルスクリーンの別アプリ画面に自前のグラフィックを描画することです。 レベルが低い質問かもしれませんが、よろしくお願いします。
233 :
232 :2009/07/08(水) 15:02:38
別アプリのhWnd取得と画像データの取得までは出来たのですが、描画の方が上手くいきません。
またおまえか
235 :
デフォルトの名無しさん :2009/07/08(水) 15:12:14
16と16の平たいを毎回敷き詰めて描くと テクスチャに写植して描くはどちらが速いか?
実測しろ
日本語がおかしいが 敷き詰めて書くのが1回の命令で出来るならそっちの方がいいんじゃね? ただのループならWARP指定汁
>>234 やはり直接フックがベストですか!
有り難う御座いました。
質問です。 カメラから見た時の、あるメッシュの「厚み」を調べる方法を考えています。 サイコロのような凸型物体ならば、 ・裏面を描画し、テクスチャAに深度値として書き込む。 ・表面を描画し、テクスチャBに深度値として書き込む。 とし、A-Bで厚みが出ると思います。 (深度バッファシャドウの時のように、深度値をz/wで0〜1にしてしまうと、歪んでしまうので単純にzを記録する必要がありますが) ただ、「コ」の字を上から見た時のような場合の厚み合計の出し方が思いつきません。 「コ」を真上から見た際、上辺の厚みと、下辺の厚みの合計が知りたいのです。 何か良い手はありますでしょうか?
>>239 表面/裏面と分けるのではなく、カリングを無効にした状態でZFUNCを
LESSEQUAL、GREATEREQUALにして描画する。
>>239 加算合成すればいいのではない?
裏面のZ値の合計から表面のZ値の合計を引く
0〜1の範囲をはみ出ないようにしないといけないけれど
>>240 すいません、その結果何が解決するかがちょっと分からないのですが…。
一番奥であるポリゴンまでの距離が記録されるだけかと。
>>241 素晴らしいです!
まさにその通りですね!
(Af - An) + (Bf - Bn) == ((Af + Bf) - (An + Bn))
ということですね。
ありがとうございました。
3Dゲームのプログラミングを始めようと思うのですが オススメの書籍はありますか?
244 :
240 :2009/07/08(水) 18:59:59
>>242 上辺の厚みと下辺の厚みの合計ってとこ見てなかった。
コが1枚ずつの面ってことじゃなくて、厚みのある凹ってことね。
245 :
216 :2009/07/08(水) 19:25:37
>>220 EnumObjectsCallbackで何をやってるのかようやく理解できますた
VOID* pContext に LPDIRECTINPUTDEVICE8 を渡して
コントローラーごとに個別にプロパティが設定できるようになりました
ありがとうござますた
>>243 DirectX逆引き大全500が鉄板だと思うが
Googleのオンライン書籍立ち読みで見れるので見るといい
いまググって調べた。 東京12.960.883人の内、支那人149.113人だな。 堂々コリア人を抜いてる。 (09年5月調べ) 約、100人に1.15人いるんだな。
248 :
デフォルトの名無しさん :2009/07/08(水) 22:49:17
初心者ですが質問させてください。 現在DirectSoundを使った音声キャプチャプログラムを作成しています。 マイクやライン、サウンドミキサなどの入力先を指定してキャプチャを行いたいので 次の手順でキャプチャデバイスオブジェクトの作成を行っています。 手順1.DirectSoundCaptureEnumerate関数を使用して利用可能なデバイスを列挙 手順2.手順1で列挙したGUIDから任意の入力先のGUIDを選択し DirectSoundCaptureCreate8関数の第1引数に設定しキャプチャデバイスオブジェクトの作成 Vista環境では手順1のDirectSoundCaptureEnumerate関数で マイクやラインなど録音デバイスの項目に表示されている 入力先の数だけデバイスの情報が取得できて 入力先を選択してのキャプチャが実施できるのですが、 XP環境では1つのデバイスしか列挙できず入力先の指定が行えません。 (録音コントロールにはマイク、ライン入力など複数の入力先が表示されています。 録音コントロールで選択されている入力先の音しかキャプチャ出来ません。) XPでは入力先を指定してのキャプチャデバイスオブジェクトの作成は行えないものなのでしょうか? 不可能な場合は何か入力先を指定してキャプチャするよい方法はないでしょうか? よろしくお願いします。
Ring 3 Circus のDirect3D9 Hookingを改造して Direct3D9を使ったゲームの画像を取得するプログラムを作ったんですが デバイス作成時にバックバッファをロック可能にするフラグを指定していないと バックバッファの内容が取得できないようです。 それでIDirect3DSwapChain9::GetPresentParametersを呼んで、 得られたD3DPRESENT_PARAMETERSのFlagsを flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER のように変更し、Resetを読んだら、HRESULTがD3DERR_INVALIDCALLに・・。 Resetはだめみたいです。 ランチャとか用意して、バックバッファをロック可能でデバイスを作成させるのは使うとき面倒です。 ほかにバックバッファの内容を取得する方法は無いんでしょうか
取得しないといけない状況がまったく思いつかないので分からない。
IDirect3DDevice9::StretchRectでコピーすりゃいいんでないの
質問です パーティクル(たくさんのビルボード)を表現するのに DrawPrimitiveUP + D3DPT_TRIANGLELIST を使っています。 1つのビルボードを表現するのに6頂点。 100個なら600頂点のデータをDrawPrimitiveUPに渡す必要があるのですが、これが思いのほか遅い気がします。 パーティクルを表現するのに、DrawPrimitiveUPを使うのは常道なのでしょうか? DrawPrimitiveUPによって、メインメモリーからVRAMに転送するコストが大きいのが遅い原因かな?と思います。 ただ、パーティクルは移動なども毎フレーム行われるため、DrawPrimitive(UPではない)のほうでは実現が難しい気がします。 (結局は毎フレームStreamに流す作業が必要。これではVRAMへの転送コストは変わらない)
AGPメモリ
どんなパーティクルを想定してるのかわからないけど 6頂点のポリじゃなくて1頂点のポイントスプライトにしてみるとか そうすると制御が楽になるので簡単な飛び散りくらいなら 頂点シェーダで動かせるようにもなるし
>>252 ホントにDrawPrimitiveUPの呼び出しだけを計測してる?
頂点演算って毎フレームCPUにやらせると結構負荷かかるよ。
パーティクルの移動計算が幾何学的なものならシェーダーにやらせたほうがいい。
レスありがとうございます
>>254 ポイントスプライトも考えたのですが(ポイントスプライトで実装しているパーティクルもあるので)、
今回は頂点毎に違う方向を向いた法線が必要だった(疑似ボリュームパーティクル)ため、ビルボードにすることにしました
目指しているのは疑似ボリュームパーティクルによる煙表現です
>>252 実験としてDrawPrimitiveUPに流し込む(FVFで定義した頂点フォーマットの)構造体を編集せず、描画し続けさせてみました。
ほぼ同等の速度のようです。
おそらくCPUパワーはほとんど足を引っ張っていないかと思われます。
>>256 TriangleStripなら4頂点で済むよ。
DirectXのバージョンが分からんが、たぶんヘルプに「動的な〜」頂点バッファ処理云々の項があって
そこにDrawPrimitiveで、頂点位置が毎フレーム変わるようなものの処理の仕方が書いてあるはず。
簡単に言えば、頂点バッファを確保して、後は毎フレームに
バッファをロック>書き込み>一杯になったらアンロックしてDrawPrimitive>再度バッファを…
更にインデックスバッファを使ってTriangleStripにすれば、転送コストはかなり違ってくるわよ。
Stripじゃ縮退ポリゴンで2頂点増えるから、減らないだろう。
バッファをロックするんじゃ、結局遅いと思うが
インデックスは毎回転送する必要がないから、流すデータ量は減るんじゃないか
微妙な即レスが続いて、なんか答えるのが馬鹿馬鹿しくなってきたが
>>258 2通りにとれるな。もう少し理由を言ってみ。縮退ポリなんか使わんよ。
>>259 今時そんな…ではDrawPrimitiveUPはどうやってVRAMに送ってるんだ?
ロックとDrawは極力まとめるんだ。まぁ、UP系もそれなりに上手くやってくれるけど。
確かLunaの作者が昔実験結果を掲載してくれてたけど、今はなくなっちゃったみたいだな。
スプライトって全部板なんだから頂点情報ひとつで十分だろ
>>261 縮退ポリゴンを使わずに、複数のビルボードをStripで描画するってどうやるの?
>>261 いまどきそんな。とか言ったって、DrawPrimitiveUPより早くならなきゃ質問に答えたことにはならないんだぜ?
しかも今回は、毎フレーム1回しかUPを呼び出さだないわけだし、どうやってUP以上に「ロックとDrawをまとめる」んだよ?
>>263-264 ごめんなさい
俺こそが質問者の質問をよく読んでない、ただの馬鹿馬鹿しい男でした
ちゃんと自分の間違いを謝れる奴は、伸びる奴
>>256 そこまで試したならついでに、静的なVertexBufferに頂点データ入れてみて
本当に転送が問題なのかも確かめた方がいいかと。
/j^i ./ ;! / /__,,.. / `(_t_,__〕 / '(_t_,__〕 / {_i_,__〕 / ノ {_i__〉 / _,..-'" / / 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
だから動的更新ならAGPメモリ使えよ。
>>263 インデックスバッファ
>>264 まず
>>259 でロックが遅いなんて書くから、UPでもロックのコストは変わらないと書いた。
「動的な〜」の項読んでみろと。
>>253 氏のも乗ってたはず。
で更にUP系でIB使うと、毎回IBの転送が起こるよな?
ところが非UP系ならば初期(或いはVBサイズ変更時のみ)コストだけで済む。
で、更に頂点数の転送量は2/3に抑えられる。
もう少しいうと、DrawPrimitiveUP系の場合、計算用のアクセスしやすいバッファの他に、
描画用の配列をメインメモリに取って、更にVRAMにも同じのが出来るわけだ。無駄だと思うがねぇ。
まぁ、好きに実装したらいいじゃないの。なんでそんな必死よ
>>265-266
>>252 がDrawPrimitiveUPを連投してるなら
それをまずやめるべき。
>>257 方式で、まとめるのが一番良い方法だろうな。
余力と環境があるなら、ジオメトリインスタンシングも
試して欲しいところだが。
結局「縮退ポリゴンを使わずに、複数のビルボードをStripで描画する」方法の説明がないわけだが
インデックスで縮退用のを適当に一枚かますってことか それでなくてもDrawPrimitiveUPにこだわる人は、 描画数増えたときどうするんだろ?
274 :
デフォルトの名無しさん :2009/07/09(木) 14:24:44
「DirectSoundで鳴らしている音」を録音したいのですが、 どうすればよいでしょうか? 例えば、自作ゲームの「BGM」と「プレイ中に適宜鳴る効果音」の両方を 1つのWAVファイルに録音したいと思っています。 よろしくお願いします。
縮退ポリは使わないと言ってるだろ
なんか大人と子供だな
そもそも2000〜3000ポリゴン以下ならDrawPrimitive系もDrawPrimitiveUP系も 速度にほとんど差がないんだが、みんな計測した上で話をしてるんだろうか?
誰もそこの速度差は問題にしていないけどな
259です。
>>270 >UPでもロックのコストは変わらないと書いた
259で書いてるのは「結局(UPと同じくらい)遅いと思うが」という意味です。
>>277 >>278 むしろ本当に3000ポリゴン程度で差が出るなら問題じゃね?
速いほう使った方がいいだろ
たくさんのご意見ありがとうございます。 まず、UPをやめる+INDEX化で転送量が2/3になるのは良さそうです。 やってみます。 さらにINDEXバッファは1回だけ書けば書き換え無用ですから、純粋に2/3になりそうで良いですね。 TriangleStripで〜という方法は、いまいちわかりません。 離れた位置の四角ポリゴン(実際は三角ポリ×2)を描画する必要がある以上、TriangleStripは使えないのではないでしょうか? 縮退ポリゴン(描画されない細い三角ポリゴン)を使うことによる手法も聞いたことはありますが。 AGPメモリというのが最初よくわかりませんでしたが、D3DUSAGE_DYNAMICを指定することなんですね。 こちらも試してみます。 このほかに、下記のような手法も考えたのですが、一般的ではないのでしょうか? 説明を楽にするために、INDEXではない方法での説明とします。 ・「四角形を1つ描画するのに必要な情報」を作る。つまり6頂点分。 頂点データの中にD3DFVF_SPECULARを加え、その領域に「何個目の四角形か」を入れておく。 ・上記の6頂点×描画しうる四角形分の”静的”頂点バッファを作り、情報を書き込む。 その際D3DFVF_SPECULARの領域に入れている「何個目の四角形か」をきちんと適切な値にしておく。 ・パーティクルを表現するには、四角形毎の座標情報を更新する必要がある そこでID3DXEffect::SetVectorArray()で座標情報を渡す ・エフェクト側ではD3DCOLORtoUBYTE4を使って、対応するVectorArrayの座標情報を引き出し、頂点座標に加算する 問題点として、ビルボードをカメラに正面向けにするためのMATRIX変換を頂点シェーダ内でやる必要があります。 (今までは、頂点データ内のxyzを正面向くように調整済みだった)
>>281 長々書いてあるが、テストすれば分かることだから自分でやってくれ。
Index関係の思い出といえば、
Indexバッファを途中から使うための引数の与え方が全然資料が無いことだった。
正しく動作させるまでかなり試行錯誤したな。
一度動けばなんてことないんだが。
>>282 詳しく
前にIndexバッファを途中から使おうとしたんだけど
GeForceとIntel系チップセットでは想定通りの動きをしたんだけど
ATI系のビデオカードではうまく動いてくれなかったんだよね
284 :
282 :2009/07/09(木) 15:28:43
>>283 逆に、マジかと言いたい。
オレはGeForceで開発した上でIntel系とATI系でも動いてることを確認する形を取ったが、
Direct3DのAPIレベルで互換性が無いような違いが
IndexedBufferレベルであるんだろうか?
>>281 全然わからんが、要はこれがしたいのか?
FVFが通るか、不安があるけど。
uniform float4x4 g_world_transform[n] = { ... };
static const float4 g_local_position[4] = { ... }; // for box vertices
struct vertex_in_t
{
uint24 transform_index; // 0~n
uint8 position_index; // 0~3
};
struct vertex_out_t
{
float4 positon;
float4 color;
};
void vp_main( in vertex_in_t iv, out vertex_out_t ov )
{
float4x4 world_transform = g_world_transform[iv.transform_index];
float4 local_positon = g_local_position[iv.position_index];
ov.position = mul( local_positon, world_transform );
pv.color = float4(1,1,1,1);
}
縮退ポリゴンとはなんぞや?
>>286 面積が0のポリゴン
ストリップは数珠繋ぎしか出来ないけど
途中面積が0のポリゴンを繋げれば
バラバラに見えるでしょ
報告です。 281で提唱した方法だとでかかる時間を1とすると、 AGPメモリに置く方法は2 DrawPrimitiveUPでやる方法は3 となりました。 何の因果か、きれいに1:2:3になりました。 281で提唱した方法だと、実質VRAMへ転送している量はvector4 * particleNumでかなり節約できます。 その他ですと、 float x, y, z; float nx, ny, nz; DWORD color; float u, v; でfloat * 9 * particleNumほど転送しているので、二倍超転送していることになります。 やはりボトルネックはこのあたりなのでしょう。 次は、ストリームを分けることで、AGPメモリに置く方法をとりつつxyzの値しか転送しないようにしてみます。
1*1のポリゴン用意して トランス演算とDraてPrimitive繰り返せばよくね?
小沢の西松建設問題の時 09/01/21 西松建設社長を逮捕 09/01/21 元西松建設専務 死亡 09/02/24 長野知事の元秘書(西松建設事件での参考人) 死亡 (電柱にロープを巻きつけ首吊り自殺) 09/03/01 「小沢一郎氏と秘書と、ダム工事のただならぬ関係」を追及してきた記者(吉岡元議員) ソウルで取材中に死亡 09/03/03 民主党岩手支部家宅捜索 09/03/04 民主党事務所のある相模原卸売市場全焼 助かった人 小沢氏の第一秘書・大久保容疑者も自殺の恐れが出てきたため、検察が緊急逮捕 鳩山の献金問題
288です。
288の報告は、いわゆるオンボでの実験で、頂点シェーダがソフトウェアで行われていました。
グラボつき(GF9600)の環境で試したところ、
UP系 5
AGP 8
281法 1
の割合で時間がかかりました。
AGP法のほうが、UPよりも遅くなっているのが印象的です。
>>290 面白い記事ありがとうございます。
まさしくこれですね。
なんかやり方が下手な気がする ソースあげてみ
つかindexbufferも使えない素人のコードによる測定になんの価値があるんだ いつまでやる気だろ
>面白い記事ありがとうございます。 節子…それ、公式サンプルや 一般的な方法がわかって良かったんじゃね
まともなグラボならUP使ったほうが早いのは常識だろ 293とか294は典型的な2ch馬鹿だな
>>293 一番あやしいのは、逆に遅くなってるAGPのやつですよね。
pDev->CreateVertexBuffer(
sizeof(D3DVERTEX) * 4 * MAX_SMOKE,
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY ,
MYFVF,
D3DPOOL_DEFAULT,
&m_buffer,
NULL
);
pDev->CreateIndexBuffer(
sizeof(WORD) * 6 * MAX_SMOKE,
D3DUSAGE_WRITEONLY ,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&m_index,
NULL
);
で生成し、毎フレーム下記のようになっています。
>>294 IndexBufferは使ってますよ
m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
m_buffer->Unlock();
pDev->SetStreamSource(0, m_buffer, 0, sizeof(D3DVERTEX));
pDev->SetIndices(m_index);
pDev->SetFVF(MYFVF);
pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4 * m_smokes.size(), 0, 2 * m_smokes.size());
298 :
294 :2009/07/10(金) 00:04:34
>>296 は?UP云々なんて一言も言ってないんだがw
>>297 む、こりゃちょっとひどい気がする
スレちゃんと読んでないけど、xyzは毎フレーム変化してるんだよな?
どのタイミングで更新してるんだい?
>>299 D3DLOCK_DISCARDですね。
m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
この行が、動的バッファのロックです。
LockとUnlockの間に「ここで頂点情報を書き込んでいます」とか書くべきでした。すいません
>>300 え、初心者サイトのサンプルをほぼそのまま使ったのですが、妙でしょうか?
xyzの更新は、Lockの前に行っています。
m_smokesというのが、ビルボードの中心座標の配列vector<D3DXVECTOR3>です。
ちゃんとD3DLOCK_DISCARDでロックしてるし、 動的バッファの取り扱いは、特に問題はなさそう。 へえ、これでUP系の半分の性能なんだ、信じられんw
>>302 オンボ環境ではしっかりUPのほうが遅かったので、環境によるような気がします。
明日再度オンボ環境の場所に行くので、再度慎重に測り直してみます。
>>301 うーむ、Lockの前に更新って、矛盾してないか
このソースだとDYNAMICでバッファを確保した意味がないよ?
こりゃ計測方法も怪しくなってきたなw 両方のソース示さない限り無意味だろw
>>304 すいません。ちょっと更新の意味を取り違えているのかもしれません
for(DWORD i = 0; i < m_smokes.size(); ++i)
{
m_smokes[i].y += 0.1f;
}
m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
for(DWORD i = 0; i < m_smokes.size(); ++i)
{
(D3DVERTEX) *p = &vertex[i * 4];
p[0].x = m_smokes[i].x - 0.5f;
p[0].y = m_smokes[i].y + 0.5f;
p[0].z = m_smokes[i].z;
p[1].x = m_smokes[i].x + 0.5f;
p[1].y = m_smokes[i].y + 0.5f;
p[1].z = m_smokes[i].z;
p[2].x = m_smokes[i].x + 0.5f;
p[2].y = m_smokes[i].y - 0.5f;
p[2].z = m_smokes[i].z;
p[3].x = m_smokes[i].x - 0.5f;
p[3].y = m_smokes[i].y - 0.5f;
p[3].z = m_smokes[i].z;
}
m_buffer->Unlock();
こんな感じにやっています。
実際は座標のほかに、normal, color, uv もセットしています。
あと、もうちょいマシなコピーの仕方をしています。
>>305 単純に1000フレーム回るまでの時間を計測しています。
描画以外はほとんど何もやっていないのと、座標移動計算はまったくといってよいほど時間をくっていないのを確認済みです。
>>294 =
>>298 =
>>305 初心者スレ荒らして楽しい?
他人の足引っ張って立って、自分の価値を高めることにはならないぜ?
無意味だと思うならスルーしてなよ
特に問題あるようなソースには見えないな UP系のほうが早い場合があるというのは面白い UPはドライバ側で何かしらの最適化を行っているのかもね
294 indexbufferも使えない素人が!(キリッ!!
297
>>294 IndexBufferは使ってますよ
腹抱えてワロタw
久々に有益情報が出てるな 俺は何も考えずにDrawPrimitiveUP使ってた Instancingとやらを使うと速度が5倍になるとかマジパネェから俺も実験してみるわ
俺のソースでは、mallocaで確保した一時バッファにデータを作ってから Lock→memcpyでまるごとコピー→Unlock と、 ロックしている時間が短くなるようにしてたな。 なんとなくその方が良かろうと思っただけで、計測してないから鵜呑みにはするな。
294じゃないけど、よくおまえらそこまで無条件で信用できるな。 煽る気はないけど、ソースのないベンチなんて昔は弾いていた気がするんだが。
DirectX10使えば縮退ポリゴンもいらねーしデータ転送量も抑えられるしでウハウハ。 SO使えば座標更新もGPUで出来てさらにウハウハ。
>>312 D3DLOCK_DISCARDを指定すると、
一時バッファを用意してくれるらしいので
その処理は冗長と言える。
俺もGeforce9600GTなんで、さくっと試してみたよ DrawIndexedPrimitiveとDrawIndexedPrimitiveUP LVetexで位置のみ毎時更新 前者は動的バッファがたまり次第フラッシュ 後者もそれに合わせようと思ったけど、面倒なんでメモリ一括確保 疲れてるんで固定機能でやったけど、1万ポリでも誤差程度 寝る
>>316 そうなるはずだ。
UP系かそうでないかでそんなに差が出るというのはちょっとおかしいんじゃないか。
プリミティブの座標更新をGPUにやらせることで全体の高速化を図るというのならまだ分かるが。
>>316 結局描画におけるGPUの時間が変わらないからフレーム単位だと時間は変わらないが
DrawPrimitive()とDrawPrimitiveUp()だと関数から帰ってくるまでの時間にかなり差があったと思うが。
DirectShowのスレでも質問したのですが、スレの勢いを考えてこちらにも質問させていただきます。
DirectShowでGeekなページを参考に動画再生をするプログラムを作りました
http://www.geekpage.jp/programming/directshow/change-rate.php 参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。
put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』
とありますが、
pMediaPosition->put_Rate(0.5);
のput_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。
そこでIMediaSeekingかIMediaPositionを用いて、または用いなくてもいいのでdirectshowで
動画の巻き戻しをするプログラムを作りたいのですが、どうすればよいのやら困っています。
何か良い考えはないでしょうか?
是非知恵をおかしください!
テクスチャのサンプリングをWrapにして何度も繰り返すような貼り方をすると負荷が高いと聞いたんですが これは本当ですか? 使用するテクスチャが小さくなるから、むしろこっちのほうが良いと思ったんですが 自分の環境( GTX280 )では違いが見られなかったんですが オンボードのような低スペックのビデオカードだと遅くなったりしますか?
うそです。
ゲームの動画再生にDirectShowはいつも使っているけど、再生速度の変更が必要になったことがないから知らない。
AGPっていつの時代だよw
ソース無いベンチなんて意味ないよ
ということではあるそうですが、一応報告しておきます
グラボつき(GF9600)の環境で試したところ、
UP系 5
AGP 8
281法 1
オンボ環境で試したとところ
UP系 10
AGP 9
281法 8.5
くらいの処理時間になりました。
あくまで同一環境内での比率なので、GF9600の数値とオンボの数値には関係性はありません。
まったく同じ実行ファイルで実験しました。
>>316 私の実験と差がありそうなのは下記2つっぽいですね
>座標だけ更新
座標だけストリームを分けて、そこだけ更新したということでしょうか?
(私のは、座標のほかに法線・カラー・UVも毎フレームVRAMに転送しています)
>前者は動的バッファがたまり次第フラッシュ
これはどういう方法でしょうか?
D3DLOCK_DISCARDではない方法ですかね
定数レジスタの数について質問があります DX8時代は96 DX9時代は256 というのはなんとなく知っているのですが、これは頂点シェーダのバージョンに依存しているのでしょうか? もしそうだとして 定数レジスタを200個近く使っている状態で VertexShader = compile vs_1_1 vertexShader(); とやったとき、問題なく動作してしまうのが不思議です エラーもでませんし、見た目も問題なく表示されてしまうのです
最低サイズが だろ? 詳細はcapsで調べれたと思う どのみち最低サイズを守った方が利口だが
ICH10RでSSD2台で7RCでRAID0組みたいです。途中でFDDからRAIDドライバ読み込み必要ですか?
>>324 です。
原因がわかりました。
どうやら、
>>306 のように、ロックしてからループで書きこんでいくのはよろしくないようです。
>>312 のように、一時バッファを用意して全部メインメモリ上で書きこんでから、Lock。
memcpyでいっきに流し込みすぐUnlock
とやることで、UP系と同等の性能になりました。
「これならUPでいいじゃん」って思ってしまいますね…。
329 :
316 :2009/07/11(土) 12:23:40
>>324 なんの工夫もなくロックして位置や色を書き込み
memcpy未使用
フラッシュはバッファに溜まったものを吐き出すって意味
今時使わない?俺もロートルか
330 :
316 :2009/07/11(土) 13:00:33
memcpyでもやってみたが同じだな フォーラムをざっと見てきたが、UPはレガシー扱いで間違いないだろう ・UPはハードウェアサポートが約束されていない ・UPは中間バッファを勝手に使うからパフォーマンスが落ちる(チューニングしづらい) 少なくとも2倍から3倍のメモリを使う ・描画命令を出しても、完了してから制御を戻すわけでないので、UPのために確保したメモリがいつまで妥当であるべきかが不定 ・例え変化が無くてもmemcpyが描画命令のたびに呼ばれる(最適化が出来ない) 問題の件だが、冗長なメモリコピーがそのままUPのコストになるので、 扱う頂点数が増えるほどUPは不利になるだろう おそらく結果が逆転してしまうなら、正しく使えてないのだと思う
ロックが長いってだけで、1.6倍の遅延に繋がるとは思えない。 なぜそうなるのか、シナリオが作れない。 誰か説明してくれない?
>>330 ・描画命令を出しても、完了してから制御を戻すわけでないので、UPのために確保したメモリがいつまで妥当であるべきかが不定
流石にこれはないだろ。
UPを呼び出した直後に、確保したメモリーを壊してしまっても大丈夫だよ
333 :
316 :2009/07/11(土) 14:12:18
>>332 さてどうだろうな
描画命令はFIFOで処理されタイミングは不定
投げ入れ側は(Sendではなく)Post扱い
そしてUPの場合、向こう側で全コピーが必ず発生している
壊したメモリがたまたま生きていただけかもしれない
*大丈夫だった*以上のことは言えないはずだ
UP系は関数から抜けたときにはソースのデータは破棄してOKなはず。 ようするに中でメモリ確保してコピーして保持してるって事だけどな。
ハハ、DrawPrimitiveUPは 何時クラッシュするかわからない ファイナルハゲマル丼的な関数というわけですね。 わかります。
>IDirect3DDevice9::DrawPrimitiveUP に渡す頂点データは、呼び出しの後も保持する必要はない。
>MicrosoftR Direct3DR は、呼び出しから戻る前に、そのデータへのアクセスを完了する。
>>330 の引用元の信用がガタッと減ったな
MSDNの記事くらいは読もうよ。 >IDirect3DDevice9::DrawPrimitiveUP に渡す頂点データは、呼び出しの後も保持する必要はない。 >MicrosoftR Direct3DR は、呼び出しから戻る前に、そのデータへのアクセスを完了する。
338 :
316 :2009/07/11(土) 14:27:54
>>336 こりゃすまなかったな
引用元はよく使うGDevだ
しかし全コピーが発生するのは間違いないだろう
UP系は中でDYNAMICなバッファのプールに対してLOCK_DISCARDと DrawPrimitiveを必要な数繰り返していると推測できる。
>>340 その間制御を戻さないならば、CPU時間が減るし、
コピー後に制御を戻すとしても、メモリとコピー時間が無駄なわけだよね。
どう考えてもUP系の方が速くなるはずがないのだけど、
そもそも質問主以外にそんな結果の人はいるんですかね?いないなら不毛な気が・・・。
昔、散々会社で似たような検証してたみたいだけど 結局、使い方が悪いだけで変わらない(まあ、当然かw)って結論が出てたなw
だからといって、ある程度までの頂点数ならUP系でもほとんどペナルティーは無いわけだし、 種々のコンテナが使えるヒープメモリで間接的にレンダリング設定できるのはありがたい。 前作ったライブラリではUP系のみで実装した。 もっとも、現在製作中のライブラリは頂点バッファの確保/Lock込みで実装してしまったのでもう関係ない話だが……。
>>341 たんなるベンチ風に測れば速度は変わらないでしょ。
UP系は同期関数でUPじゃないほうが非同期って考えれば
データ量が多くなってゲームなんかでCPUを使うようになれば差が出てくると思う。
3Dゲームで毎フレーム書き換える頂点データつったらエフェクトくらいしか思いつかないけど。
2Dゲー作っててもたまに3Dゲーと同じような演出とかやりたいときあって 結局、UP系特化で作ったライブラリって開発してるとゴミになるぞ
>>340 で正解だな。加えて毎回バッファのプールを再作成していたような。
ロックで遅くなるってヤツは、メモリアクセス中にCPUとGPUがバッティングしたらどうすんの。
UP系だって結局中で同じことをせざるを得ない。UP系が未来の技術でない限りは。
しっかし100レス近くも費やす内容なのかねぇ
>>347 まあ、とんちんかんなベンチレポとそれに賛同したり火消ししたりが延々と続いたからな。
ソースをさらしてれば話は早かったんだが。
>>344 変わらないならOKでしょ。むしろ速くなるっていうからさ。
まー質問主というより、無条件で賛同しちゃっている人が悪いな。
自演だろ
オンボ環境なら俺らが思ってるとおりの速さ順で、 GeForce9600GT下なら逆転する って言ってるのだから、何かしらあるんだろ 面白い事象だと思うがねー
それじゃあ俺クロシコの9600GT入れてるんですけどまずいっすねえ
結局のところ逆転現象が起こる理由について誰も指摘できないわけか
ソースもexeもなしで何をどう説明できるんですか。
だから言ったろうに、端からチラ裏レベルの情報なんだから相手にする必要なし ソースコードも出せない怪しげな情報まき散らされると、 まともな初心者さんに迷惑なんですがねぇw
みんなソースを出せと平気で言うけど そんな簡単に出せるもんかね 誰も、使い捨てのテストプログラム作ってる訳じゃないでしょ そこは、非難する部分じゃない
>>358 三角プリミティブ表示にDirectDraw使ったら、D3Dと変わらなかったよ。
ソースは出せないけど、コードは絶対間違ってない!
なんでこんな結果になるか説明して。環境?もちろん俺環境だお!
なんでもいいけどさあ あんまり初心者っぽくない人多いよね
361 :
358 :2009/07/11(土) 22:45:21
>>359 同じ現象になる使い捨てのテストプログラム作って
そのソースとEXEをアップしろよ
色々な要因が絡んでる場合、うまく抜粋してソース出せるとは限らんしな それなりの報告とそれなりの信ぴょう性がありゃとりあえず「本当だとして」アドバイスするよ それが気にくわないならレスしなきゃいい
>>361 簡単に言わないでください。非難…批難イクナイ!!
ボクの計測結果ならいくらでも出します。ほらDirectDrawの方が速くなりました
なんでですか!
…という流れだな
いずれにしろDirectX10ではなくなった。 DirectX11で復活することもないだろう。 過去のAPIの事はもういいじゃないか。 今からエンジン作るって人がDirectX9なんて選択しないし。
正直流れ速いと質問しづらいよ
>>364 え?2ヶ月前からDX9やり始めたんですけどDX10にしといた方がいいのかな?
持ってる本がDX9用だったんでつい・・・
>>368 もちろん最先端を勉強するとかいう目的ならDX10や11のほうが良い
が、実用品を作る(売る同人ゲームとか)目的なら、古い枯れた技術のほうが良い
そもそも10にしたら、XPユーザー全切りだぜ?
過去のAPIの事は〜とか言っちゃう阿呆は気にしないでいいよ。このスレのタイトルすら読めないみたいだし
しっかしとってつけたような質問だな
10でも9でも好きなほうを使えばいい。 どっちみちWindows7が浸透するまで3年くらいはかかるだろうし。
いくら自己レスでも、初心者にDirectX11の勉強を勧ってすげぇな
そうだな・・・まあ興味本位でだから問題ないか ところでボーンのアニメーションを作ってみたいんですけど ID3DXAllocateHierarchy *p_AlllocHrachy; ってやってD3DXLoadMeshHierarchyFromXで渡すとエラー出るんですけどなんでですか? まさかこの辺は自分で作るんですか?
そうだよ
了解 調べてやってみます
DirectX9を最初から勉強するならDirectX10を 最初からやるほうがはるかに簡単だけどな。 DirectX9は細かいルールを覚えていくのが面倒くさい。 一般に公開するなら断然DirectX9だけど。
パーティクルの件でお騒がせしているものです
再現コードができましたのでUPしておきました
ttp://www1.axfc.net/uploader/File/so/26949 パス: particle
です。
中にソースとEXEが入っています。
描画方法をクラスでわけてあり、TypeAがUPを使った方。TypeBがロックして書きこむほうです。
起動するとそれぞれで1000回ほど描画を行い、それぞれのかかった時間をダイアログで表示します。
(1)がUP系、(2)がロックです。
GF9600GTでは下記の結果になります。なぜか後者のほうが断然遅い…。
(1) 2641 ms
(2) 4918 ms
きっとTypeBのほうに何か誤りがあるのだと思うのですが、アドバイスいただけると幸いです。
ちなみに
>>328 になるようにコードを書き直すと、だいたい同じくらいの速さになります。
キーワードが正しくありません
>>378 初心者スレ荒らして楽しい?ほんとに楽しい?
マジネタだったのか
MobilityRadeon9700だけど、 (1) 11849 ms (2) 11959 ms こっちは、ほぼ推測どおりの結果だね。
エラー: このリンクは無効です。 が出るけど荒らし認定されるのかしら
384 :
382 :2009/07/12(日) 01:06:21
試しにリロードしたら早速レスついているし こいつはずっと張り付いているんだろうか…
つながりにくいんじゃない? パスは通ったけど俺も全然ダウンロードできない。
>>377 WRITEONLYで作った頂点バッファに対して読み取りアクセスしてるから遅いんだよ。
そこを修正したら、頂点バッファの方が速くなったよ。
>>387 ありがとうございます。修正ができました。
代入しかしていないつもりでしたが、+=が実質参照していることに気が付けました。
WRITEONLYでも「読める」んですね…。
長々失礼しました。
一応言っておきますが、変なあおりレスとかはつけてません。こちらは質問させていただいている立場ですから。
そもそもVRAMへのアクセスはAGPだと書き込みに対して読み込みが劇的に遅い。 PCIeで改善が図られているが、メインメモリに比べればやはり遅いのでやるべきではない。
御苦労さん 結果を報告してくれる質問者はいつでも歓迎だぞ やっぱム板こそID欲しいよなー
まともな初心者さんに迷惑なんですがねぇ(笑) さすがにもう来ないでくれ(笑) 自己レス(笑) 自演か(笑) エラー: このリンクは無効です。(笑) ほんとに屑が住み着いてるな 屑はさすがにもう来ないで欲しい
ファイルが見つかりません
このスレにクーラーが設置されました。 r──────────┐ | l王三王三王三王三l o==ニヽ | |王三王三王三王三| .| // ゝ 乂━━━━━━━乂_| `-=  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / / / / / / / / / / / / / / / ゴーゴー
解決したからファイル消しちゃったのかな?
DirectXSDKをインストールしてるなら DirectXのControlPanelでランタイムをDebugRuntimeに設定できる。 そうするとWRITEONLYへの読み込みを行った場合に ビデオカードやドライバに関係なくDirectX層でエラーを履いてくれるようになる。 世間に出すようなプログラムの場合は必ずDebugRuntimeでの動作確認をしましょう。
>>394 すいません、解決したということで削除してしまいました
Lockした内容に対し
v.x = 1.0f;
v.x += data[i].x;
という、+=を使っていたのが原因でした
>>397 >DirectXのControlPanelでランタイムをDebugRuntimeに設定できる。
これ知りませんでした。
早速試してみたら、いろいろ細かいエラーが出たのでささっと直せました。
すばらしいですね。入門サイトにはぜひ書いておいて欲しかった…。
良い情報ありがとうございました。
ソース見れないが、あれだけ説明したのに、結局UPも何も関係なかったわけかい。
情報を小出しにするからだよ。一番ダメなパターンだろ。
煽られて終わってもしょうがないのに、変に擁護がつくし、逆に俺が煽られるし。
WRITEONLYの線は
>>306 みて違うと思っていたが、じゃあ実際は別のコードなんだな。
いい加減にしないとこのスレ潰すから。 鬱だ死のうDirectXスレのように
>>400 一通り読んだが乙としかいいようがない。終始まともな回答ついているのねぇ。
原因は実装だからソース見ないと分からないってレスも早期にあるし。
別にスムーズにソースでてきたと思うんだが
>>328 の段階でレスが終わって、その後ソース準備をしてたわけだろ?
単に質問者がいないとこで勝手に煽りあいしてkskしてたのを、質問者のせいにするなよ
再現ソースが出来てから質問しにくるのが最低限の礼儀だろ。 情報を小出しにするとか最悪すぎる。
>>404 別にそんなことはない。勝手に敷居を上げるなよ。
今回の件だって、蓋を開けてみれば、
動的バッファを扱う上でFAQと言えるべきものだった。
個人的には、ソースなんか無くても
証言だけでわかってしかるべきと思う。
まあ、全然わからなかった訳だが。
今回の件WRITEONLYのバッファにREADしてるのが原因なだけだろ。 DebugRuntimeにしてりゃエラーでてたろ。
>>406 誰一人として「Debugランタイムがなんかエラー吐いてないか?」と言っていないわけで
もういいよこの話題
とりあえず次からは
>>1 にDbugRumtimeについて書いておこうぜ
大抵の問題はあれのログ見ればわかる気がする
Windows7でもDX9使える?
DirectX3も動くだろ
tairanaporigondea)4wyd@)4-4fbweuyq@:s@ 表示するときにテクスチャの一部分を選んで貼り付けるにはどうすればいいの?
UVを適切に設定しろ
それは頂点に含まれているので固定です。
描画時に変えられるようにしたいなら、データの時点で変えられるように考慮すべき。 どうしてもプリミティブ情報が確定してからいじりたいというのならシェーダを使う。 (UV座標変更かけるだけならvertex、pixelシェーダどっちでもいいかな?)
データがXファイルしかありません。モデリングツールは買えないので持ってません。 Xファイル読み込み処理は変えられません。レンダリングステートを設定するだけでなんとかさせてください。 …な予感。
いや、テクスチャステージステートで変えられるし 散々既出だよ
┏━━━━━┓ ┏━━━━━┓ ┃┌─┬─┐┃ ┃┌─┬─┐┃ ┏━┛│ │ │┗━┓ ┏━┛│ │ │┗━┓ ┃┌─┼─┼─┼─┐┃ ┃┌─┼─┼─┼─┐┃ ┃│ │ │ │ │┃ ┃│○│ │ │ │┃ ┃├─┼─┼─┼─┤┃ ┃├─┼─┼─┼─┤┃ ┃│ │ │ │ │┗━┛│○│●│ │ │┃ ┃└─┼─┼─┼─┼─┬─┼─┼─┼─┼─┘┃ ┗━┓│○│○│○│○│○│●│ │ │┏━┛ ┃└─┴─┼─┼─┼─┼─┼─┴─┘┃ ┗━━━┓│●│●|●│○│┏━━━┛ ┃├─┼─┼─┼─┤┃ ┏━━━┛│ │●│●│○│┗━━━┓ ┃┌─┬─┼─┼─┼─┼─┼─┬─┐┃ ┏━┛│ │ │ │ │●│○│○│○│┗━┓ ┃┌─┼─┼─┼─┼─┴─┼─┼─┼─┼─┐┃ ┃│ │ │ │ │┏━┓│●│ │ │ │┃ ┃├─┼─┼─┼─┤┃ ┃├─┼─┼─┼─┤┃ ┃│ │ │ │ │┃ ┃│●│●│●│ │┃ ┃└─┼─┼─┼─┘┃ ┃└─┼─┼─┼─┘┃ ┗━┓│ │ │┏━┛ ┗━┓│ │ │┏━┛ ┃└─┴─┘┃ ┃└─┴─┘┃ ┗━━━━━┛ ┗━━━━━┛ Next:○
┏━━━━━┓ ┏━━━━━┓ ┃┌─┬─┐┃ ┃┌─┬─┐┃ ┏━┛│ │ │┗━┓ ┏━┛│ │ │┗━┓ ┃┌─┼─┼─┼─┐┃ ┃┌─┼─┼─┼─┐┃ ┃│ │ │ │ │┃ ┃│○│ │ │ │┃ ┃├─┼─┼─┼─┤┃ ┃├─┼─┼─┼─┤┃ ┃│ │ │ │ │┗━┛│○│○│ │ │┃ ┃└─┼─┼─┼─┼─┬─┼─┼─┼─┼─┘┃ ┗━┓│○│○│○│○│○│●│ │○│┏━┛ ┃└─┴─┼─┼─┼─┼─┼─┴─┘┃ ┗━━━┓│●│●|●│○│┏━━━┛ ┃├─┼─┼─┼─┤┃ ┏━━━┛│ │●│●│○│┗━━━┓ ┃┌─┬─┼─┼─┼─┼─┼─┬─┐┃ ┏━┛│ │ │ │ │●│○│○│○│┗━┓ ┃┌─┼─┼─┼─┼─┴─┼─┼─┼─┼─┐┃ ┃│ │ │ │ │┏━┓│●│ │ │ │┃ ┃├─┼─┼─┼─┤┃ ┃├─┼─┼─┼─┤┃ ┃│ │ │ │ │┃ ┃│●│●│●│ │┃ ┃└─┼─┼─┼─┘┃ ┃└─┼─┼─┼─┘┃ ┗━┓│ │ │┏━┛ ┗━┓│ │ │┏━┛ ┃└─┴─┘┃ ┃└─┴─┘┃ ┗━━━━━┛ ┗━━━━━┛ Next:●
シェーダーって何なんですか? つまり受け取ったデータをどういう風に加工して画面に出力するかっていう 関数の一種なんですか?
ありがとうございます あとシェーダーを書いたとしてGPUによって 表示が違うとかという問題は起こるのでしょうか?
もちろん起こる それにシェーダーをコンパイルしたビデオチップが違うと 同じPCでも表示結果が変わったりする
>>424 それはない。
いちいち突っ込まれることを
書くから荒れる。
ちゃんと作れば同じになるな
そうですか ありがとうございました シェーダーに挑戦してみます
>>425 いや、おれも変わらないと思うんだけど
なぜか変わるんだよね
解るなら説明してくれない?
PC-AとPC-Bで開発してます
まず同じプログラムからPC-AとPC-Bで作った実行結果を比べると
テクスチャの浮動少数の精度のせいなのか微妙に結果に誤差がでます
ただし
PC-Aで作成した実行ファイルをPC-Bで動かした場合
実行結果はPC-Aで確認できるものと一緒
PC-Bでコンパイルしなおすと出来上がる実行結果ははPC-Bのものになる
逆の場合同じ
なんで?
同じ奴じゃあるまいな
Direct3Dはビデオカードによって出力結果が変わるのは常識なのに、 同一だと思っている人間がいることに驚きだ。
Utilities\bin\x86\psa.exe Utilities\bin\x86\fxc.exe のバージョン違いかな?
シェーダーってどうデータを渡して加工するかだけだから コンパイルは関係なくね? まあ精度の点は知らんしGPUそんなにいろいろないからわからないけど
ラデで問題ないものがゲフォで変だったことはあるな
結局
>>426 だったのだけど、本当に見つかりづらかった
変わるのはシェーダのバイナリではなく、 レンダリング時のピクセルの状態
>>430 だから
PC-Aで作った実行ファイルを
PC-Bで動作させた場合に動作がPC-Bに準拠してくれるなら納得なんだけど
なぜか動作はPC-Aで動かした場合と同じになる
これをPC-Bでコンパイルしなおすと
出来上がる実行ファイルはPC-Aのもと違った動作をする
この実行ファイルをPC-Aに持っていくと
動作はPC-Aに準拠したものではなくPC-Bで動作していたときと一緒になる
シェーダーはコンパイル済みじゃなくて.fxファイルに書いてある
いまいち納得できないんだけど
PC-AとPC-BにインストールしてるSDKのバージョンは? 特にpsa.exeのバージョン
シェーダー関係ないのでは? 同じライブラリをリンクしてる?
>>435 fxファイルをコンパイルして出来たエフェクトオブジェクトを
D3DXDisassembleEffectで逆アセンブルして、diffを取ってくれ。
双方に違いがないようなら、話を進めよう。
D3DXのランタイムのDLLが異なるだけだろ。 それをビデオカードのせいだと考える思考回路が、あまりにも馬鹿馬鹿しい。
お前らさ、なんで先日の質問者の(悪い部分だけを)真似した嘘質問にまともにレスしてるの? からかわれてるだけだろ
元々こんな質問ばっかりだぞ? 前はまだ自浄能力があったけど
自浄能力・・・?
^2
SDK2008Nov入れてるんですけど、DirectPlayってなくなったんですか? ヘッダがみつからないんですが..... ネットワーク関係の機能ってどこにあるんですか?
WinSock
8のSDKからヘッダだけひっこぬけばよくね? DirectPlayは8で終了だっけ? サポートとか心配ならおとなしくWinSockとか使えって話なんだろうが セッションとか考えるのだるいし音声セッションとかかなりめんどいし UPNPポートマッピングとか自作するのは資料少なくてかなり泣けるのでまじおすすめしない ただし、WinSockでDirectPlay並のものが実装できるようになるとかなりスキルあがるよ 時間が余ってるならチャレンジしてもいいかもしらん ただ、あくまでゲームつくるのが目的ってなら時間もったいなす DirectInput8だっていまだに使われまくってるから DirectPlay使ったっていいじゃない と思わなくもないが、否定派が多い木がします
DirectPlayはいまいち中途半端な感じがしたが・・・ ロビーサーバーがLinuxとかでもちゃんと通信できたっけ?
今だったらboost.asioを使うのがいいのかな
DirectShowも消えたしなー
消えたんだw何になったの?
DirectShowは消えたのではなく、Platform SDK入りをした。
DirectShowの設計はかなり酷い ソースをメモリから転送するだけでソースフィルタから書けってどんだけ
阿良々木 暦のプログラマブルコントローラーの配線図 阿良々木 暦 「絶望した…。自分の配線図でさえも、きっちりし過ぎて何が何だか分からないことに絶望した…。」 阿良々木 暦の変直切り替えは、キハ110系と同様、自動で最適なタイミングで切り替えていきますので、 かなり複雑な電子制御方式であり、プログラマブルコントローラーで自動的にアイドル指令を出すような設計です。
455 :
デフォルトの名無しさん :2009/07/16(木) 15:29:03
市販のゲームって.xファイルとかが置いてなくてアプリケーション内に組み込んであるじゃないですか あれどうやってやるんですか?
いくらでもやりようはあると思うが。 リソースに入れて一連のAPIで読みだしてもいいし。
リソースに入れるにしろxファイルは使ってないわな
普通は自前のオリジナルフォーマット使うだろう。 Xファイルは悪くは無いがいかんせん古い。 今は物理データやコリジョンデータやシェーダーパラメーター埋められないとなー。
時代はVRML
Xファイルが有用だとは言わないが、 テンプレートを追加すればいくらでも カスタムデータを埋め込むことは可能なんだが、 埋められないとか言う前に仕様ぐらい確認して欲しいところだ。
>>460 あんなのに埋めこんでどーする
出力と入力を自前で書くハメになるから、それなら結局自前フォーマットで構わん
462 :
デフォルトの名無しさん :2009/07/16(木) 16:57:08
デバイス->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); これやるとテクスチャとテクスチャの隙間が白く見えるようになってしまった。どうして?
>>461 よくわからない理屈だな
結局、その主張に
なにか根拠や理由がある訳じゃないんだね
というかあの質問は初心者のものだろ? つまりexeファイルだけ出力させてスッキリさせたいって話であって Xファイルの仕様云々じゃないと思うけど
>>461 有用かどうかはさておき、Xファイルの仕様として追加できると言ってるのに、
埋め込んでどうするとか意味不明なんだけど。
質問者は、「とか」って言ってるからxファイルに限らないのだろう
だよなぁ ぽまいら脱線しすぎなんだよ モデルファイルとか音声ファイルをEXEの中に入れてしまいたい系の質問じゃないのか?
Xファイルに3Dデータを追加できるって主張は、 テキストファイルに3Dデータを追加できるって主張とほぼ同義だろ Xファイルを使うことが目的でない限り、何の意味もないわ
まあリソース埋め込みでいいのなら、カスタムリソースでググればいいかな。 使うのはFineResource、LoadResource、LockResource
>Xファイルは悪くは無いがいかんせん古い。 >今は物理データやコリジョンデータやシェーダーパラメーター埋められないとなー。 単にこれがアホな発言だというだけ。 わざわざデータを入れることに意味があるかどうかの是非に、話をすり替える必要はない。 これで無知を晒す前に確認することを学んだのならそれでいい。
まあXFileまわりも せっかくDirect3Dのコーポネントなら、 D3Dのリソースを直でシリアライズするような 機能があってもよかったと思うな。 なんだか知らんが、MSがRMと一緒に 即切りしやがったからな。
Xファイルは使わないとして、 初心者は何でボーンの木構造やアニメーション情報をやり取りすれば良いの? 素人の俺は、ToyStudioみたいなのにするのかなと想像してる
そもそもモデリングソフトは何を使用しているのかという問題がある。 まともにやろうとすると覚悟が必要な金額になる。
とりあえず趣味のレベルだからメタセコイアで XSIはちょっと重くて無理
自分のゲームにどうやってモデリングデータを持って行くか話してる時に そのソフトを同列に書くってどういう事? 重いとかそう言う事じゃねーだろ
うるさいな
実際個人で趣味程度につくるぶんにはメタセコ程度が価格的に限界でつ 別にCGやりたいわけじゃなくてあくまでゲームつくりたいだけだからなー メタセコにはモーション作る機能追加してほしいぜ で、Xファイルダメとか言ってるやつは実際どうしてるのかくらい書いてくれないと 参考にもならないおっおっお
初心者がツール名をあげて、話を誘導するのかと思ったが ただの厨だったでござる 同じメタセコユーザーなので、MIKOTOやkeynote等のファイルリーダーを 作るとか、既にあるなら知りたかったな
どーでもいいけどファイル仕様で騒ぐなよ ここ初心者スレよー 初心者には難しくてわからんよー いや俺なんだけどね それよりさあID3DXAllocateHierarchyまわり面倒クセー やっぱりアニメーションは自分で何とかしようかなあ・・・
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J <やっぱりアニメーションは自分で何とかしようかなあ・・・ / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ / なんというループ
>>474 メタセコイアもXSIも独自形式で書き出すプラグインとか作るのですか?
昔アニメーションを別ファイルに書き込んでそれを読み込んで 手足を配置って方法取ってたけどいろいろめんどくさくてやめた
483 :
249 :2009/07/16(木) 22:27:59
>>251 レスめちゃくちゃ遅れてすいません
自分でいろいろ試してみました。
1.StretchRect
pSourceSurfaceにIDirect3DDevice9::GetBackBufferで取得したサーフェイスを指定
pDestSurfaceにCreateOffscreenPlainSurfaceで作ったサーフェイスを指定
領域は二つともNULL、フィルタはD3DTEXF_NONE
→D3DERR_INVALIDCALLが返る
2.pDestSurfaceをCreateRenderTargetで作ったサーフェイスに変える
転送先のサーフェイスは上記のメソッドで作ってはいけないようだったので。
→CreateRenderTargetを実行時に強制終了
CreateRenderTarget(w, h, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, 0, true, &lpDestSurface, NULL)
3.StretchRectではなくGetRenderTargetDataを使う
→何とかコピーに成功
でもStretchRectと比べて制限が多いですし、できればStretchRectの方を使いたいです。
なぜCreateRenderTargetで強制終了するんでしょうか?何かおかしな指定してるんでしょうか・・
デバッグランタイムにすれば、原因わかるんじゃないの 失敗するときは、大抵ログ吐いてくれる
サンプルを落としてコンパイル→当然成功 少し書き加える→エラー 書き加えたところを削除して元に戻す→未解決の外部シンボルが大量に ふ ざ け ん な 何で元に戻したら悪化するんだよ糞が・・・
やっとできた・・・ 追加の依存ファイルに追加してなかったのが原因か・・・ これならだいぶ前にやったはずのに・・・ でもとりあえずコンパイルできるようになってよかった 8時間ぐらいかかったけどw しかし一度エラーが出たら元に戻してもエラーが出るというのは謎だ
Xファイルを自前の形式に変換してゲーム中に表示させたいので質問です。 AnimationKeyの番号が0で回転を表しているのですが floatが四つ並んでいます。 どうやら調べるとクオータニオンを使って変換するらしいのですが xyzwでクオータニオンってDirectXの関数で作れますか? 幾ら調べても見逃しているのか見つかりません。 また他にもframeに番号1(拡縮)と2(移動)があるのですが これ 拡縮行列x回転行列x移動行列の結果を影響のある頂点にかければいいのでしょうか?
d3dxのクオータニオン構造体あるだろ あれの要素がxyzwだからそのまま放り込めばおk
491 :
489 :2009/07/17(金) 09:50:27
盲点でした…。 クオータニオンってもっと複雑な物かと思ったいたら 中身はxyzwしかなかったのですね…。 ありがとうございます。
盲点でもなんでもねえ
>>483 StretchRectはさまざまな制限があるけど、MSDNは確認した?
めくら撃ちしたって時間の無駄だよ。
拡大・縮小がダメな場合もあるから領域指定がNULLなのも怪しい。
ちゃんと動くまではちゃんと指定してあげること。
DirectX関係ないな
あ、ごめん、リロードしてなかった
スキンメッシュで手とか足のボーンの位置とか傾きを取得するにはどうしたらいいですか?
該当フレームの行列を確認すればいい
頂点データを取得したいんですが D3DXLoadMeshFromXでLPD3DXMESH *ppMeshを取得して DWORD FVFSIZE; LPDIRECT3DVERTEXBUFFER9 ppVB; BYTE *pointVec; ppMesh->GetVertexBuffer(&ppVB); FVFSIZE=D3DXGetFVFVertexSize(ppMesh->GetFVF()); ppVB->Lock(0,0,(void**)&pointVec,0); とやってこのあとどうすれば頂点データを一つずつ取得できますか? FVFSIZEの分だけpointVecに足してやればいいんでしょうか?
フォーマット通りに並んでいるだけなんだから、 順番に取り出していけばいいだけ。
DirectX9のSDKで最新はどれですか?
ぼくしょうがくせいだけど それはDirectXデベロッパーセンターにいけばわかることくらいわかるよ
Xファイルのデータでボーンアニメーションって出来ますか?
うん
Xファイルをサービス関数を使わず独自の形式で読み取りたいです。 そこでモーションつきのモデルを読み込みたいのですがうまくいきません。 まずメッシュの頂点データと法線データとUVデータは全て読み込みました。 ちなみにメッシュは1メッシュです。マテリアル等は無視しています。 質問@ 「SkinWeights」の項目にそのフレームが影響する頂点とそのウエイトが定義されているのですが その一番最後に4x4行列があるんですがこれがよくわかりません。 これは親子関係を考慮しつつ各頂点にかければいいのですよね? 質問A 入れ子によって親子関係を定義している部分がありますが そこにあるFrameTransformMatrixはボーンアニメーションする場合は 一切無視していいのでしょうか? 調べてみるとアニメーションの概念ができる前から存在すると聞きました。 質問B 最後に「AnimationSet」の項目に ローテーション・スケール・トランスレーションが各フレーム毎にデータがあるんですが スケール行列xローテーション行列xトランスレーション行列で1つにまとめたあとに 影響する頂点にかければいいのですよね? 質問C これらの事をしてもときちんと動かないのですが何か抜けている点はあるでしょうか?
質問@ いいえ ボーンの行列 = ボーンのオフセット行列 * 親子関係によって積算した後のフレーム行列 質問A はい アニメーションとそれは相互排他 質問B はい 質問C わかりません
まずは、スキンメッシュじゃなくて 普通のアニメーションするメッシュが 正しく動作するか確認して
質問A 相互排他ではありません。 たとえばアニメーションに位置の情報が無い場合は そこから位置だけを抽出する必要があります。 当然アニメーションに回転が無い場合も回転だけ そこから抽出する必要があります。
>>507 その発想はなかった。確かにアニメーションデータに位置の情報がなければ(そんなXファイルつくるなw)引用する必要がでてくるな。
俺は、AのFrameTransformMatrixは「デフォルトポーズ」だと認識してるぜ
回転と移動と伸縮を別に管理してるとどれか情報がないって事はよくあるけどな D3DXのはマトリックスしか持ってないんだっけ
510 :
505 :2009/07/21(火) 14:46:52
>>507 FrameTransformMatrixが相互排他であるかないかは
多分ドキュメント類には記述はなく、未定義だろうから、
DXSDK関連のソースでもみて結論付ける必要があるだろう。
個人的には、
>>507 は十分わかるんだが
Xfileでアニメーションする際には、必ずFrameTransformMatrixの
分解が必要になる訳で、ちょっとナンセンスかなと思うな。
例えば、フレームの移動が必要ないなら、アニメキーは無しに、
全編を通して固定位置にしたいなら、キーを1つだけ用意する。
これで対応出来るし、こっちの方がスマートだと思う。
ステンシルバッファ使えば出来なくもない
>>511 >真ん中がくりぬかれて描画されますが
は?
ROPなんてゲーム作るうえで誰も必要としてないから
XORな描画ステータスあったらいけそう
わざわざ5頂点でやる意味がわからない
出来るかどうか聞いてるのに 文句言ってるやつって何なの?
まぁ文句出る気持ちも分かるけど
>>511 DrawPrimitiveでやるなら、まずテセレーション(面倒だけどネットに情報あり)して三角形に分解後、
それぞれの三角形を塗るかどうか判定(三角形内部から適当に線を延ばし、他の辺と交わる回数が奇数なら描画)
していくしかないね。
しっかしXファイルのことなんてレスつかないだろうから、帰ったらレスしようと思ったら、意外に皆詳しいなw
519 :
504 :2009/07/21(火) 20:58:41
皆さんありがとうございます 505さんの言うボーンの行列 = ボーンのオフセット行列 * 親子関係によって積算した後のフレーム行列 が何をさすかピンときませんががんばって見ます
>>517 明らかに馬鹿でウザイから
まず具体的にやりたいことから言えって感じ
詳しく聞くとそんな仕様まったく必要ないのにくだらないもの探してるってオチだと思う
521 :
483 :2009/07/21(火) 23:43:40
>>493 レスありがとうございます、ですが領域はNULLでもいいみたいです。
CreateOffscreenPlainSurfaceとGetRenderTargetを使ったコードを
そのままCreateRenderTargetとStretchRectを使ったコードにしたら動きました!
しかしこれが最も速く画像を取得する方法なんでしょうか。
GetRenderTargetData→転送先サーフェイスからGetDC、BitBlt
StretchRect→転送先サーフェイスからGetDC、BitBlt
GetRenderTargetDataは遅いそうですが、StretchRectはそれより速いのか分かりません。
>>512 が早々に適格なこと言ってると思うんだが
まあ実際、面倒ならやらないわ―ってレベルだろ
自分の目からディスプレイの上端までと目から下端までの間の角度を測ってみ 90度もある? (あるとしたら、どれだけディスプレイに目を近づけてるんだ) 不自然だから歪んで見えるのでは?
ちゃんとラジアン角度にしてるか? D3DXToRadian(90);
>>525 もちろんしてます.
SDKのサンプルも90度に設定して動かすとやはり歪んで見えます
質問です。 Xfileを表示してキーボードでそれを動かし、当たりがあったら文字を表示するというプログラムを作ったのですが。 普通に起動させると動作が遅いのですが、メディアプレイヤーを起動している時だけはなぜか動作が速くなります。 なぜこんなことが起こるのか教えてください
timeBeginPeriod メディアプレイヤー でぐぐってみれば、理由を考察してるサイトがいくつか見つかる
一応解決しました。貴重な情報ありがとうございました
ねーよ。 そもそも24Bitの画面モードが選べるような ビデオカードが現存してた事に驚いた。
24ってマイナーじゃないの?存在を初めて知った
>>533 >>534 早速のレスありがとうございます。
実は配布先PCは特殊な環境で16Bit/24Bitのみ選択可、
通常は24Bitで動作しております。
すでに客先で動作しているPCであり、
客先は全国にある為、
インストールの為、画面設定を変更するのは難しいです。
やはり24Bitで動作させるのは難しいのですね。
最悪、DirectXではなく、他の描画ルーチンを使用することも考えています。
24はVRAMが少量しかなかった時代に
少ないメモリでフルカラー表現するために存在した。
VRAMが豊富になって32Bitが使えるようになったら滅んだ。
24Bitって3Byte単位のアクセスだから速度がすげー遅かったし。
>>535 DirectX7か8のどっちかならいけるはず。
無論速度は度外視な。
どうせならOpenGLってどうかな?(いや、よくしらんけどw)
その前にビデオカードの具体的な製品名を明らかにしろよ。 なんでいちいち情報を小出しにするんだ?
それ大事か? しかし24なんて使ったことがないから可とも不可ともいいようがない・・・
D3D9は確かにディスプレイフォーマット24bitは サポートしてないみたいだけど、 それってFullScreenだけじゃなく Windowモードもそうなの?
MatroxのG200とかは24Bitモードあったぜ
どうやらVoodoo Bansheeあたりも24bitあったみたい。 しかし、Bansheeは良いカードだったw
ディスプレイモードの列挙が通らなくて強制終了だな 完全にサポートしてないと動かない
GF2MX400とかも普通に24bitモードあったぞ。 てか、24bitがマイナーだと初めて知ったw 当時、32bitこそ「無駄遣いだなぁ。24bitでフルカラー表現できるのに、なんだこの糞異端ボード」とか思ってた。
Direct3Dを使わないのが前提なら24bit対応のビデオカードは多い
でもわざわざ24bitを使う理由ってなに?
質問者は、個人制作で自宅の24bit環境が普通だと思った メーカーがどうして用意したかは、上に散々かいてある 昔のPCI
815あたりの内蔵グラフィック機能だと、32bppが無いんじゃなかったっけ? 16/24しか選択できなくて、3D機能が使えるのは16だけみたいな感じ。
スパロボのようなゲームを作っているのですが、 マウスで入力するために入力関係に特化したようなサイトとかありますか?
>>550 言いたいことはわからんでもないけどとりあえず日本語で(ry
たぶん碁盤の目のようなフィールド上でクリックしたら コマンドが出るようにとかしたいんだろうけど DirectXの要素はマウスの座標取得ぐらいしかねえじゃん
>>551 すいません、要するにスパロボのフィールド画面を作りたいんです
>>552 そうです、まさにそんな感じです
セルの上にマウスを置いたらセルを囲み、右クリック等でコマンドが出る・・等の構成にしたいのです
ゲームのサイト色々見てるのですが、なかなか目的のものが見つからないのですよ
とりあえずマウスの座標取得から始めてみますね
作ったゲームのテストたのんだ友人の中の一人だけがエラーで止まるので いったい何が悪いんだと調べてみたらフォント描画が原因だった \r\nを含んだ文字列描画すると原因不明のエラー警告で落ちる \r\nを\nにしたらエラーでなくなったが、一体なにが悪いのかよくわかりませんでつた OSもDirectXランタイムバージョンも他の正常に動作してるPCと同じでつ
>>554 DirectXとOSのバージョンと描画方法は何ですか?
プログラム中の文字列の改行コードにCRLFって使った事無いなw テキストに落とす時は別だけど
>>554 落ちた1台が例外なんじゃなくて、
他のPCではたまたま動いたってだけの話だろうたぶん
555は偉いなぁ…真似できん
質問です DIRECTXで作られた質の高いフリーゲームってありますか?
ここはプログラムを作ることに関しての板ですゲームサロンにでもいってください
プログラマブルシェーダでのSetTextureについて質問です。 D3DXEffect effects[100]; for(int i = 0; i < 100; ++i) { effects[i].SetTexture("DecaleTex", textures[i]); } と、それぞれのエフェクトにそれぞれ別のテクスチャーをセットするとします。 これで、すべてのエフェクトが予想通りに動いているのは確認済みです。 このときに疑問が湧いたのですが、d3ddevice->SetTexture相当のことはいつ行われているのでしょうか? 1)effect[0]を使って描画 2)effect[0]を使って描画 3)effect[1]を使って描画 4)effect[1]を使って描画 とやった場合、2→3のところで内部的に行われているのでしょうか? となると 1)effect[0]を使って描画 2)effect[1]を使って描画 3)effect[0]を使って描画 4)effect[1]を使って描画 とやると、d3ddevice->SetTextureのコストという面では2倍コストがかかってしまっているのでしょうか? そもそも全てのエフェクトにテクスチャをあらかじめセットしてまわっておく。というのは正しいやり方なのでしょうか? 「d3ddevice->SetTextureはなるべく減らすように」と昔教えられたもので (実際に、パーティクルなどの表示で切り替えまくると遅かったし) かなり気になっています。 アドバイスいただければと思います。よろしくお願いします。
DX9ならBeginPassとCommitChanges DX10ならApply それ以外に公開情報あったっけ
質問です。 d3d9.hの読み込みより前に #define D3D_DEBUG_INFO を設定することで、デバッグウインドウ上で情報が表示されるということで実践してみたのですが、 どう考えてもおかしな数値が入っているように表示されます。 これは皆さんの環境でそうなのでしょうか? 単なるD3Dの初期化>D3Dデバイスの中身をデバッグウインドウで見る>数値とかがぐちゃぐちゃ なのですが…。 環境はVS2008Express Microsoft DirectX SDK (March 2008) を使っています。
君のプログラムの文字セットの設定は何だろう? ちなみにIDirect3DTexture9::NameはLPCWSTRだ。
マウスをクリックしたとき、どのオブジェクトをクリックしたかというのはどういうコードを書けばよいんでしょうか それとも、マウスをクリックした時にその地点にオブジェクトがあるかないかを総当りで調べるものなのでしょうか?
スクリーン座標をsx,syとする。 スクリーン座標の手前(sx,sy,0) 奥(sx,sy,1) を3D空間の座標に変換する (=3D空間の座標をスクリーン座標にする変換の逆) 2点を結ぶ直線と最初に交差したオブジェクトを選択。 総当りで問題なくOKなら総当り。 総当りでは重いならばケースバイケースで効率的な方法を考える。
>>566 直線だけだと漏れが出ないか?
四角錐じゃないと。
>>563 について自己解決です
注
オブジェクトのプロパティ名が表示されますが、この値はデバッグのランタイムが有効な場合のみ正確です。リテール ランタイムに対して実行するときは、値は無効です。
とありました。
DirectX Control PanelからUseDebugVersionOfDirect3D9 を選んだところきちんと値が見られるようになりました
570 :
デフォルトの名無しさん :2009/07/25(土) 13:52:15
D3DXIntersectを使って当たり判定をしてる人がいましたらご教授願います。 表示した3dモデルに対して現在一体にしか当たり判定が有効になっていません。 複数のモデルに対して当たり判定を有効にするには何か特別な仕掛けをしていますか?
自分で組め
まともなゲームならほとんどすべて、 詳細な当たり判定より先におおざっぱで高速な判定をして 比較するオブジェクトの数を減らす。 最終的には、D3DXIntersectだろうが自作だろうが 当たり判定の必要な回数だけ繰り返す。
573 :
デフォルトの名無しさん :2009/07/25(土) 21:14:18
レスありがとうございます!
このスレの70%はゲー専生で構成されているとかいないとか
そんなことはない。 大学にも行かず浪人にもなれず就職もしない人は実社会では多数派でもないし ゲーム業界内でも少ないだろう。2流3流大卒がほとんど。
数学とかそこらは、中学レベルだと感じるな。
というかそんな高度な知識がなくても組めるし まあ効率とかを考えるといろいろむずかしくなるけれども
578 :
デフォルトの名無しさん :2009/07/28(火) 07:57:06
今、線分とメッシュとの当たり判定を作っています。 中身は線分と三角形との当たり判定を行っているのですが、 そのために必要な三角ポリゴンデータを、 DirectXのメッシュデータから取得する方法がわかりません。 頂点バッファのロックメソッドから、頂点データへの先頭アドレスを取得し そのアドレスから12byteずつずらしながら、無理やり三角ポリゴン(と仮定したデータ)を取得し 当たり判定させてみましたが、途中から頂点のデータが「3.587e-043#DEN」などと壊れるようです。 ご存じの方がいらっしゃれば、ご教授よろしくお願いします。
>>578 空間上の特定の点がポリゴンの内包する閉空間状に存在するか(要するに当たり判定)は
計算幾何学の分野で、一応n log nのオーダーで出ることは知られているけど
計算が死ねるのでよしたほうがいい。
大学の研究レベルでやるならともかく、ゲームでやるなら質点同士の運動と考えれば十分なはず。
581 :
デフォルトの名無しさん :2009/07/28(火) 08:28:13
>>579 レスありがとうございます。
線分と三角形の当たり判定は、テストデータで計算出来ていることは確認しています。
ですので、知りたいのはポリゴンデータの取得なのです。
わざわざレスくださったのに申し訳ないです。
582 :
デフォルトの名無しさん :2009/07/28(火) 08:31:38
>>579 すいません、読み違えてました。
Xファイルで入力してるので、問題ないと思っているのですが
無理でしょうか?
>>578 12byteの根拠は?
頂点データにはxyz以外も含まれていると思うので、12byteではないと思うが。
ID3DXBaseMesh::GetFVFでメッシュのFVFを取得してD3DXGetFVFVertexSizeで
頂点データのサイズを取得するか、ID3DXBaseMesh::CloneMeshFVFを使って
都合のいい頂点フォーマットに変換してから扱うのがいいかと。
最近DirectXを勉強しはじめました。 初心者丸出しですが、質問させてください。 DirectXで2Dを扱う場合、Spriteを使用する方法と 座標変換済み頂点を使用する方法があると知りました。 また、座標変換済み頂点を使う方が処理が早いという書き込みも チラっとみたのですが詳しく書かれておらず、把握している程度です。 質問は @Spriteか座標変換済み頂点のどちらを使用すれば処理が早いか。 ASpriteと座標変換済み頂点の両方の利点・欠点。 よろしくお願いします。
スプライトというのは、本来のDirectXの姿を隠して ユーザが扱いやすいようにラップしているだけで、 最終的に頂点を組み立てて描画するのは同じ ラップしているオーバーヘッドのぶん、処理が遅いかもね
>>584 D3DXSprite自身が、内部的に座標変換済頂点(rhw)を使ってるんだが、どうよ?
単体の画像を何枚か扱う程度ならこのままでもいいが、小さなチップを大量に描画するようなら
通常の頂点バッファ(Position)を使うことを考えた方がいい。
DirectXにSpriteなど無い
D3DXSPRITEなら定数として存在するが、D3DXSpriteなど無い
589 :
デフォルトの名無しさん :2009/07/28(火) 13:39:16
>>583 D3DXGetFVFVertexSize( mesh.pmesh->GetFVF() );
として取得したところ、返された数値は12でした。
ですので12byteと判断しているのですが……。
もし不都合があれば教えてください。
よろしくお願いします。
590 :
584 :2009/07/28(火) 13:50:35
流体力学研究所とかいうとこを参照してみては?
>>589 途中から?それって頂点データを超えて取得してるんじゃないの?
GetNumFacesとかGetNumVertices使ってる?
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | | | /  ̄ ̄ ̄ ̄ /_____ / また旅に出ます /ヽ__// / / / / / 探さないで下さい / / / / ____ / / / / / / / / 光 圀 / / /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/ / / のパターンじゃないんだな
594 :
デフォルトの名無しさん :2009/07/28(火) 21:15:24
pvertex + fvfsize らめぇぇぇぇぇ
あれ?そこだめなの? 俺は v1=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[0])); v2=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[1])); v3=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[2])); ってやってるけど問題ないぞ
597 :
594 :2009/07/29(水) 03:29:12
>>595 試しに
pvertex[*(pindex+i)];と配列でアクセスしたら幸せになりました。
理由はわかりません。
今回わかったことは、頂点バッファ内に「三角形ポリゴン数×3」個の頂点が格納されているわけではないので
インデックスバッファも使ってアクセスしないときちんと読み取れないということでした。
凸凹の大きいモデルを使った場合、ポリゴンの読み間違いが起こると、Hitが抜けなかったり、
本来あるはずない場所でHitが出たりなどという現象が起こるのは当然でしょう。
しかし、今回の問題は読み込んだ数値自体がおかしくなっていたことでした。
明らかにストライドの量がおかしかったんだと思いますが、何が理由かよくわかりません。
>>596 私の環境でも結果は駄目でした。
突き抜けた穴のあいたポリゴンを使用してテストしていますが、
途中でHitが出てしまいます。
本当に助かりました。
協力してくださった方、ありがとうございました。
(pvertex + 0) の次の頂点は (pvertex + 1)なんだぜ
poly.v[0] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-2))); poly.v[1] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-1))); poly.v[2] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-0))); こうするか、 もしくは最初からpvertexをBYTE*で宣言すればOK
600 :
594 :2009/07/29(水) 03:50:17
>>599 動作確認出来ました。
pvertexがD3DXVECTOR3*型だったから駄目だったんですね。
ポインタのアドレスって、どんな型であろうと変わらないかと思っていました。
ポインタのアドレスを弄るときはchar*なわけですね。
すごく助かりました。
今度C言語の参考書よみなおします。
初心的質問ですみません。 DirectXを使っているプログラム内でwavを再生させるにはどうすればよいのでしょうか? ほとんどのところでdmusici.hを使えとなっているのですが、ヘッダーをインクルードしても見あたらないというので調べたところ廃止(?)になったとかで書かれていて いくつか調べたのですが、ほとんどのところがdmusici.hを使ってでのやり方なので、解らずじまいです。 現在の再生方法をおしえていただけないでしょうか?
おとなしくDirectSoundを使ったほうがいい
普通にXAudio2使えよ
XBox360の市場が壊滅状態でもXAudio2はヤバくないんですか?
実際のところ、X〜〜 ってどうなんでしょう。 XAudio2って言うほどまともとは思えないんですが。
失礼します。 directx_mar2009_redist.exeをCドライブにインスコしようとするのですが、 必ず半分ぐらい進んだところでゲージが巻き戻り、結局右端までたどり着かず 途中で終了してしまうのです。一体どういうことなのでしょうか
炎や爆発、煙などのエフェクトをビルボードを大量に出して 描画しようと思っているのですが、どうすれば高速に描画できますか。
現状のエフェクトでどんな処理をやっているのかが分からないので、 より高速な方法について答えようにも答えることができません。
大量に出すのをやめる
より高速かどうかは置いといて、 最も早いと思われる描画方法を教えてください。
マジレスすると 視錐台クリップが最重要だな 次にその中に入ってしまったものをまとめて描画だな あらかじめDrawPrimitiveにぶち込んでしまうとクリッピングされないから ある程度の塊でおおざっぱな判定でもするといいよ なんにせよクリップ方法が最重要 これでしっかり省けば余計な最適化いらない場合のが多いよ
>>610 それはいつでもどこもでネタでもなんでもなく「描画しない」ってのが最速
>>611 まとめて描画とは、Zsortをして
板ポリ(2ポリ4頂点)×出す量 を毎フレーム描画
ということですか?
>>612 描画しなかったら私のも速くなります。
しかしビルボードをたくさん描画すると重くなるのです。
やめろよ また不毛な議論が始まるぞ せめてどうやってるのかも書かない奴に 答えてどうする
>>614 カメラ空間でのZ値でZsortして、板ポリ一個一個毎フレーム
逆行列作る
worldViewProjectionMatrix作る
effect->SetMatrix
でセットし
effect->setTechnique
effect->Begin
effect->BeginPass
effect->setTexture
effect->CommitChanges
ここでdeclarationをセットし
DrawIndexedPrimitive((D3DPT_TRIANGLELIST....);
effect->EndPass
effect->end
と普通にやっています。
>>613 その前にクリッピングそれができないなら気にしなくていい
>>616 そうですか、今回作るゲームが引いた視点なので
結構、というかほとんど視錐台に入るんですよね…
特殊な条件、爆発の煙や湿原の霧でパーティクルが数百個くらい普通に出てるような状況。 ポリゴンを自前で座標変換後したあとにバッファにためておいて、バケツソートで数個のブロックに分けて描画とか。
>>618 >ポリゴンを自前で座標変換後したあとにバッファにためておいて、
>バケツソートで数個のブロックに分けて描画とか。
ちょっと良く分からなかったのですが、
座標変換は存在するすべてのビルボードパーティクルに対して行い(頂点座標を書き換えるのでなくてワールド座標)
それらビルボード一枚一枚をzソートするクラスに溜めています。
そしてzソートし、一気に一枚一枚描画しています。
ブロックごとに分けて描画するとなると
ブロック内のz値の順番はうまくいきますが
ブロックごとのz値の順番がおかしくなりませんか?
ソートした後で分割
もしかしてポリゴン1枚づつDrawPrimitveしてるの
そうです。
そりゃないわ。 炎を100個のビルボで表現しているとするなら、その100個は1回のDrawPrimitiveで描画してしまいなさい。 ところで、加算合成なら前後関係をソートする必要がないのは知ってるか? 半透明にしても、ソートがてきとーでも、そうそうばれないからあまり気にするな。 炎単位でソートするくらいで十分。ビルボ1つ単位でソートしてたらすさまじいことになっちまうぜ。
>>624 >炎を100個のビルボで表現しているとするなら、その100個は1回のDrawPrimitiveで描画してしまいなさい。
いったいどうやるんですか?
頂点バッファに全ビルボードの移動後の頂点を入れておくとかですか?
そうだとすると、フレームによってビルボードの数が変わるので
毎フレーム頂点バッファを作りなおさなくてはいけなくなりませんか?
全加算なら単純に足すだけですから、炎とかならいいと思いますが
ミサイルなどの手前から奥に飛んでいく煙を表現する場合の線形合成は(今回使います)
ソートは必須です。
しかもいくつもミサイルが飛んでいる場合それらの煙単位でソートしては
煙1と煙2が重なった場合板ポリの輪郭が見えてしまいます。
なので煙全部でソートしないとうまくいかないんです。
ここで以前DrawPrimitiveUPや動的頂点バッファの話をしてたが、 まさに枚フレーム書き換えるような頂点のためだよ
>>625 >頂点バッファに全ビルボードの移動後の頂点を入れておくとかですか?
それでOK。
頂点バッファを毎フレーム「作り直す」のはつらいので、500ビルボード分作る。
MSのヘルプによると、一回のDrawPrimitiveでは1000ポリくらいが適切だということなので、ビルボは三角形二つだから500ビルボード分ね。
ミサイルの煙を半透明でやるのね。OK。
「気にすんな」でOK
とりあえず試してみ。前後関係が狂っててもまったく気にならないから。
「気にならない」正確さより、「気になる」処理落ちを防ぐのを優先。
>煙1と煙2が重なった場合板ポリの輪郭が見えてしまいます。
半透明の物体を描くときは、Zバッファへの書き込みをOFFにするべき。
そうすればこの現象は起きないよ
>頂点バッファを毎フレーム「作り直す」のはつらいので、500ビルボード分作る。 500ビルボード分の大きさで作る。のほうがわかりやすかったね。補足。 描画するたびに中身を書き換えて使うべし。 ロックする際D3DLOCK_DISCARDを指定すれば、ロック待ちも発生しないので早いぞ。
>>626 毎フレーム書き換えるのは頂点バッファをLock,UnLockして書き換えるより
頂点シェーダでやったほうが高速だと思ってたので、すべて頂点シェーダでやっています。
それはスキンメッシュのスキニングをシェーダでやったほうが
何倍も高速だったのでそう思っています。
DrawIndexedPrimitiveを何回も呼ぶより
バッファ作ってLockして書き換えたほうが速いということですか?
上のほうで言ってたことは
結局はDrawIndexedPrimitiveもUPも大して速度は変わらないという結論ですよね。
>DrawIndexedPrimitiveを何回も呼ぶより >バッファ作ってLockして書き換えたほうが速いということですか? 書き換えたほうが速い。 というのも、DrawIndexedPrimitiveの呼び出しオーバーヘッドは遅いので。 頂点シェーダでやると高速化するのは確かにそうだが、やるなら281法をやることになる。 確かにID3DXEffect::SetVectorArray()で座標情報を渡すのが大抵のグラボで最速。 ただ、定数レジスタの数の制限を考えるに1回につき250ビルボ程度しか描画できない。 あとは場合によりベターな方法は変わる。 まとめて描画する単位が250ビルボ以下ならこちらでいいと思われ。
固定的な頂点バッファとは別に、毎フレーム書き換わるデータ向けの動的頂点バッファがあるの。 その違いを分かってないから、スキンメッシュとの比較検証も、効率悪いやり方でやった場合の結果にすぎない。
>>630 複数の頂点情報ストリームを登録しておいて、片側を毎回書き換えるという方法が考えられるな。
(で、VertexShaderで合算する)
計算がいくらか楽になるかもしれない。どれくらい速度が変わるかは試してみないと分からないけど。
とりあえず、281法含めて色々実測した身としては、 UPだろうがUPじゃなかろうが、頂点シェーダを使う方法だろうが 「沢山のビルボードを、まとめて一回のDrawIndexedPrimitive*で描画する」という基本を守っている限り、 速度誤差は0.1%にも満たないということだ。 小難しいことを考えるが面倒なら、DrawIndexedPrimitiveUP使っておくといいよ。 (レガシー関数だから嫌というこだわりがなければ。ね) 本気で速度の差はほっっっっっとんどでないから。 まぁ、流石マイクロソフト。DrawIndexedPrimitiveUPの中身もちゃんと最適化されてるんだなといったところ。
>>627 >一回のDrawPrimitiveでは1000ポリくらいが適切
それは知りませんでした。
>半透明の物体を描くときは、Zバッファへの書き込みをOFFにするべき。
>そうすればこの現象は起きないよ
そうですよね、なるほど!
>>630 >書き換えたほうが速い。
>というのも、DrawIndexedPrimitiveの呼び出しオーバーヘッドは遅いので。
そうなのですか。
>>631 Lockして書き込む際のD3DLOCKの種類のことですよね?
ここはよくわかっていませんでした。
D3DLOCK_NOSYSLOCKを指定していました。
Lockの際に、D3DLOCK_DISCARDを指定すれば動的頂点バッファになるということですね。
CreateVertexBufferの第二引数はD3DUSAGE_WRITEONLYでOKですか?
いろいろやり方が見えてきたので早速試してみたいと思います。
ありがとうございました。
WRITEONLYが適切。 だけどこのスレで「間違えて読み込みしてて、性能だだ落ちしてた」ってのが実例としてあったから気をつけるこった。
質問です。 2D描画時のテクスチャー矩形転送のお約束として、 転送先座標を-0.5fするというのがありますよね。 あれの意義はわかりますし、そうやっているので普段は良いのですが、 拡大転送する際「テクスチャーの参照の際、隣のドットの色が影響してしまう」現象が起きるようです。 これを回避する方法はないでしょうか? LINEARを使わず、NEARPOINTでやればいいのでしょうが、拡大の粗が見えてしまいますので・・・。
一枚のテクスチャの中で別パーツと混ざるのが嫌なケース? そりゃ周囲には1ピクセルずつ余白を置くとかじゃね。 昔の2Dゲームのような32x32のチップをぎっしり敷き詰められたデータなら、諦めるか、34x34で置き直すとか。
はい、そのケースです。 やっぱり余白しかないですか・・・。 縮小ならわかるのですが、拡大でも周りを参照しちゃうのがちょっと納得いかないところなんですが・・・
状況が許すなら、まず拡大しないブリットでチップを レンダーターゲットのテクスチャに敷き詰めて そのテクスチャを拡大するって手はある
>転送先座標を-0.5fするというのがありますよね。 そのやり方は正しいと思えないんだが。 むしろUVを半ピクセルずらすのが正しいやり方だろ? UVをそのままで表示座標を変えてごまかしたりするから、表示倍率を変えると狂っちゃうわけで。 UVマッピングの詳細はMSDNにちゃんと書いてあるので確認すること。 ちゃんとやったらチップを画面いっぱいに並べようが拡大しようが、ずれたりすることはないよ。 現に手元で動いてる。
>>640 0.5ずらすのは
「バイリニアフィルタを適用している時に」
「頂点座標をスクリーン座標に直接マッピングすると」
ピクセルがテクセルの中心にマッピングしてしまい、拡大してなくてもぼやけてしまうのを防ぐためでしょ。
だから表示倍率を変えると云々はそもそも文脈としておかしいんだが。
642 :
641 :2009/08/01(土) 22:06:18
うん、俺の文もおかしい。 x テクセルの中心 o 4テクセルの中心
>>641-642 オレの言ってることと君の言ってることはほとんど同じような気がするんだが、どうだろうか。
当倍表示の場合は636でも640でもいいが、拡大表示したら636ではおかしくなる。
そういうことだろ?
というか、そんな細かい処理をするときはフィルタはNoneにしたほうがいいと思うんだが。
拡大・縮小はきたなくなるけどな!
645 :
641 :2009/08/01(土) 22:29:42
>>643 拡大するとおかしくなるんじゃなくて隣の色を拾うんだから
アルゴリズム上は正確な挙動だよ。
てゆーか言ってるのはテクスチャ座標を0.5テクセル分ずらす方法だよね?
言い忘れてたけど、その方法だと拡大はせずに反転した時に
完全なミラーにならずに一ピクセル分表示がずれちゃうよ。
そっち方法で隣の色を巻き込まないってのは、うーん、
手元で試せないので「そんな馬鹿な」としか言いようが・・・
FFT式に回転させるとそんな苦労も水の泡だぜ
周りからそんなに反論されると、なんか自分も自信がなくなってきた。 まあそれはともかくとして、 表示を10倍くらいに拡大すると、もはや直角二等辺三角形2つを並べたテクスチャの斜めの辺の挙動が無視できなくなるな。 大体10x10にならんでるけどところどころ9になったり11になったりする。 それに斜めにずれているところがあることに気づく。ちょうどポリゴンを斜めに並べたところだ。 なんだかどうにもならないことのような気がしてくる。 頂点を共有せずに微妙に1ピクセル分ずらしたりの調整が必要になってくるのかも。
とりあえず軽く実験してみたが、 転送先スクリーン座標を-0.5f, -0.5f しただけでは、拡大転送時に周りの1ドットの影響を受けてしまうな
>>648 そうだなぁ。例えば10倍拡大したときは0.1f、0.1fくらいでちょうどいいようだ。
微妙に9倍や11倍されてるピクセルがあるようだが、
こんなに拡大されたCGを凝視するようなことはないだろうから実用上は問題ないだろう。
2D表示における倍率に指定すべきUVオフセットが影響を受けるのかもしれない。
しかしGPUの機種の差異もありそうだしなぁ。
>>641 が言っているように、0.5ずらしは
本現象とは何の関係もない。
D3DTEXF_LINEARが、2x2エリアをサンプルするのが原因。
一応、UV座標を半テクセル分内側にずらすことで回避出来る。
float texture_width = 512;
float texture_height = 512;
float wh = 1.0/(texture_width*2);
float hh = 1.0/(texture_height*2);
float uv_quad = { u0 + wh, v0 + hh, u1 - wh, v1 - hh };
ただし、ずらす分マップするエリアが狭まるので注意。
状況や描画させ方によるので 唯一これが最速だという答えは出せません。 ゲーム、あるいはエンジンに合わせて最適化がそれぞれ必要です。
それでも、Direct3D9で2D等倍表示をするときだけしか正しくない「頂点座標を0,5ずらす」を 後生大事に信じ込むのは馬鹿だろう
基本的な質問で申し訳ないんだが、 GPUの機種によって描画できる場合と描画できない場合ができていて困っている。 原因は何が考えられるだろう? 動作条件は ・DirectX 9使用 ・Vertex/PixelShader使用 ・FVFはPosition|DiffUse|UV ・空間座標変換はCPU側で事前に合成してから単一の4x4行列としてID3DXEffectに入力。 現行のプログラムでRADEON HD4850だと正常にポリゴンが描画できるが、 Intel GMA950では描画されない。Device->Clear()は動いてる。 また、FVFがPositionRhw|DiffUse|UV のときは描画できることも確認している。(座標変換が利かなくなるが) シェーダー使ってなかったころのプログラムやシェーダーを使ってる サンプルプログラムでは描画できてるから、ハードウェアのせいではない。
きわめて一般的な描画方法だからどこかおかしいんと違う?
>>653 それだけの情報で分かるわけないだろう。
デバッグランタイムも何も文句言わないの?
>>655 デバッグランタイムは動かしたことないな。試してみる。
開発マシンじゃなくてテストマシンだったからDirectX SDKは入れてないので。
vs/ps3.0を指定してたら描画結果が真っ白になってしまったことはあったけど、
今回はそんなわかりやすい現象じゃないからなぁ。
ここで質問していいのか微妙な内容なのですが スレ違いでしたらスルーしてください。 DirectXを使用するとどうしても気になってくるんですが プログラムで使用されているVRAMの消費量を調べる方法はありませんか? メモリ使用量を調べるような関数があるのかと思ったのですが見つけられず… よろしくお願いします。
659 :
デフォルトの名無しさん :2009/08/03(月) 02:01:17
DeviceCaps取得すれば VRAM容量わかるお
nai
このスレにいる人レベル高いなぁ 多分大学生が多いだろうから、大手狙いなんだろうなぁ……負けないように何か作るか
Zバッファがうまく動かないんですが 環境 WindowsXP VisualStudio2005 MFC Geforce9600GT 初期化 m_d3dPP.EnableAutoDepthStencil = TRUE; m_d3dPP.AutoDepthStencilFormat = D3DFMT_D16; LINE_VERTEX line[6] = { {-1 , 0, 0, 0xFF00FF00}, {1 , 0, 0, 0xFF00FF00}, {0 , 0 , 0 , 0xFFFF0000} , {0 , 1 , 0 , 0xFFFF0000}, {0 , 0 , -1 , 0xFF0000FF} , {0 , 0 , 1 , 0xFF0000FF} }; CreateVertexで書き込み
視点の初期化(マウスで回転した時も) D3DXMatrixLookAtLH(&d3dm , &D3DXVECTOR3(0, 0, 6) , &D3DXVECTOR3(0, 0, 0) , &D3DXVECTOR3(0 , 1 , 0)); m_pDeviceD3D->SetTransform(D3DTS_VIEW , &d3dm); D3DXMatrixPerspectiveFovLH(&d3dm , D3DXToRadian(45.0) , (float)rect.right / (float)rect.bottom , 0 , 1000); m_pDeviceD3D->SetTransform(D3DTS_PROJECTION , &d3dm); D3DXMatrixRotationYawPitchRoll(&Rot, D3DXToRadian(m_AngleY), D3DXToRadian(m_AngleX), D3DXToRadian(0.0f)); m_pDeviceD3D->SetTransform(D3DTS_WORLDMATRIX(0) , &Rot); m_pDeviceD3D->SetRenderState(D3DRS_CULLMODE , D3DCULL_NONE); m_pDeviceD3D->SetRenderState(D3DRS_LIGHTING , FALSE); m_pDeviceD3D->SetRenderState(D3DRS_ZENABLE, TRUE); m_pDeviceD3D->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
描画 m_pDeviceD3D->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(20,0,50),1.0f, 0); m_pDeviceD3D->BeginScene(); m_pDeviceD3D->SetStreamSource( 0, g_pVB, 0, sizeof(LINE_VERTEX) ); m_pDeviceD3D->SetFVF( D3DFVF_XYZ|D3DFVF_DIFFUSE ); for(int i=0; i<3; i++) m_pDeviceD3D->DrawPrimitive( D3DPT_LINELIST, i*2, 1); XYZの軸を引いてマウスで回転させてるだけなんだけど 角度によって後ろの線が前に出てきたりZバッファが機能してないみたいなんだけど どこが間違ってるんでしょう?
D3DXMatrixPerspectiveFovLHの第4引数(znear)が0になってますがな
>665 ゼロからじゃだめなんですか?
だめ。 視錐台の前面が面積0になってしまう。
>>665 ありがとう、とりあえずそこを1.0にしてみたら出来たけど
いまいち原理が良くわからないから調べますわ
きみがやってみて失敗した結果の画像をどこかのアプロダに張れないか
ちょっと待っててください
そして>670は待ち続けた。 雨が降ろうと、風が吹こうと、雪が積もろうと、>671が帰ってくるのをずっと 待ち続けた。 スレの主人はそんな>670を不憫に思い、毎晩、スレを畳む時間になると、残り 物のレスをそっと脇に置いて帰ったが、翌朝までに手をつけられていたことは、 一度も無かった。>670は、ただひたすら一つのレスを見続けていた。 結局、>671が帰ってくることは、二度と無かったのだ。 なぜなら、>671は
(続き) なぜなら、>671は>672だったからなのだ。
UV値を入れずにポリゴンを書くとテクスチャを指定しても表示されないんだけど 大きさを可変にしたいからタイルパターンでテクスチャを貼り付けたい時はどうすればいいの?
そういうふうにUVを指定しろ
>674 テクスチャ画像を作る段階でタイルパターンの画像にしておけば良いのでは?
シェーダー使えば可能だろ
いろいろあるよ
2Dを扱う場合、高速で描画できる方法を教えてください。 一応自分なりに調べて、描画をさせてみたのですが DXライブラリというライブラリを使った場合と比べるとかなり差が出てしまい 原因を探しています。 描画方法は、頂点バッファを使いDrawPrimitiveで画像を1つずつ描写しています。 よろしくお願いします。
頂点バッファを使い1回のDrawPrimitiveで全部の画像を描画すると速いと思うよ 必要な絵全部を1枚のテクスチャに詰め込んでおくと良い
>>頂点バッファを使い1回のDrawPrimitiveで全部の画像を描画すると速いと思うよ このやりかたが分からず…方法の載っているサイトなどありましたらおねがいします。 DirectXによる2Dゲーム制作サイトなど見たのですが、1フレーム分描画するのに何度もDrawPrimitiveしているものばかりでした
画像数×6個の頂点が入る大きさの頂点バッファを作って、 全部の頂点を書き込んで、DrawPrimitiveするだけ
頂点バッファを一つにまとめて、テクスチャも一つにし それを一度にDrawPrimitiveすればいいってことですよね… つまりDrawPrimitiveの呼び出し回数が描画速度に関わってるって ことですか… 複数のテクスチャを扱っているので、できるだけ呼び出し回数を減らしてみます。
685 :
684 :2009/08/04(火) 19:47:36
>>684 ありがとうございます。複数のテクスチャを扱うときは
グループ化すれば、描写速度があがるんですね。非常に勉強になりました。
686 :
683 :2009/08/04(火) 19:51:33
>>685 は名前ミスです。
早速、現状と比べてきます。
表示中のモデルに直接色を塗りたいんだけど 爆発で黒く焦げたりとかしたい 決まった場所じゃないし、同じモデルがいっぱいあるから テクスチャをいじるわけにもいかないし どうすればいいんですか?
頂点カラーを使うとか
マルチテクスチャで加工用のを重ねる。 洋ゲーでキャラを血まみれにするので使ってた実例もなんかあったはず
質問です。
>>684 でもあがっているこの最適化ページに
>できるだけ正方形テクスチャーを使用します。ディメンジョンが 256 × 256 のテクスチャーが最速です
とあるのですが、
今までパーティクルに使うテクスチャは32x32くらいのなるべく小さいものにしていました。
もしかして256x256のほうが良いのでしょうか?
色々な環境で実測してから言え
32x32のテクスチャをたくさん使ってるなら256x256の1枚だけにまとめた方がいいかもしれないが、 32x32のテクスチャをひとつしか使ってないならそのままでよい
>>690 どうでもいいが、DirectXヘルプでよく出てくるこの「ディメンジョン」という訳が気持ち悪い。
dimensionの発音はディメンションだし、寸法という適切な日本語もあるのに。
>>694 昔、FORTRANの時代にSIONをTIONと間違わないためにあえてディメンジョンと言ってた名残かと
ディメンジョンが何を指しているのかもよくわからんしな。 >できるだけ正方形テクスチャーを使用します。ディメンジョンが 256 × 256 のテクスチャーが最速です 画像サイズが。という意味でいいんだろうかw X軸とY軸のことをディメンジョンと呼んでいるような気はするんだがw
日本人にとってはdimensionというと数学用語の「次元」のほうが馴染みがあるけど、 英和辞典で最初に出てくるのは「寸法」だね。
訳した人がよくわからなかっただけじゃねえの?
マイクロソフトの翻訳が糞なのは仕様 surfaceの正確な発音はサーフィスだけど サーフェイスと書いてあったり
それって翻訳なのか?
>>700 まあまあ。最近は歴史学でも用語発音の厳密化の流れはあるけど、
『サーフェイス』か『サーフェス』、『サーフィス』かというのは和製英語のレベルだよ。
(両方でググると引っかかる結果が違って興味深い)
英語的に考えると『サー』の部分も『フィ』の部分もむかつき音だから
「セーフェス」のほうがむしろ近いわけだが、読んでも意味がわからなくなる。
個人的にはサーフェスくらいかな。でもサーフェイスで覚えてしまってる。
そもそもMSDNの翻訳って、機械翻訳じゃなかったっけ?
MSの機械翻訳はそこまで優秀じゃないよ 少なくともDirectX部分に関してはMSKKの川西さんが最終的な監修をしているはず
やってる奴が、有能か無能か、業務か無料奉仕かなんて関係無く 機械翻訳にしか見え無いとは酷い話だ
くだらねえ
初心者のばかな言動を叱り付けると爽やかな気持ちでプログラミングに励むことができます
RPG風なダメージを表現しようとして敵が表示されているときのみ数字を表示って考えてるんだが if D3DXVec3Dot( &敵, &カメラ )>0 ってやるとカメラを回転させたときに数字が出ずに困ってる。 方向ベクトルの符号を変えればよいっぽいんだが変えるタイミングがわからない。
数字の表示を独立するんじゃなくて 敵の表示処理のときに一緒に処理すればいいんじゃないの?
質問させて下さい。 固定機能パイプラインのディフューズ、インデックスバッファを使用して 描画しているのですが、頂点に設定した色で面の色は補間されてしまいます。 頂点毎の色ではなくて面毎に色を設定したい場合は頂点シェーダを 使用するしかないのでしょうか?
>>711 D3DRS_SHADEMODEをD3DSHADE_FLATにすると、最初の頂点の色で
面が塗られる。
>>712 ぬおおお!!本当だ!!知らなかった!!
本にも載ってなかった、ありがとうございます!!
その本を捨てるか 俺のチンコをしゃぶるか 選べ
>>714 氏ね
プリミティブ数より頂点数が少ない場合、
(インデックスバッファを使用して頂点を共有しまくってる場合)
どうすればいいんですかね?
こういう場合はFLATでのシェーディングは不可能という事ですか。
>>715 そんなにFLATにこだわるならポリゴンごとに頂点を分割したらいいんじゃないの?
何をそんなにこだわってるんだか。
>>716 こだわってるはモデラー的なものを作りいんですよ。
モデラーってスムージング角度を指定して、FLATかスムースになりますよね。
頂点数がどれくらい多くなるか分からないので、
効率考えてインデックスバッファは使いたいんですが、
今のやり方ではDirectXの仕様的に無理そうな感じですね。
面ごとの色を決めて描画という方法は無い。 少なくとも頂点カラーは使えない。 やるならマテリアルわけするしかあるまい。 俺も昔OpenGLで同じことをやりたくて探したが、OpenGLにもDirect3Dにもなかった。 頂点カラーならぬ、面カラーがあるに違いないと思っていたが、幻想だったよ。
質問です。 テクスチャに対して、マルチサンプリングを行っての描画をしたいのですが、可能でしょうか? 以下のことは調べました。 ・CreateTextureしたテクスチャからGetSurfaceLevelし、それをSetRenderTargetして描画 マルチサンプリングは効きませんが、描画がちゃんとできるのを確認しました。 ・CreateRenderTarget したサーフェイスをSetRenderTargetして描画 描画後、LockRectなどで描画が確かに行われているこを確認しました。 マルチサンプリングも効いています。 後者で描画した後、LockRectして手に入れた内容を、テクスチャーに転送する。 という手段でとりあえずは可能なのですが、いかにも周り道です。 ダイレクトにテクスチャにマルチサンプリング描画を行うにはどうしたらよいのでしょうか?
シェーダーを使えば可能
>>718 そうなんですかorz
ありがとうございました。
>>718 >>720 当然じゃないか。
3Dの基本単位は頂点なのであって、
3つの頂点の配置からポリゴンの位置・大きさ・向きを判定するんだ。
面が先にあるわけじゃない。
別に当然ではないだろう。 どうせ描画時には面単位で描画していくのだから。 DrawPrimitiveの引数だって、頂点数じゃなくて「プリミティブ数」じゃないか。
724 :
デフォルトの名無しさん :2009/08/07(金) 23:47:44
DirectSoundってボリューム増幅させることできます? IDirectSoundBuffer8::SetVolumeは増幅はサポートしてないって書いてあるけど
アプリケーションのデフォルトを50%相当の音量にすればよい。
ウィンドウモードで画面サイズが変わったらバッファをリセットするんだけど テクスチャとバーテックスバッファを登録した状態でResetを呼び出すと失敗するんだけど 全部ReleaseしてResetして再登録しろってこと?
D3DPOOL_DEFAULTは全て
なるほど
いつもテクスチャはD3DPOOL_MANAGEDしか使わないんだが、 RenderTargetに指定できない以外は別に問題ないよな?
問題ない
D3DPOOL_MANAGEDに変えたらテクスチャが真っ赤になったんだが どういうこと?
これまで初期化を怠ってきたから環境依存してる
LPDIRECT3DTEXTURE9 pTex; HRESULT hr; hr = D3DXCreateTexture(dev, img.GetWidth(), img.GetHeight(), 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &pTex); D3DLOCKED_RECT pLockedRect; hr = (*pTex).LockRect(0, &pLockedRect, NULL, D3DLOCK_DISCARD); unsigned char *dest = (unsigned char*)pLockedRect.pBits; unsigned char *src = img.GetData(); <- imgはRGBの24bit画像データが入ったクラス int j; int dest_pos=0; int src_pos=0; for(j=0;j<img.GetWidth() * img.GetHeight();j++){ dest[dest_pos] = src[src_pos+2]; dest[dest_pos+1] = src[src_pos+1]; dest[dest_pos+2] = src[src_pos]; dest[dest_pos+3] = 0xff; } dest_pos+=4; src_pos+=3; } hr = (*pTex).UnlockRect(0);
dest[dest_pos] = src[src_pos+2]; dest[dest_pos+1] = 0xff; dest[dest_pos+2] = 0xff; dest[dest_pos+3] = 0xff; こうすると真っ白 dest[dest_pos] = src[src_pos+2]; dest[dest_pos+1] = 0xff; dest[dest_pos+2] = src[src_pos]; dest[dest_pos+3] = 0xff; こうすると紫 dest[dest_pos] = src[src_pos+2]; dest[dest_pos+1] = src[src_pos+1]; dest[dest_pos+2] = 0xff; dest[dest_pos+3] = 0xff; こうすると水色 dest[dest_pos] = src[src_pos+2]; dest[dest_pos+1] = src[src_pos+1]; dest[dest_pos+2] = src[src_pos]; dest[dest_pos+3] = 0xff; これで青 どういうこと?まじで分からない
srcの中身なんだかわかんねーしよ それはそうと、D3DFMT_A8R8G8B8であればdestのオフセットは 0=B 1=G 2=R 3=A
というか、あれだけ優秀なD3DXライブラリを使わない理由がわからない。
せめてビットシフトのマクロ作れよw なんだその無様なコードは
原因判明 UV座標が狂ってたw
>>736 モデルファイルのコンバーターを作ってるから専用のライブラリで統合してるんだ
ポリゴンが透けてしまう原因として何が考えられますか・・・? アバウトな質問ですいません。
アルファブレンドの値や設定が透過するようになってるとか?
>>742 アルファブレンドは使っていないんです。
>>741 われわれはエスパーではないのでそんなアバウトな説明では何もわかりません。
745 :
741 :2009/08/09(日) 14:58:32
透けてしまうというか奥にあるはずのポリゴンが 手前に表示されてしまうという現象です。 頂点座標は間違っていないので、何故かまったく分からないです。 同じ現象にあった方が居たらと思いまして質問しました。
Zバッファおかしんじゃね
>>745 Zバッファが有効になってないと、前後関係無く最前面に描画されてそうなる。
>>746 >>747 ご指摘の通りでした、zバッファ有効になってなかったです。
原因は視錐台の前面をゼロにしていました。
過去ログ見れば一発でしたね、お手数お掛けました。
ライトがXファイルによって反映されるのとされないのがあるのはなぜですか? アンビエントはかかるんですが・・・
マテリアル関係かな
法線がないんじゃあるまいか? 確かデフォルトだとオートノーマライズもOFFだし、初心者ひっかかりやすいよね
それでした ずっとアンビエントでやってたから気が付かなかった・・・
オートノーマライズって何?
glEnable(GL_NORMALIZE) のことでは
ごめん、DirectXのスレだった・・・逝ってくる
>>753 頂点の構成要素には、位置座標ベクトルや法線ベクトルがあるが
これらはレンダリングパイプライン通過時に、頂点変換行列によって変換される。
この頂点変換行列の内容によっては、法線ベクトルが単位長でなくなることもある。
パイプライン内のライティング処理は法線ベクトルを利用し計算を行うが、
そのとき法線ベクトルは単位長でないと正確な計算が出来ない。
よって、ライティング処理時、法線ベクトルを自動で正規化し単位長にするのがオートノーマライズ機能。
なんだ左手系とかで面の向きが分かるから勝手に法線を生成してくれるのかと思った 自分で作らないとだめなのかな?
頂点は複数の面で共有するケースもあるので、 法線を動的に生成するのは、重い割に得られるものが少ない。
出来ると思うのなら、鋭角と鈍角が入り交じった立体から、 何の情報もなく法線を自動生成するプログラムを作ってみろ。
何の情報も無かったら法線以前に描画出来ないだろw
立体なんだから頂点情報があるのが前提だと想像できないのは、 プログラム云々以前だな。
法線の生成なんて何十年も前から論文が何十本と出ていて、未だにコレという決定的な方法がない領域だからな。
右回りになる方向のベクトルでいいんじゃないの?
>>763 1つの頂点を共有する3つ以上のポリゴンの頂点における法線のことだろ?
>>763 鈍角をどうやって認識するつもりなんだ?
体験版でもいいから、まともなモデリングソフトを使って勉強し直せ。
球体を外積で出した法線で描画すればいかに間抜けなのかが分かるよ。
包丁一本〜さらしに巻いて〜
>>767 だからそれじゃ鈍角の法線が出ないんだよ。
かみ合っていない以前に、分かっていないのなら勉強し直せ。
なんで鈍角が出ないかといえば、そこが鋭角なのか鈍角なのかを頂点座標だけでは判断できないから。
鈍角の法線って何ですか?
内積とれば鈍角か鋭角は判断できる。 でも鈍角だったら、なんなんだ?
凹多角形の事でも言ってるんだろうか?
出ないっていう奴が問題だして 出るって言ってる奴が解けば結論でる
>>772 鈍角鋭角というのは角度の話じゃない。
法線を出すときに頂点座標だけでは、
周囲の頂点と平均をとるのかとらないのかが判断できないということだよ。
だから一般的な3Dフォーマットは、法線をデータとして含めるか、
頂点に対してスムージングをかけるか判断するための情報を入れるんだよ。
1行目がわかりません 角度じゃない鈍角鋭角って何のことですか
曲線のなす角と平面のなす角を言いたいんじゃないのか?
778 :
デフォルトの名無しさん :2009/08/11(火) 13:07:02
すいません、質問したいのですが、 現在外部ファイルを読み込みたくて APIのGetOpenFileNameを使っているのですが この関数を使った後だと何故か D3DXCreateTextureFromFileEx や D3DXLoadMeshHierarchyFromX が 失敗してしまうみたいなのですが原因が分かりません…。
たぶんカレントディレクトリが変更されている
780 :
デフォルトの名無しさん :2009/08/11(火) 13:27:29
>>779 カレントディレクトリで検索してみたら
確かにGetOpenFileNameが成功するとディレクトリが変わってしまうそうですね。
恐らくこれが原因だと思います、ありがとうございました!
現行のやつをカレントディレクトリに依存しないようにするのがいいけど、 とりあえず OFN_NOCHANGEDIR で試してみそ
782 :
デフォルトの名無しさん :2009/08/11(火) 13:40:30
>>781 ちゃんと動くようになりました!
ありがとうございます、昨日ここで1日詰まってたんで助かりました^^;
普段からフルパスで書いてるほうがいいんですかね・・・?
ほとんどの場合カレントディレクトリ前提でソース書いてましたが…
>>782 別にいい悪いはないが、相対アクセスをするときには常にカレントディレクトリがどこかを把握しておく必要がある。
784 :
デフォルトの名無しさん :2009/08/11(火) 13:49:25
なるほど、たしかに相対する時はカレントディレクトリだとやりにくそうですね… ありがとうございます、すごく参考になりました。
>>784 老婆心ながら蛇足を描くと、
ゲームのようなデータファイルの多いソフトを開発する際は、相対アクセスの方が便利かもしれない。
VisualStudioのデバッグ時に作業ディレクトリを指定できるのでそこでカレントディレクトリを設定しておくと、
必要に応じて複数の動作環境を用意できる。
サンプルゲームが複数になってきたらそれで切り替えられる。
Xファイルを別フォルダに入れて読み込んでも問題ないのに テクスチャをXファイルと一緒に入れるとテクスチャだけ読み込まないのはなぜですか? 一応Xファイル内にはA.BMPのように書いて同じところにあるファイルを読むようにしているんですが・・・
X-File内の画像のパスを画像ファイルのあるパスに設定しろ。 X-Fileを読み込むときに勝手にカレントディレクトリを移動してくれる訳じゃないぞ。
やっぱりそれしかないですか・・・ わかりました
やっぱりパス関連の面倒を見てくれるローダは、さっさと自分で作るべきだよな
>>775 ようするにその角が丸みを帯びてるのか鋭いままなのかは計算では設定出来ないと言いたいのか?
その通り
どうでもいいが、頂点法線のスムージングの話で「鈍角」「鋭角」という用語を使うやつは初めて見た
「どうでもいい」のにレスする意味が分からない
794 :
641 :2009/08/11(火) 19:59:15
なんにしろ、読み返してみれば鈍角さんがなんのことを言っているのかを 解明するだけの流れだったな。
>>792 鈍角は90度を超える角で、鋭角は90度未満の角だよな、
小学校かどっかで習う範囲だと。
だから誰もそんなことは問題にしてないんだって
スムージングを使わずに単にポリゴン数を増やせばいいだけじゃん
本当にそれでいいと思うのならそうすればいい。
必要になったら実装すればいいだけで、大抵は平均化だけで十分。 というかデザイナとの相談だな。
D3DXLoadMeshHierarchyFromX( の LPD3DXFRAME* ppFrameHeirarchy, LPD3DXANIMATIONCONTROLLER* ppAnimController この部分をXファイルじゃなくて計算で組み立てたいんだが どっかに解説したサイトとかサンプルとかありませんかね? この単語で検索すれば出てくるとかヒントでも
平均化だけで十分って、立方体とかが悲しいことになるぞ。 相談も何も普通に法線を含めればいいだけの話だろ。
>>800 自分でモデリングソフトのアニメーション部分を作るつもりなのか?
というかそれ以前にプログラム云々以前で、
アニメーションを作る工程をやったことがあるのか?
>>802 モデリングソフトのようなものを作ってまして
またお前か
DirectXのプログラミングはすぐに次のバージョンに移れるものですか? 最近DIrectXを始めたばかり、というか 9 か 10 を勉強するかで悩んでいます。 現在使用しているPCがWindowsXPで10が扱えまないので9にしようと考えていたのですが、 今後新しいOSが普及して10以降が主流になったりすると置いてかれるような気がしまして。 そのPCも大分ガタが来たので10が対応しているPCに買い替えることも考えています。 今は10対応といえばvistaくらいでしょうが・・・
FromX使わない方が勉強になるね 頂点情報をバイナリ化したりとか色々出来るようになるし
>>805 10はシェーダ必須だから敷居が高め。
まず9をFVF使用で書けるようになってから、9のシェーダ、10のシェーダと行くのが比較的平坦な道のりだと思う。
多分言ってる意味分かんないと思うけど要するに9のチュートリアルから始めていいんじゃないかなということだ。
Easy Link Libraryの他にdirectx用のライブラリってありますか?
たくさんある。
9でやった方が楽。 10は抽象化されていて、慣れてないと途方に暮れる。 10を改造して11にするのは難しくはなさそう。 製品を売るなら9。 趣味のライブラリなら、9&10共用。将来は10を捨てて9&11でもいい。
将来を見据えるなら11オンリーだろw Windows7が出てしばらくすればさすがにXPはかなり数が減るし その頃にはDirectX9世代のビデオカードなんて淘汰されてるよ。 現状でさえ3世代前の代物なんだから。
11は今日からプログラムに取り掛かれない
>>811 >Windows7が出てしばらくすればさすがにXPはかなり数が減るし
そうかな?
自分が必要だと思う環境でプログラムを組めばいい。 他人に対してどうこう言う問題じゃない。 この分野の人間は自分がやっていることを他人に押しつけたがる者が少なからずいるが、 それは誰のためにもならない。
DirectX9 ・情報が豊富 ・今からでもプログラム可能 ・ゲーム作って配布するとしても、流石にDirect9対応必須をうたっていいと思う DirectX10 ・情報そこそこ ・Vistaなら今からでもプログラム可能 ・ゲームなどを売るにはつらい(XPユーザーが多いから) DirectX11 ・情報少ない ・将来的に主流になりそう ・今からプログラムするのは困難 とりあえず9で勉強して、おいおい必要に応じてうつればいいかと
816 :
805 :2009/08/12(水) 11:54:56
レスありがとうございます。今は9で勉強しておくことにします。
817 :
デフォルトの名無しさん :2009/08/12(水) 11:59:13
おまいらってやたら詳しいけど、趣味なの?本職なの?
うるせえ黙れ
こんなマッチョじゃ感情移入できない アドルは永遠の優しい夢見る少年だろう どうみても童貞じゃないし
>>813 いずれにしろDirectX10やDirectX11対応のゲームが増えてくれば
Vistaか7のどちらかにするしかないがVistaは選択肢にはいらないだろ。
どうせ2,3年もすればXPも売られなくなるし
新規でPC買えば全部Windows7化されてるだろ。
いつまでもDirectX9+XPにしがみ付いて技術的に取り残されるのも馬鹿らしい。
趣味でやる分にはDirectX9でぜんぜん問題ないと思うけどね。
固定機能でお茶を濁したクズ本が消えるかと思うと 清々するわ
逆に本がぜんぜんでなくなってるよな。 もうついていけてないんだろうか。
ていうかゲームなんて作るのやめろ ゲーPGなんてまったく金にならないし 本とか買ってまで作るなマジで
金が目的なら株でもいじってろよw
3Dゲームのエフェクトを強引にキャンセルさせてCPU負荷を下げる方法ってないですか?
>>825 えーと、それは自分が作ってるゲームに関する質問?
某エロゲのモザイク的な修正がパーティクルで実装されているので
実行ファイルを書きかえれ
工エエェェ(´д`)ェェエエ工工
あそこが見たいだけじゃないのか?
脳内変換だ
アニメーションコントローラーを使ったアニメーションで 1ループ分のアニメーションの完了を検知したいのですが、 // if(アニメーション時間 >= 1ループかかる時間) if(AnimationSet(AnimationID)->GetPeriodicPosition( ? ) >= AnimationSet(AnimationID)->GetPeriod()) このような判定で合っているでしょうか? 合ってる場合、「?」の部分の引数にはなにを指定したらいいのでしょう? msdnの解説では「アニメーションセットのローカル時間」と書いていますが、 GetPeriodicPosition()の戻り値こそがローカル時間ではないのでしょうか?
なんかもう、誰も使ってない、仕様があやふやだし自分で作らない限り無間地獄から抜けられない という結論が数年前から変わってない。
835 :
デフォルトの名無しさん :2009/08/14(金) 11:56:07
いやいやDirectX使わないとXBOXやWindowsでゲーム作れないって
836 :
833 :2009/08/14(金) 12:32:32
自己解決(´・ω・`) GetPeriodicPosition()はグローバルな時間をローカル時間に変換するメソッドのようで? 参照すべきだったのはトラックの方でした
シェーダーで描画してるんですが 固定機能のフォグって同時に使えるんですかね? やってみたらかからないので、 やはりピクセルシェーダーで自前でかけるんでしょうか?
ピクセルシェーダを自前で書くのなら、自前でかける
DirectXのプログラミングを始めようとおもうのですが これはSDKのチュートリアルにのってる最新のもの?から勉強していって良いのでしょうか? それとも以前のバージョンから順に勉強していくほうが良いのでしょうか?
>>839 通常はそんなめんどくさいことはする必要はない。
ただしバージョンごとにできることと動かせる環境に差異があるので、
DirectXのバージョンを比較した記事をいくつか読んで、
自分の作りたいものがバージョンいくつがふさわしいか最初に決めること。
後々でバージョンを変更するのはプログラムを作り直すようなことと等しい。
directxを更に使いやすくしたライブラリって通称名とかありますか? また鉄板の物はありますか?
>>841 山ほどある。
が、結局DirectX自体と直接格闘したほうが得るものが多い。
お勧めのライブラリはほかのヤツらよろしく。
>>842 なるほど、ありがとうございます
ある程度作れるようになったら、改めて探してみることにします
844 :
839 :2009/08/16(日) 03:10:57
>>840 なるほど、勉強になりました。
ありがとうございます
directx自体を理解してないとライブラリの使い方も理解出来ないからライブラリは無駄w
そうそう、面法線を計算して頂点を共有する面頂点の合計を正規化したものを頂点の法線に設定してみたけど 球体の見た目はかなり綺麗に仕上がる 角度で適用するかどうか判別すれば尖った部分も表現出来るんじゃないか
>>845 さすがにそれはない。
もしそうならEasyLinkLibraryはあんなに流行らなかった。
>>846 モデルデータ制作者の意図のをエスパーのごとく判断するプログラムを作らない限り無理。
だったら普通に法線をデータに含めればいいだけだろ。
いったい何がしたいんだ?
大抵のライブラリは自由度を優先しててただのDirectXラッパーで終わってるから意味ないんだよ 例えば視点移動とかエフェクトとかがすべて内包されてて使用者はその中から選ぶだけとか そこまでやってあるライブラリなら意味があると思うけどないでしょ 仮に誰かが作ったとしても無料では出さないでしょ
>>849 それもうライブラリじゃなくてただのツクールだから。
>>848 とりあえずただの頂点データだけのメッシュをフォトリアルに表示する方法を模索してる
>>851 だからなんで頂点データだけにする必要があるのかを聞いているんだが。
>>849 Irrlichtとかがまさにそれじゃないか?
>>852 ただのモデルビューアだから、決まったものを表示するわけじゃないので
最終的にはゲームを作りたいけど、とりあえずビューア作って勉強しつつライブラリに包括していってる
ツクールの心臓部分になるかもしれない
法線がなかったらライティングしない、 あるならライティングする、が普通のモデルビューアーの挙動だと思うが
だから最終目標がツクールレベルだから、法線さえ知らなくても最新ゲーム並みの画像が出せるライブラリを作ってる 自分用にw
法線なしで最新ゲームなみの画像とはこれはこれは大したもんだ。 デザイナーだったら3秒で投げ捨てろって言うライブラリだな。
自動生成した感じでもかなりリアルだけどな
エッジの抽出をどうすんだって話じゃねえの
モデリングソフトで簡単に出力できるものを、わざわざ利用しない理由の答えになっていない。 カラーで出力できるのに、わざわざモノクロ写真からカラー写真にしろと言っているのが理解できているのか?
モノクロ写真をカラーにする技術は重宝されてるし、画像処理では主流の研究課題ですけど
頂点法線の取り扱いについて、多少話しが振れてくれれば 得るものもあるが、デザイナとかモデリングソフトとか 得るものが何もない。 >>モデルデータ制作者の意図のをエスパーのごとく判断するプログラムを作らない限り無理。 別にモデルデータ制作者の意図を反映する必要はない。
>>861 元のツールがカラーで出力できるんだからそれでいいだろって話してんだろ。
>別にモデルデータ制作者の意図を反映する必要はない。 デザイナーに言ったら殴り飛ばされそうなセリフだな
何小難しい討論してんだ 正確に描画したいなら法線をつけて出力する。 法線がない時は「とりあえずそれなりに描画する」ってやりたいだけだろ? 別にD3DXにだって、法線の自動生成機能はあるけど、別に批難するやつはいないだろ
そもそも法線を自動化することも出来るってだけで法線入れればそっちを優先するだけだがw
質問です。 DrawTextを使って計算したFPSを表示したいのですが、LPSTR型に変換すると動かなくなります。LPSTR型にうまく変換する方法はありませんか?
>>867 逆だ。プログラム全体をLPWSTRで統一するんだ。(Unicodeビルドしてるなら)
オレはそれが嫌になってC++でWindowsプログラム書くのをやめた。
なんでこのスレにいるの?
ヒトリデモ オオク ノ ワカモノ ヲ ユニコード ノ ジゴクカラ スクイタイ
時代に取り残された老人は消えるべきだ
SJISがデフォルトのOS上でプロジェクト新規作成したらユニコードデフォルトとか嫌がらせ以外の何者でもない
時代に取り残された老人は消えるべきだ
もはやSJISがデフォルトにはなっていないが、いったいいつの時代の話をしているんだ?
今時のOSはユニコードが基本ってばっちゃが言ってたけど
最近のOSがどうだろうが関係ねえ。 社内のツールがすべてSJIS前提だから選択肢ねーんだよ。 という会社けっこうあるんじゃない。
オープンソースのぜんぶSJISなのにどうすんの
ゲームのパラメータファイルとかは、基本SJISだからなぁ わざわざユニコで書く奴いるか?
ツールが吐き出すXMLもUTF8が使われている時代に何を言ってるんだろう?
XML厨のプログラマが自己満足で環境を整備しないとSJISでズルズルいくね。 そして、運用する側はタイプ総量とタイプミスが激増して精神病むの。
普通XMLはUTF-8で書くだろアホか
UTF-8なら何も問題ないんだが、WindowsはUTF-16LEなわけよ。
3D空間で人が平面上を動き回れる状態で色々試しています。 人が2m弱として、地面を1000m四方と巨大な板を置いているのですがバンプマップが上手くかかりません。 バンプマップで凹凸を表現するには細分化しないと効果が出ないものなのでしょうか。 テクスチャスクロールだけで地面の上を動いているように見せたかったのに 同じ絵(凹凸)の部分を色んな方向から見ても大して変化せず違和感があります。
>>868 unicodeは使ってないです。あと、LPCWSTRじゃ引き算とかが出来なくて困ります。他に解決方法はありませんか?
色んな方向から見て変化させるのは、パララックスマッピングとかでは? バンプマッピングなら、光源の位置と向きを変化させると、見え方が変わると思います。
>>884 というか、MBCSとUTF-16は相互に変換するAPIがあるぞ?
引き算の意味するところは分からんが。
>>884 fpsをLPSTRに変換するというのは、もしかしてこういうことをやってるとか?
int fps = ..... ;
LPSTR lpstr = (LPSTR) fps;
DrawText( .... );
文字コードの変換すら出来ないのはDirectX以前の問題だろ。 基本からやり直せ。
>>887 大体そんな感じです。INTのポインタを入れたりしてみましたがダメでした。
漢字とかに変換するのが正解なんですかね?
>>889 まずはC言語の入門書から読もうな。
このスレに来るのは3ヶ月くらい早すぎた。
>>888 どうか可能か不可能かだけでもご教授を…
叶
これは酷い
木曽がわかってないのに応用問題を解こうとして話を難しくしてる
初心者は死ね それがこのスレの掟だ
それはまた、エラいスレのタイトルと矛盾する掟だな。
sprintf発見!確かに論外だ。 DIRECTXは続けるので、また詰まった時はお願いします。
流石にCの初心者までは扱いきれんだろw
CがダメならC#を使えばいいじゃない
メッシュコンテナ(D3DXMESHCONTAINER 構造体)から面ごとのマテリアル対応情報を取りだそうとしてるんだけど、 pMesh->GetAttributeTable()メソッドで取り出した、属性テーブル(D3DXATTRIBUTERANGE 構造体)の中の「AttribId」ってのは pMaterials[i]の添え字(i)に対応してるんでしょうか? 同じ属性テーブル内にある「FaceStart」というのも、インデックスバッファ内の面の構成データの格納順に対応してるのか疑問です・・・
プロジェクトの設定をマルチバイト文字を使用するに変更すればいいだけじゃない
>>900 出なかったからたぶんマテリアルとは関係ない
メッシュをマトリックスグループみたいに分割することが出来てそのインデックス情報を格納するんじゃないかと
でDraw???って関数でそのインデックスを指定するとその面だけが描画されるという
ああ、そうか マテリアルのインデックスを入れといてSetMaterialと連動させて その面だけを描画すればマテリアルのインデックスという意味にもなるのか まあ、ただ数字を入れて描画グループを分割出来るだけの代物だよ
うーん、pMaterials[i]の添え字(i)と頂点番号(もとい、面番号)を関連付けるデータは メッシュコンテナ内には無いのでしょうか? メッシュデータ内の全頂点から、あるマテリアルが適用されている頂点を特定したいのですが・・・
905 :
904 :2009/08/17(月) 08:19:54
多分、自己解決 ボーンコンビネーションテーブル(LPD3DXBONECOMBINATION型)に サブセット番号からメッシュデータ(最適化後)の頂点インデックスまで全て格納されてたので そちらを参照することにしました
DirectXで直線を引くにはどうすれば?(´・ω・`) ポリゴンとかXファイルとかは表示できるのに・・・
DrawPrimitiveでいけるやないかアホでんねん(´・ω・`)
>>906 公式ならともかく、そこのページは管理人がちゃんと質問掲示板開いてるじゃないか
そっちで質問しる・;(`ε()゙
なんなんだ・・・ 釣りなのか本気なのか・・・
残念ながら、釣りではありません。
912 :
883 :2009/08/17(月) 19:09:07
>>885 ありがとうございます。
基本的にはカメラを固定した状態でも動き回るものはバンプ、
それ以外はパララックスという使い方が良さそうですね。
もちろん場合に寄りますけど。
914 :
デフォルトの名無しさん :2009/08/17(月) 21:41:59
現在DirectXを使ってゲームを作っているのですが、 ボタンが後ろに隠れてしまっています。 なので、ボタンがある位置にスプライトを使ってボタン用の画像を 表示しているのですが、時差が出来たりしてうまく機能しません。 どうすれば、ボタンそのものを前面に表示出るのでしょうか?
DirectXにボタンなど無い DirectXにスプライトなど無い
「Direct3Dで作っているゲームのキャラと地形のことで質問ですが…」 「Direct3Dにキャラや地形などない」
917 :
デフォルトの名無しさん :2009/08/17(月) 22:09:25
>>915 ボタンはウィンドウズの標準のもので、
スプライトはID3DXSpriteです。
ID3DXSpriteを使ってボタンの画像を描画しているのなら、 そもそも標準コントロールを使う必要性がない。
919 :
デフォルトの名無しさん :2009/08/17(月) 22:51:14
>>918 それもそうですね。
DirectXのサンプルに使われているボタンは
標準コントロールを基にしてるのかと思ってましたが
今調べてみたら違いますね。
ご迷惑をおかけしました。
まぁ、ツールを作る際にDirectXで描画されたものとWindosのコントロール併用することがあるから 色々試しても無駄にはならないことだけどね。
Vistaか7ならどっちでも同じことだが
同じじゃねえよ。 どれだけ馬鹿なんだ?
D3DXLoadMeshHierarchyFromX の必要な LPD3DXALLOCATEHIERARCHY pAlloc,がインターフェイスのポインタと なっているのですが COMインターフェイスってなんでしょうか? 調べてもプログラムの再利用としか出てこないので全くわかりません。
COMインターフェイスで検索しろ
>>923 そのあたりは、とにかくまずはサンプルコピペして、動きを見て、内容を理解し、自分で改良するしかない。
マジ。
理解しないままゲームとか作ると、あと後絶対苦労するから
1000に近づいてますが、質問させてください。 2D板ポリゴンの描画についてなのですが、DrawPrimitive系は重いので 1回で複数枚の板を表示するようにしてみました。 D3DXVECTOR4 vPos; D3DCOLOR color; D3DXVECTOR2 vTex; 上のようなメンバーを持った頂点オブジェクトの配列Vertexを作り、 for(int i = 0; i < Max; i++){ Vertex[i*4].vTex=D3DXVECTOR2(0.0f, 0.0f); Vertex[i*4+1].vTex=D3DXVECTOR2(1.0f, 0.0f); Vertex[i*4+2].vTex=D3DXVECTOR2(0.0, 1.0f); Vertex[i*4+3].vTex=D3DXVECTOR2(1.0f, 1.0f); } とu, vを初期化。そして、描画処理が入った数だけ Vertex[Cnt*4].vPos = D3DXVECTOR4(left, top, 0.0f, 1.0f); Vertex[Cnt*4+1].vPos = D3DXVECTOR4(right, top, 0.0f, 1.0f); Vertex[Cnt*4+2].vPos = D3DXVECTOR4(left, bottom, 0.0f, 1.0f); Vertex[Cnt*4+3].vPos = D3DXVECTOR4(right, bottom, 0.0f, 1.0f); ※color省略 Cnt++; とし、SetTextureして DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, Cnt*2, Vertex, sizeof(VERTEX); としたらテクスチャがあらぬ方向に伸びました。何故か正しく表示できてるものもあるのですが・・・。 どこか根本的に勘違いしてるのでしょうか?ご指摘いただけませんか・・・。
TRIANGLESTRIPがどういうものか調べてくるといい
>>928 さっそくのご指摘ありがとうございます。
全部プリミティブが繋がってると言うことでしょうか?
他の部分は問題ないものとしてTRIANGLELISTで実装してみます。
>>928 TRIANGLELISTでできました!1枚の板に6つ頂点使ってますが、
ちゃんとu,vと対応させたらOKでした。後は頂点インデックス使ったほうがいいですかね。
どれくらいパフォーンマンスに影響するかはわかりませんが。ともあれ即レス感謝です!
>>930 すぐに非効率性に気づいてTRIANGLELIST+IndexBufferに移行するだろうがな。
解決したんじゃなくて先送りしただけという事に気づくんだw
D3DXMATRIX mat; D3DXVECTOR3 vec; パターン1: lpdevice->SetTransform( D3DTS_WORLD, &mat ); →vec(頂点)をDrawPrimitivで描画 パターン2: vec = vec * mat; →vec(頂点)をDrawPrimitivで描画(SetTransformしない) この2つは同じ結果になると思ってたんですが、どうやら違うらしいです。 SetTransformをせず、パターン1と同じ結果を得るためにはどうすればいいのでしょう?
934 :
933 :2009/08/19(水) 07:24:03
計算ミスってました(ノ∀`) サーセン orz
>>933 SetTransformしないってのは、座標変換しないって意味じゃないぞ。
初期値として単位行列が設定されているから、起動時から一度も設定してなければ
結果的に入力と出力が同じ座標になるが。
何もセットしなけいと別の場所でSetTransformした値が残っているので、
明示的に単位行列をセットすべき。
936 :
デフォルトの名無しさん :2009/08/19(水) 14:55:22
ガラスのコップみたいな透明な物体を描画するには、 テクスチャーを透過するだけでいいんだな
>>966 DeffUseのαを設定する形にすれば透過率を後から変更できるけどな。
いずれにせよ描画順に制約を受けるので注意。
グラスの表現は透過率の調整だけじゃ出来ねえよ プログラム以前に最低限のモデリングを経験してからにしろ。
939 :
デフォルトの名無しさん :2009/08/19(水) 17:22:15
>>937 deffuseのアルファ値か、ありがとう!
>>938 屈折の話とかかな?
ヒントサンクス!
マウスの左ボタンを押しているときにprintfDx関数で"Hello C World!\n"と出力し、 押してないときはclsDx関数で消すというコードを書いたつもりなのですがうまく消えてくれません。 どうしてでしょうか?初歩的な質問ですいませんが、よろしくおねがいします。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 char Key[256]; //ループ開始 while(ProcessMessage()==0 && ClearDrawScreen()==0 && !GetHitKeyStateAll( Key )){ //↑メッセージ処理 ↑画面をクリア //ココ↓ if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 ) { // 押されている printfDx( "Hello C World!\n" ) ; } else // 押されていない { int clsDx( void ); } //ココ↑ ScreenFlip(); } DxLib_End(); return 0; }
943 :
デフォルトの名無しさん :2009/08/20(木) 17:55:06
DirectX9とc++でゲームを作っているのだが、ゲーム会社に就職する には、どれくらいの技術が必要ですか? よく聞く基準 ライブラリを作れるとか 簡単な3Dゲームが必要とか 2Dだったら、完成度が高くないといけない だいたいでいいから基準みたいなものはありますか?
ゲーム1本作れればおkよ
人事担当じゃないから詳しいことは分からないけど、DirectXでゲームとして完成度の高いものを作っても意味ないよ。 一番は表現力。HLSLでSDKのサンプル以上の何かを出来ればそれだけで十分だったりも。 小規模な企業ならそれでいいけど、中規模以上の企業であれば数学・物理が人に教えることが出来るレベルじゃないとダメ。 ハードが変わっても求めたい答えとその計算方法が分かっていれば問題ないしね。 ちなみにバンナムは数学・物理中心で、簡単なC言語ソースの問題(穴埋め)。 任天堂は数学・物理中心、あとは一般常識と発想力。 大企業になると技術力をアピールする機会がなかったり、それ以前に蹴落とされるから注意してね。 まぁ、場違いな書き込みなんですけど。
板違いな奴は入れないお レスする方もたいがいだけどな
ゲームとして完成度の高いもの(笑)
そもそもここは進路相談のスレじゃない
949 :
デフォルトの名無しさん :2009/08/21(金) 00:03:24
>>947 面白いゲーム作れなくて、数学物理が出来ても仕方ないと思うけどな。
単なる技術のデモンストレーションみたいなゲームは嫌だろ。
ゲームとしての捻りが無ければ売れんだろうし。
ま、だからって数学物理がいらないとは言わないが。
>>949 そういう人ばかりいたら駄目だろうが、当然面白いゲームを作るための人というのもまた別に雇用するだろう。
ゲームが面白いかどうかなんて、グラフィックや企画、仕様による所が大きいだろーが つーか、ここはプログラマ板だろ プログラマ(だぶん一人)が作った、転職、就職用ゲームが面白いかどうか、 なんて言ってるのは、ロートルの分って無いオッサンにしか見えん 挙動とかタイミングなんて言うなよ? それこそ、そのサンプルプログラムで言い訳だろ つまり、数学物理とは言わないが 技術スキルが分るサンプルやデモで十分 採用に面白い完成したゲームとか言ってる奴は、マジで組織のお荷物ぽっい いい年して技術が無く、技術的な問題可決もトンチレベルの発想で 結局、若い技術ある奴が残業や休日出勤でカバーとか、ねw
ゲームってこれからも どんどんどんどんどんどん 難しくなってくのかな? 昔はフォトンマップとか非線形計画問題とか考えなくても ゲーム作れたのに。 うざい、皆死ねばいいのに。
うんうん、板もわきまえずに語りだす奴は皆氏ねばいいね
ツールが増えてるからむしろ簡単になってるんじゃない?
Physixスレがないのだがここでいいのかな
よくない
D3DXFRAMEのメンバのpMeshContainer構造体を 拡張したいのですが 参考になるサイトはありますか?
>>958 マイクロソフトのサンプルも拡張しているぞ
スキンメッシュ周りは、本気でサンプルが最高に良いのでしっかり見るように
ポリゴンにテクスチャを貼った際、
スケールでの縮小をすると画像が壊れてしまいます。
ただし、等倍以上(拡大)だと問題がないように見えます。
何か原因になりえそうなものはありますでしょうか?
RenderState 及び TextureStageState は
チェックしましたが問題がなさそうでした。
以下が参考画像です。
ttp://imepita.jp/20090821/489720 右下へ行くほど 0.75 倍されています。
>>960 テクスチャ生成時のミップマップ設定を見直してみて
962 :
960 :2009/08/21(金) 14:11:02
>>961 CreateTexture の引数のことですよね?
以下の通りなので、0 だと思います。
GetDevice()->CreateTexture(
m_TexWid, m_TexHei,
0, D3DUSAGE_DYNAMIC,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
ppTex, NULL );
GetLevelCount() は 9 でした。
963 :
960 :2009/08/21(金) 14:28:09
>>961 解決しました。
D3DUSAGE_AUTOGENMIPMAP を追加して作成したところ、
問題なく表示することができました。
ありがとうございました。
こんばんわ、色々調べたんですがどうしてもわからなかったのでヒントだけでもご教授ください [現象] D3DXCreateTextureFromFileInMemoryExが失敗します。 エラーコードは0x8007000e(E_OUTOFMEMORY)でした。 [調べたこと] メモリ不足かと思いましたが、エラー発生時VRAMもメモリも余裕がありました。 MSDNやグーグルでも調べてみましたが原因がわかりません [ソース] ○ロード部分 hr = D3DXCreateTextureFromFileInMemoryEx(pDEV,pData,DataSize,D3DX_DEFAULT,-1,-1,0, D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,colorKey,NULL,NULL,&pTexture); ○初期化部分(抜粋) if (pD3D==NULL) pD3D = Direct3DCreate9(D3D_SDK_VERSION); if (FAILED(pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&dmode))) return E_FAIL; hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &D3DPPWin, &pDEV); HRESULT hr = D3DXCreateSprite(g_pDEV, &g_pSprite); hr= g_pDEV->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&g_pBackBuffer); 何か気になる点や何かしらの手がかりだけでもよろしくお願いいたします。
読もうとしてるファイルはなんだって話
>>964 pDataの中身がおかしいんじゃねーの?
デバッグランタイムにしてエラーログみてください 以上
968 :
504 :2009/08/22(土) 11:59:39
以前XFileを独自形式で読取りたいと質問した物です あれから色々試してみたんですがどうしても最後にわからない所があるので質問します @当然ながら親から順番に計算するとします Aウエイトと影響するボーンは考慮してあると仮定します 最終的な頂点座標= 頂点座標×SkinWeightsの最後にある対応したオフセット行列×行列(※1)×直前の親の行列 ※1…この行列はAnimationSetの項目から作成したとする AnimationSetのFlgは0・1・2、すなわちScall(xyz)・Rotation(xyzw)・Trans(xyz)が必ずあるとする Scallは D3DXMatrixScaling Transは D3DXMatrixTranslation Rotationは D3DXMatrixRotationQuaternion でそれぞれ行列を作成した後に 行列= Scall行列 × Rotation行列 × Trans行列 で作成 で現在調整しているのですがうまく動きません、 どこか見逃し等があるでしょうか?
影響するのは親の行列だけじゃまいか?
>>506 でも同じく書いたけど
スキンじゃないアニメーションXfileは
描画出来ているの?
これが出来ているのといないのでは
影響範囲が違います。
971 :
504 :2009/08/23(日) 08:10:36
>>969 自分の直接関係するボーンの行列は使用しないんですか?
>>970 Tボーズをしている素のMeshの事ですか?
>>971 自分の直接関係するのは親だろ。
手のひらは手首が親、手首はヒジが親、ヒジは肩が親・・・みたいな感じで。
例えば2倍の大きさで表示しようとしたら、
>>968 のを肩から見たとしても
肩:2倍 ヒジ:2倍x直前の親の行列(2倍)=4倍 手首:2倍x直前の親の行列(4倍)=8倍 ・・・
と手が巨大になってしまうわけで。
>>971 スキンメッシュじゃない、
複数のメッシュのアニメーション付きXfileのこと。
要は、アニメとフレームの実装に間違いはないんだなって
聞いてるの。
>>972 それは間違い。
>>973 実装じゃなくて元データがCreate...FromXで正常に動くかどうかってことだろw
元データは正しいとの前提で、実装部分の問題点を検証しているんだろ。
976 :
504 :2009/08/23(日) 18:01:36
元データはビュアーやskinmeshのサンプルでtiny.xと差し替えたりしましたが 正常に動作しました。 ちなみにメッシュは1Meshです
CPP 無駄に分割 デスマ行き BOOL遷移じゃ いけないのかな?
978 :
デフォルトの名無しさん :2009/08/24(月) 03:33:18
スキンメッシュのアニメーションXfileに輪郭線を表示できるエロい人いる?
979 :
641 :2009/08/24(月) 03:38:32
輪郭線の出し方知ってりゃ出ない質問だな
980 :
デフォルトの名無しさん :2009/08/24(月) 03:43:50
輪郭線だけがアニメーションしないんだがw
まさかと思ったけどエッジ検出なんだなw その辺は画像処理スレのがレベル高いわw
視点とオブジェクトを同じに動かそうと思うんだけど なんかオブジェクトがカクカクずれるのはなんで?
最新のSDK入れてるんだけど、D3DXCreateEffectFromFileが 日本語パスからの読み込みに失敗します。 前からこんなだったっけ?
何人もいると思うが… ダイレクトセックスのスレかと思った
半透明の四角形を表示しようと思って、色に0x55ff00ffを指定しましたが全く透明になりません。 どうすればいいのでしょうか。 directX初心者ですがお願いします。 HRESULT creatRect(int x,int y,int w,int h) { CUSTOMVERTEX vertices[] = { { x, y, 0.0f, 0.0f, 0x55ff00ff, }, { x+w, y, 0.0f, 0.0f,0x55ff00ff, }, { x, y+h, 0.0f, 0.0f,0x55ff00ff , }, { x+w, y+h, 0.0f, 0.0f, 0x55ff00ff, }, }; if(g_pVB!=NULL)RELEASE(g_pVB); if( FAILED( g_pD3DDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) return E_FAIL; VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); return S_OK; } void fillRect(int x,int y,int h,int w) { creatRect(x,y,h,w); g_pD3DDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pD3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); }
レンダーステートで半透明になるように設定はしたのか?
>>986 レンダーステートで設定したらできました。
有難うございました。
DirectX11の対応OSって、WindowsVistaと7でしょうか? XPが再サポートされるという記事を読んだような記憶があるのですが、ぐぐっても出てきません。 私の勘違いでしょうか?
アフォですか?
>>988 DX11 は Win7 じゃないと使えない。
WARP10 とか Feature Level の DX9 世代 GPU サポートと勘違いしてる?
結論を言えば、XP で DX10 以上は使えない。
D3DX避けようとして、シェーダコンパイラを作るはめになるんですね わかります
>>990 DX11ってVistaで動かないの?
流石にそれはないと思うが、、
>>992 DirectX 11は7からの対応と発表されているが、
実際には最新版のDirectX SDKをインストールすればWindows Vistaでも動作する。
とはいえ、正式なバージョンが出るまではなんとも言えないな。
994 :
デフォルトの名無しさん :2009/08/25(火) 22:24:52
SetRenderTarget()で2枚分のテクスチャにDrawSubset()で描画して 2枚のテクスチャをプログラマブルシェーダでミックスして表示させようとしたのですが 背景色が表示されるだけで肝心のDrawSubset()で描画したメッシュが表示されません。 どうすればいいんでしょうか?
笑えばいいと思うよ
>>993 DX11がVista以降なんてとっくにMSが発表してるだろう
なにを自信満々に・・
しかしgoogleで「DirectX11」と検索しても 何もヒットしないあたり、MSやる気ないの?死ぬの?
998 :
デフォルトの名無しさん :2009/08/25(火) 22:54:16
乙
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。