【C++】 DirectX初心者質問スレ Part34 【C】
回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part33 【C】
http://hibari.2ch.net/test/read.cgi/tech/1293016261/
980を踏んだら作るべきらしいので、前スレの1さんのほぼコピペですが建ててみました。 初スレ建てなので、もし不備が有りましたらすみません orz
スレチかもしれませんが該当しそうなスレがここしか無かったのでここで質問させてもらいます。 Visual C# 2010 から SlimDX を利用しています。 画像を表示するためにDirect3D9でテクスチャ表示をしようと思っているのですがどうしたら良いのか教えていただけないでしょうか? DirectInputを利用したキーボード入力、Direct3D9を利用した背景色の設定は出来ました。
6 :
はじめまして。 :2011/02/21(月) 00:55:36.87
Visual Studioで error LNK2001: 外部シンボル "_IID_IDirectInput8W" は未解決です。 というエラーが出ます。 追加のライブラリ、追加のインクルードを行い、追加の依存ファイルも書きました。 しかし同じエラーになります。 #define INITGUIDと書くと、 fatal error LNK1120: 外部参照 2 が未解決です。 が fatal error LNK1120: 外部参照 1 が未解決です。 に減りました。 どこが間違っているのでしょうか。。。
dinput8.lib;dxguid.lib;ちゃんとリンクしとる?
8 :
はじめまして。 :2011/02/21(月) 01:26:29.19
追加の依存ファイルは、上記のように dinput8.lib dxguid.lib comctl32.lib としています。 追加のライブラリディレクトリは C:\Program Files %28x86%29\ Microsoft DirectX SDK %28June 2010%29\Lib\x64 を指定しています。
10 :
はじめまして。 :2011/02/21(月) 01:31:33.33
C:\Program Files %28x86%29\ Microsoft DirectX SDK %28June 2010%29\Lib\x86 と\x86のように変更したら通りました。 まさかここだったとは。。。 7さん、ありがとうございました。
すみません。9のSDKサンプルの加工品でモーション付きモデルを再生しているのですが、 キャラクターの着せ替え(メッシュの入替え)が上手く行きません。 現状、LPD3DXFRAME に受け取ったモデルから、FirstChild、Sibling(ボーン)を辿り、1つだけメッシュコンテナのポインタを入替えてます。 そして以下の様な事が起きています。 「モーションは再生されず、原点にポツンと描画されます。(これは当然なのでしょうね。)」 「2ボーンにウェイトがあるメッシュは、1ボーン分だけ形状が保持され、あとの形状は崩れています。」 「どこかで入替えを行ったメッシュは、入れ替え前のメッシュが描画される事は一切有りません。(これも当然?)」 まずこの入替え方自体、メッシュはほとんど複数ボーンに関わっているから、かなり不適切な気が。 状況的には、強引に全ボーンのマトリクスを追って取って付けてすればなんとかなりそうな気もしますが・・ 何かやり方が間違っているような、正しい入替え方が有るのではという気がしてなりません; 何でも構いませんのでご指摘やご助言を頂けますと幸いです orz
>>11 頂点ごとボーンに対応したウェイトデータがあるわけだけど
その辺もボーンとメッシュの関連ができているデータでやってるの?
んなことできんだろーか?
メッシュだけ入れ替えって可能なんだろか?
着せ替えって違うモデルのボーンにアニメーションを
対応させるみたいな対応になった気がすっけど
的なつぶやき
13 :
11 :2011/02/21(月) 16:22:07.27
>>12 ご助言ありがとうございます。ほかで頂いたご助言を私が間違って解釈し記憶していた様です。
何となくやり方が想像できました。どう組めば無駄な処理が減るか考えつつ色々試そうと思います。ありがとうございました。
自分用の2D描画ライブラリ:DirectX11作ってて、縮退三角形使った最適化したのにパフォーマンス全然変わらなかったんだけど、 縮退三角形での最適化って、すごく効果低かったりするん・・・?
今どき、縮退三角形とかいちいち使うか? TRIANGLELISTで統一だろ普通 特に2Dとなれば、頂点数もたかがしてれてるし
2Dで8000万ポリゴン使ってパーティクル表現
2Dだと二面毎に縮退二つ挟まなきゃならないんじゃないの? 頂点数多くても相性最悪じゃね?
DirectXで、pngファイルを読み込んでテクスチャを作成して、それをスプライト上で背景画像として表示させてるんですが、 画面がリサイズされたときに、このテクスチャも画面サイズに合わせて拡大縮小させたいんですが、どうやれば実現できるでしょうか?
拡大縮小させたいのが背景だけなのか画面上全てのものをウィンドウにあわせるのかで違う
20 :
18 :2011/02/25(金) 01:56:23.57
現状は画面のリサイズに合わせて”すべて”を拡大縮小させる方向です。
だったらターゲットとするウィンドウサイズの正射影行列をプロジェクションにするのが手っ取り早い
DXUTを勉強してるんだけど、サンプルプログラム見てて疑問が沸いてきたんですが、 フリップ処理って内部でやってるんでしょうか?それともダブルバッファリングをするには特別な設定が必要なんでしょうか? レンダリングの箇所(OnD3D9FrameRender)では、IDirect3DDevice9::Present()をコールしなくても描画されます。
Windows 7、Visual Studio 2008の環境で、DirectInput8による入力を実装しているんですが、 画面が一回非アクティブになると、再度アクティブになった後も入力を受け付けてくれません。 デバイスからの入力に依存しないものは反映されているので、フリーズしたわけでもありません。 毎ループAcquire()を実行するようにしてみたり、 デバイスのポインタがNULLになったらDirectInputから作り直すようにしてみたりしましたが、変化がありません。 ネットで調べてみると、ウィンドウのアクティブ・非アクティブの際にAcquire()とUnacquire()を実行してるようなんですが、 同じ事をしてみようとすると、 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&IDirectInputDevice8W::Acquire' を使用してください などとエラーが出て実行できません。 とりあえず非アクティブから復帰しても入力を受け付けるようにしたいんですが、どうすればいいのでしょうか?
>>23 SDKのサンプルでもそうなるの?
サンプルとそっくりに書いてみれば?
25 :
デフォルトの名無しさん :2011/02/25(金) 18:42:30.82
HLSL内でif文って1個しか書けない?
27 :
デフォルトの名無しさん :2011/02/25(金) 18:54:14.89
if(S > 0.99f) Col = P1; if( ( Z1 ) < Limit && ( Z2 ) < Limit && ( Z3 ) < Limit && ( Z4 ) < Limit ) Col = 0.0f; おかしいところ無いよね?どちらか1つ消すとエラーが出ない。
>>27 Colに2回突っ込んでるから駄目とかそーゆーのじゃねーの?
float4 Col; Col = P1; Col = 0.0f; return Col; これは問題ないでしょ?大丈夫だと思うけど
VS_OUTPUTになるもんに2回突っ込むとバグんなかったっけ? いや、気のせいかもしんないw
>>22 DXUTMainLoopでよんでるっぽい
シェーダー内で使える命令数はチップによって違うから ビデオカードによって使えるif文の数や回せるforループの数が違うなんてよくあるはなし
XAudio2で簡易なオルガンのようなソフトを作りたいと思い SDK付属のサンプルを元に 色々と捻って試しているのですが、和音(と言うより、単純に複数の音)を重ねて鳴らす事が出来ません。 単純に1つづつ鳴らす分には、問題が無いのですが、 例えばAキーを押すとラ、Bキーを押すとシが鳴る状態(それぞれ1秒間発音)で、 ポンポンと(1秒以内に続けて)キーを叩くと、2音が重なるはずの所が重ならず、 「プー プポプポプポ ポー」 のようにグリッチしたように発音されます。 XAudio2単独で複数音を 重ねて 鳴らす(またはBGMに重ねて効果音を鳴らす)のは、無理なのでしょうか
35 :
34 :2011/02/26(土) 01:17:35.46
ちなみに処理としては、2系統で実験していました 1.シングルスレッド(つまり同一スレッド上で)、それぞれ2つのソースボイスを作成し、 キー押下のタイミングで、それぞれを SubmitSourceBuffer & Start 2.マルチスレッドで、それぞれそのスレッド上で CreateSourceVoice した物を、 それぞれのスレッド上で SubmitSourceBuffer & Start ちなみにどちらも COMの初期化は CoInitializeEx( NULL, COINIT_MULTITHREADED) で行い、 XAudio2Create はメインスレッドで行っています。 またどちらのケースでもサブミックスボイスは 使用/不使用を試していますが どちらも上手くいきません。
36 :
デフォルトの名無しさん :2011/02/27(日) 10:45:48.98
Direct これのうまく動くサンプルか何か下さい...
37 :
36 :2011/02/27(日) 10:47:55.35
ごめんなさい送信ミスです
しかも、それで終わりかよ!
39 :
36 :2011/02/27(日) 11:25:49.25
40 :
36 :2011/02/27(日) 14:57:51.92
ちょっと質問です。DirextX 9.0、ピクセルシェーダ 2.0 を使っています。 バックバッファAにテクスチャBを、複雑な合成、 例えばスクリーン合成やオーバーレイ合成を行いたいのですが、方法が分かりません…。 AやBの大きさは、コンパイル時には予想できないとします。 オーバーレイ合成は以下の計算式になります。 if (dst < 0.5) result = 2 * dst * src; else result = 1 - 2 * (1 - dst) * (1 - src); シェーダを使っても dst の値は取得できないし、固定パイプラインでも上手く行きません。 新たなバッファCを準備し、AとBの2つをシェーダの入力とするしかないのでしょうか? その場合、例えばAの大きさが 800×600、Bの大きさが 10×10 程度でも、 書き込まないといけないピクセル数は 800×600 になってしまい時間がかかります。 もし B が1枚じゃなく B1、B2、… と多くあった場合、ひどいことになってしまいます。 スクリーン合成やオーバーレイ合成が、そんな特殊なこととは思えないので、 もっと手軽な方法があると思うのですがなかなか見つからず…。何か方法はないでしょうか?
オーバーレイって人生で使ったことないけど一般的にどういう用途で使うもんなんだろ?
C++ なのか .NET なのか
>>43 それは自作ソフトの話なのか、ただDirectX9.0c使ってるソフト使うとバグるのか。
前者なら書き込む板間違ってる。
ベクトルをある位置に向かせる関数とかないですか?
空間だと大変だけど 対象が平面なら角度だせばよくね?
外積とかで求められそうなのでもうちょっと調べてみます。
え?www そんな大げさなものなの?w
>>49 「atan2」とそれっぽいキーワード入れてググレよ
角度でやんねーとダメだろ
時計の9時の方向へ向いてるベクトルを3時の方に回転させたいときとか
角度じゃないとどーにもならんっしょ?
つ正規化
すみません。カラーリングについてなのですが、 白・黒・青の3色(境界に中間色が多数有り)のテクスチャを貼ったモデルを、 青の部分だけを、黄、赤にしたり明暗を変えて、白・黒の部分はできるだけ保護したく思っています。 現在はメッシュの頂点色をいじってカラーリングしており、これでは白色の保護が無理な様で・・。 どうすれば白色を保護してカラーリングできるでしょうか・・?
54 :
47 :2011/02/28(月) 19:05:29.16
平面だと向きを変えられるのですが、空間だと難しくなります。 XZ平面上ではY軸回転で向けれるのですが、もう一つの軸(X軸orZ軸)回転で向きを変えようとすると デタラメな方向に行ってしまいます。
>>53 方法1・予め色変更済みのテクスチャを用意しておき切り替える
方法2・テクスチャのBITMAPを取り出して加工する
方法3・ピクセルシェーダのタイミングで画素のRGBからHSVを求めて
HueやVolumeを変えて再びRGBにしたものを適用
ぱっと思いつくのはこのくらい
>>34 当然可能だし、シングルスレッドで十分なことが可能。
XAudio2自体マルチスレッドをできるだけユーザに意識させない作りなのだから
シングルでやるがよろし
初期化コード類晒したほうがいいと思われ
58 :
53 :2011/02/28(月) 22:02:07.93
>>55 ありがとうございます。テクスチャも加工回数を最小にすればきっと実用的なんですね。
そしてピクセルシェーダで触る事も出来るんですね。HLSLの勉強が進んだら実現したく思います。
ご助言ありがとうございました。
>>41 >新たなバッファCを準備し、AとBの2つをシェーダの入力とするしかないのでしょうか?
これはそのとおり、バッファCを用意するしかない。
>その場合、例えばAの大きさが 800×600、Bの大きさが 10×10 程度でも、
>書き込まないといけないピクセル数は 800×600 になってしまい時間がかかります。
これは違う。
たとえバッファAとバッファCが広大でも、
バッファBを覆うだけの、十分小さいポリゴン片で描画してやれば
そういう無駄は出ない。
クォータニオンを使って2つの軸の回転を合成するにはどうしたらいいのですか? 入力:2つの軸と角度 出力:回転マトリックス したいのは上述通りです。
2つのクオータニオンを作り掛け算してその後行列に変換すればいい
もしも
>>61 が書いてる内容自体がわからないなら、四元数そのものについて調べて理解が必要
任意の軸周りの回転はクオータニオンで表せるから
64 :
デフォルトの名無しさん :2011/03/02(水) 00:27:52.44
PIXで頂点シェーダ(vs_2_0)のアドレスレジスタ(a0)の値を確認したいのですが、 値が空白になっていて見れません。PIXでは見れないのでしょうか? (環境:Core2Duo, Q35Express, WinXP SP3, DX9(Jun2010))
65 :
41 :2011/03/02(水) 00:31:22.68
すみません、めちゃくちゃ遅レスで申し訳ないのですが…。
>>59 >バッファBを覆うだけの、十分小さいポリゴン片で描画してやれば
これが理解できていません。
800×600 のテクスチャAに、10×10 のテクスチャBをそのままのサイズでオーバーレイ合成したいとします。
合成用のテクスチャCは、作った段階では当然空っぽです。
どう工夫しようが、800×600 個の点を打たないとCは埋まらないですよね?
CにAをコピーしてから、AとBをシェーダに送って10×10の描画をしないと完成しないと思います。
B1、B2、…となるとやはりやばいことになりそうです。
うーん何か思い違いをしてるでしょうか…
>>65 1000x1000のテクスチャを2枚、A1とA2。
10x10のテクスチャを1枚、B。
とする。
>CにAをコピーしてから、AとBをシェーダに送って10×10の描画をしないと完成しないと思います。
最初のフレームでは、入力はA1とB、出力先はA2。
次のフレームでは、入力はA2とB、出力先はA1。
これでCにAをコピーといった過程は必要なくなる。
>どう工夫しようが、800×600 個の点を打たないとCは埋まらないですよね?
例えば、500,500の位置にBを描画したい場合、
ポリゴン片の座標は、(500,500)、(510,500)、(510,510)、(500,510)となる。
Bのテクスチャ座標は、(0,0)、(1,0)、(1,1)、(0,1)となる。
A1(A2)のテクスチャ座標は、(0.5,0.5)、(0.51,0.5)、(0.51,0.51)、(0.5,0.51)となる。
A1(A2)は1000x1000の全ての領域を参照される訳ではなく
あくまで10x10の範囲だけしか参照されない。
点を打つ領域も、あくまで10x10のみ。
まあBが複数ある場合は、相応の工夫が必要。
わるいわるい よく考えてみたら、俺が間違ってるわ。 やっぱCへコピーが必要そうだな。 何かうまい方法はないかな?
コピーコピーって言ってるけど 本当にコピーなのかただのレンダリングなのかはっきりさせてほしい
d3dxfont使ってゲームを完成させたが、 文字量が増えるほどにアフォみたいに重くなる d3dxfontは重くてつかいものにならいとのことなので テクスチャをレンダーターゲットにして あらかじめ文字をテクスチャ化して表示するのを試したら 確かに早くはなった。 しかしこれだと、定型文字はよいとして チャットなどのリアルタイムに変化する文字には対応できなくて困った DIBを使う?と高速に文字描画できる云々ってのを 過去ログで見つけはしたが、サンプルのリンクが切れてて参考になりませんですた よさげなサンプルがあるサイトはございませんか?
過去ログ見てないけどDIB云々てのは、単にDirectX使わないで 普通にGDI関数でビットマップ領域に描画させてって話じゃね TextOutか何かで
72 :
69 :2011/03/05(土) 14:25:21.76
>>70 このサイトちら見したけど
テクスチャをレンダーステートにして文字を書いておくのと
基本構想は変わらないんじゃ?
チャットみたいにどんな文字が使用されるかわからない場合でも速度でるのかな?
どのくらい速度出るのか検証中
>>71 デバイスコンテキスト取得して
オンメモリのビットマップに普通に文字描画するまでは
やったことがあるんでイメージできるんだけど
それをテクスチャに変換して張り付けるまでの工程がさっぱりわからん
d3dxfontよりは明らかに早いらしいけど
動作するサンプルがほしいお
>>72 必要となったときに1度だけ作ってあとはそれを使いまわせばいい
aが必要となったら一度だけaのピクセルデータを取っておいて(テクスチャに書いて)
使いまわせばいい
一旦テクスチャ作る以上には早くできないだろ 新しく作成される文字は1フレで1文字程度なんだからテクスチャ作るコストはたいしたことないな マップチップの原理で遅くなってるだろうからさらに1行ごとにテクスチャにしちゃうとかして DrawPrimitiveの回数を減らしてみたらいいんじゃね?
>>73 やっぱりそんな感じですか。
表示したい文字がプールしたテクスチャ内にあるか調べるとか
結構めんどくさそうですな。
>>74 一旦テクスチャつくるほど早くなくても
d3dxfontより早ければいいんですけどね〜
あいかわらず動くサンプルがみつかんね
入力された文字を行ごとにテクスチャ化してプールしておいたとしても、
今、入力している文字とかリアルタイムで値がかわるFPSの表示とか
考えれば考えるほどまんどくさ
とりあえず半角英数字のビットマップフォントだけでも用意して誤魔化すか〜
楽したいだけなのにどんどん苦労する方向に向かってんなw
メリケン人は50文字程度のビットマップフォント用意するだけでいいんだよな。 考えてみたらまじでウラヤマシス。
なんだこいつ ごちゃごちゃいいわけばっかりしてやらないだけじゃん
>>75 >表示したい文字がプールしたテクスチャ内にあるか調べるとか
そんなもんstd::mapにでも登録しておけば一発やろが!
おまいらIDirect3DSurface9::GetDCがあるのになんで教えてくれないのって感じだ
>>79 低性能PCだとテクスチャ作成時間がバカにならないので結局やめた
STLのこと忘れてた ありがとう
>>78 ね
こ
だ
い
す
き
まあ本当に楽をしたいならもっと高級なライブラリを使うわな
簡単なライブラリってあるの?
×簡単な ○高レベルな Unreal EngineとかIrrlicht EngineとかOgreとか
難しそうですね、国産のseleneもマニュアルもないし・・・
>>84 とりあえずチュートリアルでもやってみては?
英語でもドキュメント英語は簡単な場合多いし
すみません。地形との衝突判定についてなのですが、 今まではメッシュが1つで、それへレイを飛ばすだけで済んでいました。 しかし「上を歩いたり、中をくぐり抜けられるメッシュ」を複数配置、撤去したりしたく思っています。 (リアルタイムではなく読み込みを挟むごとに切り替える程度です。) こうした場合、やはり全てのメッシュを1つに纏めるべきなのでしょうか? 他に良い方法が有ったりするでしょうか。
内容によるからこれが正解ってのは無いけど、動かない地形なら判定省略できる部分もあんじゃね てかそのアルゴリズムで問題ないなら
88 :
86 :2011/03/05(土) 22:11:54.15
>>87 確かに。
中心距離が一定以内になった物だけレイを飛ばしたりすれば、そこそこの負担増で処理できそうですね。
ありがとうございました。
3Dの描画コストについて調べてるのですが ライティングやテクスチャを有効にして10万ポリゴンの球体を 毎フレーム1回のDrawPrimitiveで描画してみたところ フレームレートが60FPSを若干下回って50FPS程度 更に多くの50万ポリゴンを描画しようとすると10FPSを下回りました。 (どちらも頂点数はポリゴン数*3でトライアングルリストで描画) 実行環境はGeforce8600GT搭載グラボを使用してるPCなのですが 勉強不足なのでプログラムに問題があって遅くなってるのか否か分からず困ってます。 正直思っていたより遅くて疑問なのですが、実際これだけのポリゴン数描画しようとしたらこのくらい描画負荷が掛かるものなのでしょうか?
PS2で毎フレームテクスチャつきの3万ポリゴンが出れば御の字って話だったような気がする。 そのもうちょっと後の世代だから数字自体は妥当なきはするけどね。 ところで、10万ポリゴンあったら何ができるか把握してるか? 1万ポリゴンのキャラが10体でるんだぜ?imasのきゃら5人くらいを1画面にだせるんだぜ。 エロゲで使われるようなやつでも3体は出るから会話とか成立しうるし。 で、まず、メタセコイアあたりで1万ポリゴンのオブジェクト作ってみろよ。 どれだけの表現を詰め込めるか思い知るが良いさ。
ソフトウェア頂点処理でやってたとゆーオチじゃね
>>89 は静止画用ハイポリモデルをリアルタイムに扱おうとしてる雰囲気に見える
>正直思っていたより遅くて
名前が一人歩きしてるせいで、過度な期待と思い込みをしてる人はよくいる
ぶっちゃけ今の世代のビデオチップは フィルレートに足を引っ張られて頂点処理能力は余りまくりだから 頂点数だけで比較するのは意味無い 描画を全くさせないで頂点演算だけGPUにやらせてみなよ スペック通りの数字がでるから
94 :
89 :2011/03/06(日) 11:34:35.68
>>91 エスパーありがとう
ソフトウェア頂点処理してました・・・
デバイス作成にハードウェア頂点処理を指定したら
50万ポリの描画も余裕で60FPSに収まりました
>>90 ,92,93 も貴重なご意見ありがとうございました
プログラムからDirectXのバージョンを確認するには どうすればいいのでしょうか? ググっても全然ないです
directsetupgetversion
directsetupgetversion に一致する情報は見つかりませんでした。
>>95 MSDNに「DirectX のバージョン番号を直接取得する方法はない」って書いてる。
間違ってたらゴメンネ。
なんでプログラム内部からバージョン知りたいん?
xつけろ
あとはdxdiagのcomサーバからも取得できたか よく覚えてねえや
サポート用にエラーログとかにつけたいと思ったことはある
そういう用途なら各DLLのバージョン番号を見た方がいいんでね?
>>103 多分だけど、
#include <xstring>
を追加すれば行ける気がする
std::wstring は Windowsだと xstring っていうヘッダにあるってか DicrectX関係ないこれ
なんで掲示板のある解説サイトの質問をわざわざ2chでするのかねえ
106 :
103 :2011/03/07(月) 19:44:31.60
>>104 >ってか DicrectX関係ないこれ
すみません。自分も書き込んでから気がつきました
あと、xstringを追加しても機能してくれませんでした。
xstringなんかincludeすなw vcのxなんちゃらは全部internal headerだぞ
>>106 試しにそのサイトにあった d3ddebugfont.h をDLして試してみたけど、
普通に通るんだが。 もちろん アーカイブされてたヘッダだけだと当然
windows.h やDirectX関係のヘッダがincludeされてないので足したけど
109 :
デフォルトの名無しさん :2011/03/08(火) 00:15:23.88
シェーダーで深度を使って影を出しているのですが、遠くまで広い範囲を描画すると影の質が落ちてしまいます。 きれいな影を作るいいアイデアはありますか?
>>109 方法1:カスケードシャドウマップを使う
方法2:できるだけ狭い範囲での深度テクスチャを作成する
方法3:別な影生成方法に切り替える(シャドウボリュームとか
方法4:ソフトシャドウに挑戦する(影をぼかす
方法5:あきらめる
方法6:描画自体をレンダリングエンジンライブラリを使ってそこでいい方法を探す
とかがパッと考え付くところかなぁ
ジャギが出るのは深度バッファシャドウの欠点だから仕方が無い
>>103 はDirectXを勉強するまえにCやらC++やらの勉強することをオススメする
112 :
103 :2011/03/08(火) 04:19:45.47
>>108 なんか散々悩んだあげく、std::wstring strという形にしたらそれだけで通りました。
Visual Studioの仕様が問題だったのかもしれません。
道具を使いこなせないのを道具のせいにするなw
問題なのはVSの仕様じゃなくてお前の知識
>>112 全然VSの固有仕様とかじゃないです
他にも言われてるけどDirectX以前の話なので、ちょっと真面目に基礎的な実験やテストコードでも書くべき
>>112 char と wchar_tの違いをしっかり理解するんだ
Directxなどまだ早い
そこのサンプル落としてみればわかるが、ヘッダの先頭に using namespace std; とか書かれてるわけで(その是非はとりあえずおいとく) それなのにstdを明示しないとコンパイル通らないってのはおかしくないか?
スレチだけど、そういう混乱が起きるのが嫌だから using namespace はなるだけ使わず、あるいは使うとしても 翻訳単位の中で影響が小さくなるように書くのが普通 そのサンプルはヘッダに全部書いちゃってさらに pragma once まで書いちゃって さらにusingまでしちゃってるからあんまり良い内容じゃないよね よくわかった上で使うか適宜修正しないと、特に言語初心者当たりがハマる
どうなってれば余計な心配や対処をしないで済むか、 まで話が及ぶと完全にスレ違いになるからその辺で。 わかんない人は入門書読み直すか、言語スレへ
俺のIDも凄いぞ
透視影マップの実装について詳しく書かれたサイトありますか?
カスケードシャドウマップでもいいです
DirectX SDKにサンプル入っとるやろ
バージョンは?
あ?
SDKのバージョンをおねがいします
一番あたらしいやつ
thx
まいった・・・OSがXPだからDX11のサンプル実行できない・・・
Perspective Shadow Mapでググってみては。サンプル配ってるサイトあったけど。
ワールド*カメラビュー*プロジェクション*ライトからのビュー*プロジェクション うまくいかない・・・視点を動かすとなぜか影の角度も動いてしまう・・・
てす
D3D11のデバイスをFEATURE_LEVELを9_1で作成し、テクスチャ生成時に D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEXを指定すると、以下のエラーが発生します Test.exe の 0x00000000 でハンドルされていない例外が発生しました: 0xC0000005: Access violation FEATURE_LEVELを10_0で作成した場合や、KEYEDMUTEXのフラグを指定しない場合はエラーになりません リファレンスなどを見ても、機能レベルによって作成できないなどの表記を見つけることが出来ず 仕様なのか使い方の問題なのか分からず困っています。何が問題なのでしょうか? やりたいことは、DX10に対応していないビデオカードによる、D3D11とD2Dのサーフェイス共有です よろしくお願いします。
本当にデバイス作成に成功しているか?
KEYEDMUTEXのフラグを指定しなければ、そのデバイスでの様々な描画が正しく動いているので問題ないようです
確かlevel9_xで共有テクスチャやる場合フォーマットに制限があったはず デバッグランタイムでわかりやすい警告出してきたはずだから見てみて それとlevel9_xだと共有テクスチャの動作が怪しくてうまく使えた試しがない パフォーマンスが許容できるならロックして描画終わるのを待つ方式をお勧めするよ
139 :
138 :2011/03/09(水) 14:14:36.26
x 共有テクスチャ o 共有テクスチャのIDXGIKeyedMutex
回答ありがとうございます 確かにKeyedMutexで無い共有であれば成功するようですが、同期が取れずに表示がおかしくなります ロックして描画を待つと言うのはどうやるのでしょうか。普通のMutexで同期は取れないですよね?
directx9だが CreateDeviceをビルドして実行して、 作成されたウィンドウにマウスカーソルを乗せたままにしておくと、ビジー状態のマウスカーソルから元に戻らない DXUTのEmptyProjectの方ではしっかり元に戻ったんだが CreateDeviceのやり方とEmptyProjectのDXUTでは何が違うんだ?
お前が作った窓の問題だろ
ありがとう
ウィンドウクラス登録時にちゃんとカーソルを指定しないとそうなった気がする
146 :
142 :2011/03/09(水) 23:32:47.70
147 :
デフォルトの名無しさん :2011/03/10(木) 05:17:04.42
深度って距離が反比例曲線になってますが直線にする方法はありますか?
>>141 具体的にありがとうございます!
サンプルは余計なこと色々してて分かりにくいですが、なんとなく理解出来ました。こういうことですよね?
・USAGE_DEFAULTを共有するけどこいつは直接ロックできない
・USAGE_DEFAULTからUSAGE_STAGINGにコピー後、STAGING側をREADロックすることで結果的にDEFAULTへの描画を待機
・STAGINGは同期用にのみ使用し、コピーされたデータやロックしたデータ事態に意味は無い
サンプルではバッファを複数回してるようですが、これはREADロック時に描画完了待機して非効率なため、
実際には数フレーム前に書かれたデータを取得するようになってる?
3DRPGのゲームの主人公って何本ぐらいボーン仕込んでますか? 表情変えるのはテクスチャだけですか? それとも最近なら口にボーンとか仕込んでやるんですか?
>>150 ローポリかハイポリかリアル系かデフォ系かで話がぜんぜん違う
初心者は顔のテクスチャ切り替えから入るといいかもな
>>150 ここム板だからあえて聞くけど、ボーンて呼ばれる物の処理イメージは浮かんでるかい?
それが前提にあれば上で言ってる奴の話も見えてくるぜ
どれの目的で、どんな内容ならどこまでやれそうか、とか
Xファイル形式から独自フォーマットを作りたいのですが、参考になるサイトなどはないでしょうか?
参考もなにもXファイルならD3DXで全部読み込んでくれるんだから 出来上がったメッシュう情報から必要なものを抜くだけでいいじゃない
こうしたほうが効率がいい、っていうのはいろいろあるけどソレ自分で考えて作るから 独自フォーマットなんだけど(・ω・)
この独自フォーマットの正しい使い方を教えてください ↑他人の知識は真面目にコピーしますが、自分で考える能力はありません 何から何まで人から教えてもらいます。の意味
最悪だなw 相手にしたくないタイプだなw
てか、コピーして使うだけなら Xファイルをそのまま使うのとどこが違うんだ?
と言うか、
>>156 はそもそも全部他人のサイトコピーだけで作ってて、
中で扱ってるデータにしろ処理にしろ、意味わかってないから聞いてんじゃね
"独自の"フォーマットなんて、それこそ自分の都合で取っておきたい内容を
書いて読むだけなんだから、参考サイトもへったくれも無いよな
俺も自分の都合でファイル書き出してそれ読んで、とかテストコード用にしてるのあるけど
まさに言葉どおりの事しかしてない。 てか誰でもそうだろ。 独自の=自分の都合の フォーマットなんだから
そんな訳で
>>158 に同意
保存しときたい情報なんて大抵決まってるもんな それがわからないってんなら、3DCGの基礎からやり直し あるいはファイル保存の方法がわからないってんなら 言語の基礎からやり直し
165 :
156 :2011/03/13(日) 17:53:03.07
>>157 読み込んだXファイルから個別に情報を引き出せるんですね!
今まで読み込んだ物をそのまま拡大・回転・移動しかしてませんでした。
ちょっとその辺を調べてみます。
>>165 情報の取り出し云々より「自分がやろうとしてることに、データの何の情報が必要なのか」が
判ってなければそっちから勉強することをオススメする。
君も必死だな いつもモデルデータの話がでるとモデリングソフトを触れって言う人かい?
一人が話してるとでも思ったのかい
>>166 とりあえず今のところはシンプルに正方形の箱を作って、
任意軸三つの相対位置に頂点を置いて、姿勢を自由に制御する事が目標ですね。
インデックスバッファを手打ちで作ったら、どうも上手い具合に面が張れなかったのと、
後々複雑なモデルを作る上でモデリングソフトに頼る必要があるので、
早い段階でXファイルから独自フォーマットのモデルデータを作って利用しようとしています。
ただ調べているうちにXファイル形式だとマルチテクスチャなど、
対応していないものもあるらしい事がわかったので、
独自フォーマットの方は最終的にモデリングソフトから直接はき出せるようにしたいです。
>>167 少なくとも独自形式の話では2回しか発言してないけどw
それに
>>166 で言ったことが理解できないなら3Dでマトモにゲームなんて作れないし、
モデリングソフト触れとかはなんの関係も無い話なんだけど。何を一人で興奮してるの?
>>169 手打ちデータで上手いこと箱だせないならちゃんと出せるまで理解しないとあとで苦しくなるよーたぶん。
もしその部分のコードとかあるなら貼って相談してみるとか。
>独自フォーマットの方は最終的にモデリングソフトから直接はき出せるようにしたいです。
ってなるとモデラーのプラグインの開発とかの話になっちゃうから、初めは基本何かのモデルデータを
パーサー通して独自形式にすればいいと思う。俺はXSIの.xsi形式から必要なデータだけ取り出して独自形式にしてるし。
読み込み→変換して吐き出し、はどの道独自形式なら自分でパーサー書く必要があるけど・・・。
お前もおちつけw
そして俺は Blender側はPythonで書いたexporter 取り込み側はC++で普通にって連携をしているのです
デバッグ表示を作っているのですが,2Dで楕円を書きたいです. みたところ,適当なプリミティブ描画関数が見当たらないのですが, どのように描くべきでしょうか? ラインリストで楕円ぽく線分を並べるような方法しかないでしょうか?
テクスチャbitmapにGDI関数Ellipseで、とかそういう事じゃないとしたら 線分並べて近似
円形のメッシュ読み込んで表示したらいいがな
影用に近くからと遠くからの深度を2枚とってるんだけど カメラの端のほうが伸びるから重ね合わせは難しいな
端のほうは半透明にするなりしてぼかせばいいじゃない
>>174 日本人の方でないようですが,
Ellipse関数がGDIだけど使えるよ,ってことでしょうか?
>>175 3Dに慣れていないので,具体的な方法がわかりません...
デバッグ表示ですし,
とりあえず,慣れるまではGDI関数で実装してみます.
>>178 >日本人の方でないようですが,
>Ellipse関数がGDIだけど使えるよ,ってことでしょうか?
テクスチャ等のbitmapを対象としたGDI関数の Ellipse ならあるけど、
それはプリミティブ描画関数とやらじゃないから、画像として描画じゃなく
頂点並べてやりたいなら、CubeやSphereのような三次元プリミティブメッシュデータのような物を
欲しているなら、頂点並べて線分引いて円に近似した図形描けって事じゃね
わかんないなら素直に聞けよw
日本人じゃないワロタ 何のデバッグ表示をしたいのかわかんないからなんとも言えん。 文字列出したいだけならID3DXFontでいい。スプライトならID3DXSpriteでいいんじゃね?
3D機能とかまったく使わずにID3DXSpriteとかで 2Dゲームつくってて当たり判定のデバックとかで円を表示したいとかそんなとこじゃないの? ○かいた画像用意して拡大縮小変形してキャラと同じように描画しろよ なんかいろいろ言っても聞く耳もたなさそうだし
DirectXSDKに付属しているツール、ユーティリティを再配布することは可能ですか? 例えば、 SDK付属コマンドラインプログラムを、 GUIで使うツールを自分で作った場合、 そのSDK付属ツールは再配布可能ですか?
ダメ
では 「このフォルダに使うSDK付属ツールを自分でダウンロードしていれておいてね」 といった形は大丈夫ですか?
それならおk
すみません 今自分用のライブラリを作っているのですが Direct3Dの一部でDirectShowの動画を描画するようにするには如何したらよいのでしょうか? Direct3Dがあまり詳しくなくいくつか調べたのですが、あまり情報を引き出す事が出来ず少し悩んでいます よろしかったらおしえていただけないでしょうか?
すみません 書き込んでから言葉足らずに気がつきました。 Direct3DのBeginSceneからEndSceneの間にテクスチャのように処理群を挟んで描画 などをできるようにしたいのですが
日本語でおk
DirectShowって亡くなったんじゃね?
DirectShowは無くなってないよ。 DirectXからPlatformSDKに格上げになった。
DirectXのゲーム画面を保存するアプリを作っててライブラリ化しようとしてるんだけど CreateDeviceで自分のウィンドウハンドルを指定してデバイスを作らないといけないわけなんだけど キャプチャするためのデバイスで描画しないからウィンドウハンドルが要らない ライブラリ化してるから無駄な引数のやり取りをなるべく無くしたいんだけど ウィンドウ無しでCreateDeviceって出来るんですかね? 試しに0にしてみたらWindow7ではいけて、XPでは失敗しました たぶんWindows7は画面がすでにDirectXだからなのかと思ってますが どうすればいいか分かりますか?
ウィンドウハンドルは画面に描画する為に使う物じゃない
Windowsって内部の処理や扱いの1単位をウィンドウと表現していて、 それらの識別子として HWND を使っているので、画面に描画するしないに関わらず どっちかって言うと一番最初に渡しておきたいパラメタじゃね どうしても嫌ならデスクトップのHWND取り出して渡せばおk
>>194 HWNDをキーにしてそのデバイスのコンテキスト(DC)が引っ張れて
そのDCからそのデバイスの、例えば画素は何ビット構成かとか情報が引ける訳だから
画面に描画しなくても普通に必要
DirectDrawのアクセラレータが利用できませんと表示されます。 自分のPCにグラボは入っていないので3Dが利用できないのは構わないのですが、Drawが利用できない原因がわかりません。 DirectXの診断ツールで、DirectDrawのテストでは正常に機能しています。 どうすればDirectDrawのアクセラレータを利用することができますか?よろしくお願いします。
DirectInputのジョイスティックでの操作がうまくいきません。 SDK(June2010)の中にあったダイアログボックスにコントローラの状態が表示されるサンプルは正常に動きました。 でも自作のプログラム(ダイアログボックスは使用しない)に組み込もうとずっと奮闘してるのですが、どうも上手くいきません。 「前田稔の超初心者のプログラミング入門」というサイトにある「Direct Inputのプログラム」→「コントローラを使う」で 紹介されていたプログラムも、ソースを少しもいじらずに起動できましたが、やはり動きません。 原因が思い当たる人はいないでしょうか?
>>199 ジョイスティック自体が壊れている可能性とか。
あとコンパイラーによってはSetDataFormat()関数で指定する奴を
自前で用意しなきゃいけない場合もあるらしい。
まぁ、その場合はエラー出るだろうけど。
201 :
199 :2011/03/24(木) 07:05:36.13
>>200 JoyAdapterなどのジョイパッドのボタンにキーボードのキーを割り当てるソフトが使用可能なので、ジョイスティックはおそらく壊れてません。
XBOX360コントローラとPS2(変換アダプタ経由)コントローラの二つを使用していますが、どちらもダメでした。
SetDataFormatを行うときもエラーはでていません。
>>201 どう動かなくて、どう上手くいかないのか
エラーの状態とか、何が必要な値を返さないとか その辺詳細
動いてるサンプルと動いてない自作があるんだったら 両方を1行ずつデバック実行させればどこでおかしくなってるのかすぐ分かりそうなもんだが
SDKのサンプルが動いてるなら自作のプログラムが糞なだけだろw 思い当たるも何もそんなのエスパーじゃないとわからねーよ
205 :
199 :2011/03/24(木) 08:52:10.06
>>202 ジョイパッドで何か入力しても何も起きません。
GetDeviceStateしたときに返される値がSUCCEEDEDだった場合に、ジョイパッドの状態(DIJOYSTATE2の構造体)を参照するようにしているのですが、
一応GetDeviceStateは成功しているらしく、ジョイパッドの状態を参照するところまではいっているようです。
ですが、実際にジョイパッドを操作しても内部の値は変化していない(0のまま変わらない)ようです。
206 :
199 :2011/03/24(木) 09:06:00.15
>>203-204 確かに僕のプログラムは糞ですが、他の人が公開しているようなサンプルも全く動かないんです。
ようするに、一般的な描画系のウインドウを表示するプログラムでうまくいったものはありません。
SDKのサンプルは、ダイアログボックスのみが出てきて、に入力の値が表示されるというものだったので、そのまま利用できないかいろいろ試してみたのですが…
他の人のプログラムにあるように、WinMainのメッセージループ内から、状態の値を参照する関数を呼び出したりもしたのですが、結局同じ結果でした。
プログラムが原因なのか、また別の問題なのかもわからない状態で。
詳しい説明が全然できてないのがわかっています。でも、もしかしたら同じような状況を経験した人がいるかもしれないと思ってここで尋ねました。
もうちょいがんばってみます。
207 :
199 :2011/03/24(木) 11:31:53.03
解決しました。単純に記述不足でした。 迷惑をおかけしてほんとに申し訳ない。
勉強がてら簡単な描画エンジンみたいなもの作っていて 基本は素のDirect3DのAPI使って、デバイス依存する可能性が高そうな テクスチャ作成処理とかD3DXCreateTextureを利用してたりするんだけど D3DXとかDXUTって本格的なゲーム開発でも有効? (DXUTはまだ触ったことないけど参考までに)
はい。
辺に独自実装すると
>>206 みたいない
「ぼくはまちがってないのにうごかない」みたいなことになるから
最初はD3DXなりDXUT使っとけ
イランところに壁を作らないで済む
逆にハマって対処するのも知識が付く元だから、成果物を急がないならそれもアリ 壁って大事
自作アプリを半年ぶりくらいに動作させたところ、
マルチレンダリングターゲットに失敗していることに気がつきました。
以下のような状態です。
アプリをウィンドウモードで起動し、一度の描画で4枚のターゲットに
描画させているのですが、0番以外のターゲットへの描画に失敗しています。
(0番と同じ画像が、1〜3番にも描画されている状態)
尚、フルスクリーンモードでは正常に描画されています。
また、一旦フルスクリーンモードで起動した後に、ウィンドウモードで起動すると
描画に成功します。
プログラムに誤りがある可能性も考えられるので、以下のMRTサンプルソースを
ダウンロードして実験したところ、やはり失敗することを確認しています。
(こちらも、CreateDeviceに与えるパラメートをフルスクリーンに修正して
実行すると成功しています。)
ttp://marupeke296.com/DXG_No50_MultiPassRendering.html 原因としては、ウィンドウモードの場合において、何かしらの
必要な初期化や設定が抜けてるんじゃないかと思うのですが、わかりません。
同様の症状をご存知の方はおられませんか?
開発環境は以下のとおりです。
ハード:Geforce GTX460
OS:Windows XP
ソフト:DirectX SDK June2010、VisualStudio 2010
VRAMが足りてないだけなんじゃ
214 :
デフォルトの名無しさん :2011/03/26(土) 13:22:43.14
Direct3Dで質問です。 ウインドウモードで描画を行う際、ウインドウを左側に寄せて画面外に一部をはみ出させると、描画位置が意図せずずれてしまいます。 例えば画面左側半分を赤。右半分を青くしたとします。 この時にウインドウの左半分を、左画面外に出すと、ウインドウの中身が「赤く」なります。 どうやら描画座標が、ウインドウが画面からはみ出た分だけ右にズレるようです。 この現象は、初期化の際 D3DPRESENT_PARAMETERSのBackBufferWidth, BackBufferHeightに0を入れる。 もしくはウインドウのサイズとまったく同じ値を入れると起きないようです。 バックバッファのサイズを好きな値にしつつ、この「画面外に出すとずれる」現象を回避するにはどうしたらいいでしょうか? よろしくお願いします。
>>214 ウィンドウのクライアント領域とバックバッファのサイズが異なると発生する問題
ウィンドウサイズの変更などに対応する場合はサイズ変更が発生する度にデバイスのリセットが必要
IDirect3DDevice9::Reset を調べると助けになるかも。
DXUTGetElapsedTimeの最終フレーム以降の経過時間って何でしょうか? 前回呼び出しからの経過時間でしょうか?
>>216 前回呼び出しからの経過時間
ただしタイマー(CDXUTTimer)がストップ状態であればその間の経過時間は測られない
また、パフォーマンスカウンターがサポートされていなければ-1.0を返す。
DXUTのソース見た感じだとそう読めました。
ボリューム影についてわかりやすく書かれたサイトやサンプルあります? SDK付属のやつは難しい
Direct3DDevice9 を2つ作っておいて、 片方のデバイスを通して作ったテクスチャを、 もう片方のデバイスで使う(レンダリングする)とかは 可能ですか?? 片方のデバイスでNowLoading画面を出しながら、 別スレッドでもう片方のデバイスでテクスチャのロードとかを したいのです。
なんで意味不明な事を
・そんな用途で2つ作らない ・ローディングとDirectxは厳密には関係ない
NowLoading画面がアニメーションしてるとすると、 描画とロードが別スレッドで同時に発生するよね? もちろんマルチスレッド可能に設定すればいいけど、 マニュアルにはパフォーマンスが落ちるとか書いてあるし。 どうすればいい?
NowLoadingは必ずしもスレッドを必要としない なぜなら1フレームにバイト数指定してちょっとづつ読めばいいから プログラミング初心者ならこっちをオススメする。 スレッドを使うならば、ロードスレッドはずっとロード、 メインはそれにお願いキューでも作ってお願いする。 出来上がったら受け取る。受け取ったらCreate〜FileInMemory系で 「メインスレッドで」作成する D3DCREATE_MULTITHREADEDフラグあたり使えばDirectx9でもあれこれできるかもしれないが、 オススメはしない きちんと排他制御が使いこなせない限りマルチスレッドなど使うべきではない
マルチスレッド設定によるパフォーマンスの低下が 自分のゲームで問題になるかどうか結論出してからまたいらっしゃい
>>224 なるほど、やっぱりそういう沼くさいやり方になる訳ですね。
Create〜FileInMemory系は使ったことないので、色々試してみます。
ありがとうございました。
俺は面倒臭いからNowLoadingは別アプリにする手を使った、超楽 フルスクリーンだと使えないのが難点
起動時に全部読み込んでおいてNowLoadingだけそれっぽく表示しとけばいいんだよ
>>230 は
D3DCREATE_MULTITHREADED
のことね
232 :
214 :2011/03/27(日) 20:28:24.32
>>215 ありがとうございます。
・ウインドウサイズは可変
・バックバッファサイズはユーザーが決める。描画速度に直結するので多少汚くても小さめにした人がいるので
ということで、必ずしもウインドウとバックバッファのサイズを一致させることができないのですが、
ズレ現象自体を回避する方法は無いでしょうか?
(Resetは、ウインドウサイズが変わったらResetかけてバックバッファをウインドウサイズと同じにしちゃえってことですよね?)
たかだかゲームループ作るだけでスレッドなど必要ないだろう 必要だと思うなら使えばいいだけだが
>>233 お前のゲームはウインドウを移動させるとゲーム処理が止まるのか
>>234 たかだかそれだけのためにスレッドを生成するのか
>>235 え?うん。通信対戦とかだと致命的だしね
>>234 むしろ何も考えずに作った俺のアプリはとまんないんだけどw
んなことより、複数のスレッドでD3D APIを呼ぶ時に設定するもんだと思ってたのに、 メッセージスレッドと分けるだけで必要になるって事実にびっくりしろよ 俺はびっくりした
Audio や キー/JoyStick の入力は別スレッドだよな 直接起こす or APIに起こさせるの違いはおいといても
オーディオはともかくキーやjoyStickも別スレッドなのは 何が目的?
意味ないよな 表示には所詮反映されないわけで素直にコマ落ちさせたほうがまだ納得できる
キューに溜めるだろ。特に JoyStick。 格ゲーとか作った事あればわかるかもしれないが、必須
むしろフレームの途中で入力状態が変わるのは矛盾も生じやすくない?
>>243 多分思い描いてる処理とか、作ろうと思う内容の違いかもしれないけど、
逆に描画他でコマ落ちしている時、入力を受け付けなかったらプレイヤーは違和感感じると思うぜ
意味無い派の頭に浮かんでいる処理の様子 ・画面にフィードバックが無い間に、入力でパラメータが変わったらおかしい 意味ある派の頭に浮かんでいる処理の様子 ・入力が直接画面にフィードバックするロジックじゃなくて、入力が一旦キューに溜められて それを評価してパラメタに反映する。 パラメタへの反映はゲームループ内で行われる → 先行入力の基本処理 こういう事だと思われ
>>245 例えば次のフレームまでに→←→→・・・って10回入力があったときは
どれが採用されんの?っていうかどう処理するつもりなの?
描画するときのフレームで押してるキーで十分だけどな そうとうコマ落ちしてるもんでも作らない限り 格ゲー作ってる会社で働いてたことあったけど入力をキューに貯めるなんてことしてなかった
>>247 それが入力された前回からの差分タイムと、入力された内容をセットで記録して
FIFOで取得していくのさ。 例えば波動拳のコマンドがあったとき、必要な入力が ↓\→ の3ストロークだとして、
実際には 「必要な3入力が一定時間以内にあれば良い」(人の手はいい加減だから、余計な入力がある事も考慮する) だった時、
過去に遡って合計時間がその一定時間以内になるキー入力がそれらだったら、「これは波動拳が入力された」 と見なすロジック。
以前思いついて実装したら、かなり綺麗に反応した。 もちろんそれだけじゃなくても、違和感消えるぜ
てか、やってみればすぐわかるぜ
>>249 普通はライブラリ側で処理するように書くから見なかったんじゃね
>>250 ゲーム作ろうぜ!みたいなブログしか見てない人や
リアルタイム処理の実装をコアライブラリから書かない人なんかには
ピンと来ないと思われ
あと FIFOキューじゃなくて、FILOスタックじゃね
いや、お前ら… PCのゲームでコマ落ちってなんの冗談だよ フレームスキップが基本だろ… 通信対戦どうする気なんだよ。ヘボマシンの対戦相手が処理落ちすると、こっちもひっぱられて処理落ちするんか?w
素人とロジックマニアの会話がすれ違うスレ
描画と入力を同一スレッドでやるなんて、正気の沙汰じゃねーだろ 可変フレームレート描画が基本な時代に
普通は別スレッドが当たり前 簡単なゲームや、「つかいかたにゅうもん」 みたいなサイトだと 初心者がついてこれなくなる=主旨がズレていくから、説明されないけど
>>250 いや、さすがに1秒で60回近くも更新されてるんだから違和感なんてぜってーねーよ
だいたいどんな超人だよ
まあ、それはおいておいて2DRPGだとして主人公はどっちに進むんだ?
ってことを俺は聞きたいんだ
>>251 いやキュー。スタックにしてどうする
てか過去制限のあるFIFOのリングキュー
キューにためておくのもスレッドに分けなくても貯めておける、 というのはまたおかしな考え?その時に時間だって記録しておけるはずだし
問題は、メッセージスレッドやらキー入力スレッドやらを作ると、 D3DCREATE_MULTITHREADEDを使う必要があるのか?ってことなんだが それ以外の2DRPGがどうのだのはスレ違い。そろそろ自重しろ
>>256 とにかく頭で考えないで実装してみなよ
たった1/60秒だろ?思い込みは危険だぜ
RPGでもなんでも、評価そのものは単に入力した順にされるだけだって
>>260 もしかして、話わかってない?
次のフレームまでに方向キーが色々押されたと
でも操作キャラが移動する方向は仮に4方向だとしてそのうち1方向しか選べないよな?
って状態だよ?
>>259 硬いこというな
DirectXのみのことだけしか話しちゃいけないってわけじゃなくて
ある程度そこから派生事項もあるからこそ盛り上がる掲示板だろ
グルーコードやコピペで済ます人や、アルゴリズム考える事に慣れていない初心者も多いから こういった話は通じないと思います あとここはAPIのスレであってロジックのスレじゃないです
>>262 いやむしろ話わかってないか?
キュー [↑→↓] こういう状態だとして、それは入力を溜めるスレッドの仕事で
評価する側はFIFOで先頭から必要に応じて、空になるまで取り出すだけだっての
先行入力って言えばわかるかい?
>>263 そうだったスマン
わかったわかった…。ちょっとロジックの話にも付き合うよ キー入力をスレッド化するのは、描画が処理落ちしてスキップされても、常に同じ感覚で波動拳を出すためだ。 入力をキューに貯めるってやつは、キー入力スレッド側の入力を貯めておいて メインスレッド(描画もする)側で1フレ分ずつ処理して入力スレッドに追いつかせるって意味だ。 入力キューが溜まっていたら、その間は描画はせずに、入力キューに基づいて高速処理するんだよ。 入力キューは、通常1秒間に60個の入力が貯まる
てか、この辺のロジックは、必要な時に自分で思いついて実装するか 単にマイライブラリとして書いておけばいいだけなので、 理解出来ない人や不要な人は別にやらなくてもいいんだぜ
>入力キューは、通常1秒間に60個の入力が貯まる 通常じゃなくて、1秒間に60個の入力が貯まる実装なら貯まる、が正解 通常、じゃない
>>264 うっそ、すっげ複雑じゃん
↑↓→←なんて入ってたらどっち進んでいいのかわかんねーよw
トリガも取りにくくね?
どうせ必要なのは最期のだけだろ?w
>>267 一応世の中のゲームはFPS60入力が「通常」でな…。
>>268 次のフレームは上、その次のフレームは下、次は右、次は左。
描画に4フレかかったせいで、入力が4つ貯まってる状況なだけじゃんそれ
>>265 >入力キューが溜まっていたら、その間は描画はせずに、入力キューに基づいて高速処理するんだよ。
その入力キューを溜める仕事の話が上の別スレッドの話
勝手に誰か溜めてくれるのかい? てかキー入力ならOSが溜めてくれるけど
>>268 なんでこれでフクザツなんだよ。
>↑↓→←なんて入ってたらどっち進んでいいのかわかんねーよw
だから先頭から順に処理するだけだっての・・・
人がいち、にい、さんと数えながら入力するのと、固有処理は同じことだよ
理解できないなら別にいいから、人に説明させといて単芝生やすなksg
271 :
265 :2011/03/27(日) 23:14:19.46
>>269 いや、描画は1秒60回更新だとして
キー入力を1フレ1回じゃなくて反応した分キューに詰め込むって言ってるんだろ?
だから、次フレまでにたくさんのキー入力が入るって話してんじゃねぇの?
だから次のフレームは最期に押されたキーである←にいく・・・って俺は思ってるんだけど
273 :
270 :2011/03/27(日) 23:16:07.90
>>271 あ、補足してくれただけだったか・・・
スマン勘違いした
>>270 ええ?処理すんの?
例えばドラクエなFC版の3とか4とか想像してくれ(あんまりかわんねーけど)
↑いっても↓いっても→でも←でも1歩1歩同じスピードで進むよな?
キー全部処理するってことありえねーだろ?
おまえら、格闘のコンボ入力と、RPG移動入力と、闘っても意味ないぞ。 仕様が違う
276 :
265 :2011/03/27(日) 23:18:29.35
FPS60のゲームだと仮定する。 ・キー入力は別スレッド派 描画が処理落ちした(例えば1回の描画に唐突に1秒かかってしまった!)としても、 入力スレッドは安定して動いているので、60個の入力が貯まる。 メインスレッド(←描画も行ってる)は、60個の入力を順番に処理して、遅れてしまった分を取り戻す。 (たいていこの間は描画がスキップされ、いわゆるフレームスキップ状態になる) ・キー入力は描画スレッドと同一でいいだろ派 描画が処理落ちするとゲームがスローになる 別にSTGとかならわりとある実装
277 :
270 :2011/03/27(日) 23:19:38.41
>>274 いやそういう事じゃないんだって・・・ スピードじゃなくて
もう先行入力について勉強でもしてくれ。
278 :
265 :2011/03/27(日) 23:21:17.57
>>277 お前の言ってることを全面的に同意した上で言わせてくれ
先行入力っていう言いまわしが誤解生んでんだよ
>>276 えー、スレッド派だせぇじゃーん
絶対、変な動きするよー
280 :
265 :2011/03/27(日) 23:28:56.11
>>279 だせえかどうかはともかく、格闘ゲームとかはこの実装がポピュラーだよ。
描画の負荷とまったく関係なく、常に同じ速度でゲームが進むんだから、一番優れてると思うけど?
「変な動き」とやらは絶対しないでしょ。描画の負荷が乱れても、ゲーム速度は一切変化しないんだから
>>280 嘘吐くなよw
俺、一応、格ゲー作ってる会社いたけどキー入力のキューなんて作ってなかったもん
マジで描画スレッドといっしょだったよ
282 :
270 :2011/03/27(日) 23:32:16.96
フレームごとに処理をすれば良いRPGと コマンド入力を受け付けなくちゃいけない格ゲーを同列にかたっちゃいかんな 後者の場合はコマンドを評価するためのバッファが必要で 且つ、フレーム速度によって入力の難易度が変わってはいけない あとは分かるよね?
>>265 1秒に60個のキー入力がたまる設計でもいいが、ダサイ設計だなと思う
285 :
270 :2011/03/27(日) 23:33:46.54
>>281 ヒント:
>>282 のコードで言うと、mainから下の部分しか担当してなかったら、
取得される値がキューから来てるのかそうでないのか、見かけ上わからないから
>>281 それってコンシューマなんじゃないの?
フレーム速度が保証されてる環境ならキューは作らずに済ます場合がある
287 :
265 :2011/03/27(日) 23:35:57.37
>>281 それ、アーケードかコンシューマの話でしょ
動作環境が定格じゃなかったり、通信対戦絡んだりしてるなら絶対フレームスキップ方式のはずだよ
288 :
270 :2011/03/27(日) 23:36:28.91
描画側を別スレッドで行っているなら、入力側でキュー作らない可能性はあるよな
>>286 まあ、そうかもな
どんだけ違いがあるか知らんけど
無駄なことやってると思うけどな
DirectXのチュートリアルで十分だぞ
あれといっしょの仕様で30万本近く売ってるから
そろそろDirectXと関係なくなってる件について
291 :
265 :2011/03/27(日) 23:38:55.91
本当にゲーム会社で格ゲー作ってるようなプログラマが、 2chスレで「キーバッファ式がだせえ」とか「30万本近く売ってるから」とか書き込むわけないわなw そもそも、キーバッファ式だせえ言ったら、Windowsのメッセージキューシステム全否定じゃねーかw
この程度で無駄な処理とか、どんだけ底辺なんだよw
>>291 そんな大層なことしてると思ってるのか?w
ぶっちゃけるとSDKのコードをそのまま貼った、組んですらいない
多分10分ぐらいでなんの疑問も持たずに終わらせました
これが現場のリアルな話ですw
294 :
265 :2011/03/27(日) 23:41:45.56
>>288 描画を別スレッドにする可能性はあるな…
だが、キーバッファ式よりよっぽどだせえし、描画に必要な情報を全部コピーする必要があるから、速度ガタ落ちだよなw
入力に別スレッドとか立ててないなあ 描画が追いつかなくても、WM_KEYDOWN とか勝手に OS のメッセージキューに溜まっていってるじゃん メッセージ処理(全ての入力を受け取れる) → フレーム処理(全ての入力を使う) → 描画 これで問題ないことない?何か勘違いしてる?
296 :
265 :2011/03/27(日) 23:42:19.40
なんだ。釣りか… ム板はマジ強制IDにして欲しいわ…
>>291 1秒に60個て言うことは、→押した状態が数個もたまるんだろw ダサイ意外ないなw
298 :
265 :2011/03/27(日) 23:43:55.86
>>295 描画に1秒がかかったら(爆発エフェクトが超重なったとか、そういう瞬間的なものでな)
1秒分の入力がメッセージキューにたまるんだぞ?
WM_KEYDOWNには「いつ」押されたかの情報は入ってないから、1秒の前半に押されたのか、後半に押されたのかすらわからん
(そんなところこだわらねぇよ・・・)
(1秒もかかっちゃうのが常時続いてる状態をなんとかする方向は考えないのかな・・・?)
301 :
270 :2011/03/27(日) 23:46:39.40
>>295 >描画が追いつかなくても、WM_KEYDOWN とか勝手に OS のメッセージキューに溜まっていってるじゃん
だから、それ、キューに、溜まって、いってるじゃん
>>239 を参照
302 :
265 :2011/03/27(日) 23:46:55.52
相手の爆弾が爆発した瞬間、1秒棒立ちになるゲームなんてゲームにならねーよ… 瞬間的なものって書いてあるのに、なんで常時になってんだよ
>>297 お前、自分に技術が無くて理解できないから意地になってるだろw
だから問題にはならねぇだろw
>>302 だから、棒立ちになるのを回避するために 60/1の設計を選んだ、それがダサイい
306 :
265 :2011/03/27(日) 23:49:47.27
>>305 すまん、名前つけてくれ
あと、305で言っていることの意味が分からんのだがもう少しまともにレス書いてくれんか
60/1・・・?
ちなみに俺(
>>289 ,293,299,300)は簡単なことしか言わないからな
>>304 問題にならないもの(1人用ゲーム)もあれば、問題になるもの(通信対戦)もある
好きに選択してろよ
>>309 さっきからあえてスルーしてたけど
通信云々はまったく関係ないと思うんだよねw
311 :
265 :2011/03/27(日) 23:53:59.34
>>308 理想論的には、どの環境でも処理落ちしないに限るけどさ
処理落ちした場合どうすんの?
入力キュー分けておけば、処理落ちする環境でも定格通りのスピードでゲーム進行できるんだから、
使わない手はないだろ
>>310 他の誰かと同期をとるゲームで、描画の処理落ちで入力まで処理落ちしたらゲームにならねーだろ
いや、低スペックでやるのが悪いって切り捨てるなら、それでもいいけどさ
60キー入力/1sec
>>306 キー入力を別スレッドにするかどうかは、「その時の要求仕様により」としか答えられないが。
「1秒にキー入力が60個キューに」は例えば「→」押しっぱなしで、それが60個たまるという意味なのか?
まずこれ答えてくれ。
315 :
270 :2011/03/27(日) 23:57:41.50
なんか簡単な話のはずだったのに 何で感情的な反対とか出るのかわからん とりあえずキー入力の件は、上のコード見せた時点で伝わったらしく、 意味不明な反応が無くなって良かった
316 :
265 :2011/03/27(日) 23:58:32.85
>>313 プログラマとしてあまりにダサくて閉口するわ
>>314 その通りだよ。大抵入力は32bitもあれば十分だから、unsigned intのdequeだな
ボタン押して無くても「押してない」っていう情報が貯まるよ
>>312 推奨環境出してるのに低スペックでやるのが悪いんじゃん
そんなもんサポートするのに燃やした工数誰が金出すの?
ま、プロの実装なんてこんなもんよw
いい意味でも悪い意味でも金になんないことはしないのが商売なんだよきっとw
>>316 やっぱりか、他の方法は思いつかなかったのか?
319 :
265 :2011/03/28(月) 00:01:35.95
プロのふりはもういいから… 5分でできる実装をしない理由もないし、カプコンのMTフレームワークとかもフレームスキップ式だっつーの… 可変フレームレートなめんな
320 :
270 :2011/03/28(月) 00:02:49.86
>>316 ちなみに俺は上のcodepadのコードでは端折ってるが、
状態とタイムの記録をしていく格好なので、同じ情報が続く場合は溜めない
答えもせずに、人格批判かwwwwww だめなやつ
322 :
265 :2011/03/28(月) 00:05:06.10
>>320 別に1フレ4バイトくらいだし、そこケチる必要なくね?
アナログスティック使ってるともうちょい容量食うけど
自称プロとか久々に見たな 春休みだからか
324 :
270 :2011/03/28(月) 00:13:11.35
>>322 ケチるというか・・・ 格ゲな処理イメージで申し訳ないだけど
状態変遷を追うのがうざったいからさ。
[nn.mm: 上ON] [nn.mm: 右ON] [nn.mm: 上OFF] [nn.mm: 下ON] [nn.mm:右OFF]
とかなら追いやすいけど、これが
[上ON] [上ON] [上ON] [上ON] [上ON] [上ON] (中略) [右ON] [右ON] [右ON] (後略)
とかだとウザすぎるのさ、ってだけ
325 :
265 :2011/03/28(月) 00:17:42.46
>>324 なるほどね
格闘ゲームでの、技コマンド解析とは相性良さそうだね
と、ロジックの話はこんなところでいいよな
馬鹿に教えようと思ったら、釣りだったのは残念だが、
釣りに見せかけて情報を引き出したかった初心者プログラマだったと思おう
別にム板は素直に聞けば応えてくれる連中ばっかなんだけどなー…
326 :
270 :2011/03/28(月) 00:19:49.24
>釣りに見せかけて情報を引き出したかった初心者プログラマ これだったらマジで金品要求するわ
DirectX初心者です。(スレッドに関してはめっきり) 上で盛り上がってますが私のプログラムもそういえばドラッグ中動かない仕様だな〜 と思いながら読んでましたが理解できる部分半分、よく分からない部分も多々。 そんな訳で皆様のお話についていけるような知識を得たいのですが DirectX(主にゲームプログラミング)におけるマルチスレッドの利用について 参考になるサイトや書籍を知ってたら教えて下さい、お願いしますm(_ _ )m
>>327 入力スレッド でぐぐったら、ちょうどよさげなサイトヒットしたよ
>>327 ゲームプログラミングに限らない話になるから、マルチスレッドについては
それ単独で処理勉強してくれ
このスレ的に言えば、どの関数やクラスを利用する時気をつけなければならないか、って話になると思う
それ以外は本来スレチ
>error C1083: include ファイルを開けません。'd3dx9.h': No such file or directory
が出ます。しかし自分で調べてフォルダへのパスはちゃんと入力したのです
(証拠画像)
http://iup.2ch-library.com/i/i0272246-1301240129.jpg 実行可能ファイルは
C:\Program Files\Microsoft DirectX SDK %28August 2006%29\Utilities\Bin\x86
ライブラリディレクトリは
C:\Program Files\Microsoft DirectX SDK %28August 2006%29\Lib\x86
C/C++の全般 追加のインクルードディレクトリにも
C:\Program Files\Microsoft DirectX SDK %28August 2006%29\Include
を入れました
なにかインクルードできない原因がありますか?
>>323 実はかなり前の話でいまはもうとっくに辞めてるんだけどねw
>>330 よくわからんけど
リンカーの追加の依存ファイルの項目の設定はいけてんのか?
(まあ、出てるエラーが違うかなぁ・・・)
出力を読み返してみたところ 1>TRACKER : error TRK0005: というエラーが ありました、これが原因かもしれません少し調べてきます。 上の情報だけではエラーは無いと思うのです、いくら調べてもミスは見つからないからです。
あんま関係ないけど SDKをインストールしたときに環境変数DXSDK_DIRが設定されてるはずなのに なんでフルパスでいれてるんだろう?不便じゃないのか?
335 :
デフォルトの名無しさん :2011/03/29(火) 19:55:27.12
少し外れた質問かもしれませんが ID3DXEffectオブジェクトを持ったクラスを作り、そのクラスの実体を作って行くと、5つ作ったところで5つ目のクラスのID3DXEffectオブジェクトで「ヒープが壊れている」とエラーが出ます。 そのクラスオブジェクトを作る順番を入れ替えても5つ目でエラーになるので、用意したメモリ領域以上に実体を入れようとしているのが原因ではと思っています。 でもクラスオブジェクトを作るごとにメモリ領域は新しく用意されるはずですよね?どうしてでしょうか。
まずID3DXEffectを取り除いて同じエラーが出るのか確認するんだ 話はそれからだ。原因の絞込みはデバッグの基本だぞ
ヒープが壊れている系は、まったく関係ない場所でおきた破壊がまったく関係ないところで出ることが多い ID3DXEffectを使わずにアプリを正常終了させて、Debug出力にリークが無いか調べてみ
DirectXに限らずWindows系で一番嫌なバグだな 特にGUIのDCまわり、お前、解放する必要あんのかどうすんのか言えよ
>>338 開放しなくてもとりあえずシーンとしてるのが意地悪いよな
ヒープが壊れたって怒られるのは、 mallocで確保したのを二重にfreeで解放してた ってパターンも多い
341 :
335 :2011/03/30(水) 14:13:46.02
頂点定義でカラーを含めてたのにHLSL内でカラーを扱ってなかったのが問題だったっぽい 頂点定義関係カラーを消したら直った
342 :
デフォルトの名無しさん :2011/03/31(木) 18:02:42.48
質問なんですが、DirectXを使ってプログラミングするツールとコンソールは 何なんですか?どんな環境でプログラミングするんですか?
どういう質問? もっと幼稚な感じで説明されたほうがわかりやすいかも
345 :
デフォルトの名無しさん :2011/03/31(木) 18:24:00.81
>>343 環境。
コンパイラとかエディターとかターミナルなど。
後DirectXライブラリは皆さん使ってますか?
自分の場合、C++エディタはVisual C++2008ExpressEditionを使っています商用に使わなければ無料です。現行のバージョンは2010ですが設定が面倒。 自分は一般的な3Dゲームのようなものを作っていますので、Visual C++でウィンドウズAPIを使ってアプリケーションをつくっています。 ライブラリは公式のDirectXSDKのもので、誰かが自作したようなライブラリは使っていません。
俺はMicrosoft Visual Studio 2008にDirectXSDK(June2010)のサンプルにあるEmptyprojectとかいうのに入ってるDXUTを利用させてもらってる。 最近になってDXUTナシで作ることに挑戦し始めたが。 でも初心者なら適当なCD付きの本を買って環境作ったほうがいいんじゃね。
348 :
デフォルトの名無しさん :2011/03/31(木) 18:47:01.21
>>346 >>347 ありがとうございます。
初心者はDirectXそのものを自在に扱うのは限りなく不可能に近いと思ってます。
サンプルからコピペしてやっていけば簡単だし覚えやすいよ 「○×つくろー」ってサイトに初歩的なことから書いてあるからわかりやすい
>>348 >初心者はDirectXそのものを自在に扱うのは限りなく不可能に近いと思ってます。
それ以前に言語自体、またDirectX以前にwin32自体意味を理解して
自分が思ったコードを書けないと話にならない。DirectXは良くも悪くもただのライブラリです
まぁ、C++ & Win32API で2Dゲームをある程度自由に作れるくらいの レベルじゃないときつい。DirectXは。
何かを作る、のが先にあって、それをわかってて
その上で例えばいくつかの手段を考えて、その中から例えば
DirectX を選択して描画や入力を任せてみる、みたいな順序だから
>>348 の言う 「初心者」 って言葉の中に、「プログラミング自体の」 とか、まして 「言語自体の」 とか
「Windows上で動くプログラミング自体の」 みたいな意味合いが含まれてたら、不可能で当たり前
せめて「Windows自体の」とか「パソコン自体の」初心者でないことを祈る
球やグリッドなどの基本形状をラインリストで作りたいんですけどアルゴリズム教えてください
せめてグリッドくらいは自分の頭使って下さいよ・・・
>>355 グリッドはなんとかできたんですが球はどうしたらよいでしょうか・・・
パソコンを窓から投げ捨てろ
>>346 ExpressEditionでも商用利用可能。
359 :
デフォルトの名無しさん :2011/04/01(金) 08:13:57.94
DirectXってWin32APIのAPIライブラリだから、Wind32APIを参照する必要ってないんじゃないですか?
360 :
デフォルトの名無しさん :2011/04/01(金) 08:24:02.30
DirectX=WinAPIのAPI??自分でも何言ってるのかわからん。 間違ってたらすいません・・・
>>359-360 釣り針でっかいから食いついとくけど、君はDirectXやWin32APIの勉強の前に言語の勉強が必要で、
さらに言語の勉強の前に用語の勉強から始めないといけない。
あと無駄に改行するな。
>>356 デバッグ用描画だったら適当にsin cos使って頂点を一回りすれば
それなりに見えね?
モデリングソフトが出力する頂点をベタ打ちしたり、
D3DXCreateSphereとかつかってメッシュ描画しちゃうのでもいいが
レンダリングステートで線の三角系描画設定できるし
>>362 イメージとしては
DirectXもWin32APIもマイクロソフト関連のAPIであることは間違いないでしょ?
適当にwebで見つけた古いコードを弄っててプログラム起動したらハードがサポートしてなくて凹んだ。 (インデクス付き頂点ブレンドって時代遅れなのね、ソフトウェア処理では動いたけど) ふと、ゲームの動作環境で「グラフィック:GeForce○○以上推奨」とか書かれるけど それって、速度的なパフォーマンスやサポートするシェーダバージョン以外にも この世代のGPUはこの機能が使えるから〜とか、そういった知識も必要なのかと思ったのですが グラフィックカードによりけりな部分の知識を学べる良いサイトや書籍があれば教えて欲しいです。
>>364 こんにちわんとこんばんわにとありがとうさぎの括りがいっしょでしょっていってるようにきこえる。
WinAPIはWinodwsの基本的な部分を開発するAPI。
DirectXはWindwsの上のレイヤーであるマルチメディア部分を開発するAPI
レイヤー的にイコールになることは無いよ。
test
>>366 俺もあまり詳しくないから違ってたらすいません
3D処理とかの行列変換出来るか否かでハードウェアT&Lに依存するんじゃないだろうか
でもこれに対応してないって10年以上前の化石PCとかだよね・・・
グラボの性能で○○以上って書いてあるのは、単純に同時に描画するポリゴン数とかテクスチャ数?
から換算してるんじゃないだろうか
書籍やサイトについては分からないです、すいません
オンボードだと5年前でもハードウェアTnLは微妙だったりする
372 :
デフォルトの名無しさん :2011/04/01(金) 21:53:53.47
DirectX参照しながらプログラミング組みたいんですが 基本C言語でOKですか? DirectXはC++のほうが相性良かったりしますか?
>>372 グローバル変数の地獄に落ちない器量があるならどっちでもいいよ。
374 :
デフォルトの名無しさん :2011/04/01(金) 22:00:11.94
>>374 覚えることは多いけどC++。
変数、関数、クラスと基本構文ができればいける。目安としては、1クラス1機能。
粒度は自分に合わせるといいよ。
376 :
デフォルトの名無しさん :2011/04/01(金) 22:14:22.25
やっぱりC言語のポインタって本当に精密なんだな。
ID3DXEffectのSetMatrixで設定する 非転置行列てなんぞ。 転置行列は判るが。ワールドマトリクスとか転置せずにつかえよってことなだけ?
>>376 ポインタはとある地点を指しててそれのアクセス方法を提供するだけなんだけど、わからない人にはほんとにわからないらしい。
とある地点の指定子(ポインタ)
ポイントするからポインタ
>>377 多分だけどHLSLでなくアセンブラ使う場合は転置する必要があったけど
HLSLで扱う場合はその必要がなくなったから「非転置」って言い方してるんじゃないかな?
丁度シェーダ本のアセンブラ部分読んでて、シェーダに行列渡す時はDirectX側とシェーダ側で
行列の扱いが異なるから転置が必要、みたいな記述があったんで
SetMatrix使えば勝手に転置してくれるって感じなのかな?
間違ってたら誰か訂正よろ。
>>381 むしろそんなの可能性もあったのかw<アセンブラで転置の必要あったかも
サンプル見てもカメラからとってきたのをそのまま使ってるから転置しない行列ってことでいいんだろうけど
とりあえずそれで納得しとく。ありがとう
ポインタでつまづく奴は ポインタ=アドレスだと勘違いしてる奴だと思う
適当に*つけて宣言してエラー起こす俺にはハイレベルすぎる話だぜ
>>383 ん? 違うのかい? c#とか? ハンドル?
>>385 ×アドレス
○アドレスを格納する変数
って意味だろ
大したスキルもないときにそんな無駄なこと考えちゃうからだろうな *の数と&をテキトーに合わせておく・・・程度に考えてるやつのがうまく理解する
>>388 仕組みなんて時間がたてば勝手に理解するだろ
問題はとりあえず組めること
390 :
デフォルトの名無しさん :2011/04/02(土) 11:37:15.78
>>387 イメージで理解できたら、だいたい理屈と整合性取れてるんだよな。
理屈ばかり追い求めたら頭がパンクする。しかも下手したら俺論理的
で頭良いやべーwwwってなるからな。
そんな俺はDirectXとWindowsAPIの区別もつかない初心者。
391 :
デフォルトの名無しさん :2011/04/02(土) 16:34:49.72
>>390 多機種の DirectX 使わない人にとっては Win32 API と同じに見えるのでいいと思うよ。
OpenGL がもしも Win32 でしか使われなかったら 境目が無くなると思うし。
座標変換済み頂点(RHW)で構成した面に、テクスチャを完全に貼るにはどうしたらいいのですか? 未変換の頂点で構成した面では完全に貼れるのに・・・
>>387 これはおれもそうだと思う。
さすがに数だけって訳にはいかないけど、最初は深く考えすぎても
だめ。最初はとりあえず動くように書ければ、経験重ねて自然に
覚えれたって感じだったな。
>>392 完全に貼るってどういうこと?
DirectXだと座標を-0.5fしないと合わないとかはあるけど。
394 :
デフォルトの名無しさん :2011/04/02(土) 17:54:46.40
OsによってDirectXの更新の古さとかありますか? 7は最新のDirectXですか? 後ActiveXはDirectXと同じようなもの?
>>394 MSのOSさぽーと期限が切れたOSのDXは更新されない。
DX7は最新ではありません。Win7のDXは11で今のとこ最新。
ActiveXはCOM利用形態のひとつ。
たとえばIEに外から機能追加したりするときにActiveXを使う。
ユーザーが更新しようとしなければ古いままの状態の事もある。ってのも追加していい?
XAudio2は同時に音を鳴らそうとしたときに、数の制限はありますか? たとえばn個のソースボイスを同時にStartしたときに、x個しか音が出ないとか
398 :
デフォルトの名無しさん :2011/04/02(土) 23:41:04.09
DirectXでアニメーション作れますか?
シェーダーにプログラムから渡せる変数って何個まで? シェーダーは2.0です
アプリ製作の環境って皆さん何使ってますか?
>>402 VC++6.0&DirectX SDK9.0(Oct2004)使ってるよ^^v
邦子?
今まで使ってた環境が古いので新しくVC++2010Expressと
日本語ドキュメントがあるらしいAug2009のSDKを入れようと思ってるのですが
古い環境を残しておく利点って何かあるでしょうか?
>>403 みたいなのだと古い環境で動くアプリケーションも作れるとか?
August 2009のSDKはVS2010をサポートしてないのをわかった上でやるなら止めはしない
VS2008Express+August 2009 で無問題
いま最新のDirectX SDKってどれですか?
>>405 新しいSDKにするとDirectMusicが使えないとかじゃないかな
Microsoft DirectX SDK (February 2007) を最後に消えたんだと思う
俺はVS2010 と SDK2007 使ってる
>>408 Microsoft DirectX SDK (June 2010)
じゃないのかな?違ったらすいまそん
初めはVS2010 と SDK2010 使ってて入門書見ながら楽しんでたら
dmusui.h(スペル適当)がありません、どっかのサイトからゲットしたら今度は○○.hがありません、それもいれたら
今度は意味不明なエラー
じゃ別の手段と思いググったら「PlayMusic( ) を使いましょう」 う〜ん、これなんか違う・・・・・
結局SDK2007入れて解決させてしまった
そして今さっきこのスレでXAudio2の存在を知って憂鬱になっているところです
XAudio2 は強いて言えば DirectSound の代替 さらに言えば、XBOX(XNA)用が主目的で、Windows用は追随統合されただけ
MicrosoftとしてはXboxの規格で統一したいんだろうけど 規格難民が出るのはいただけない
多分PlayMusicってのはDirectXじゃなくてDxLibの関数 DxLibはどこかの個人が作った、初心者向けの砂糖で包んだラッパーライブラリ
>>410 またたくさんの嘘を付いてしまいましたすいません
>>413 それだそれ、ゲームプログラミングやってみたくてあちこち手だして
DXライブラリ の方と記憶がごっちゃになっていたようだ、すいません
でもXAudio2ってのがXBOX用でDirectMusicの変わりにならないとすると
最新のDirectX SDK で音鳴らす時どうしたらええの?
dmusici.h dmplugin.h 追加して 「うまくいかね!」
って諦めないで頑張ってあっちゃこっちゃいじってDirectMusicを使い続けるのがセオリーなの?
DirectSound ってのはSDK (June 2010)にあってそっちを使うのが普通?
何が言いたいかと言いますと
これから勉強してやっていくにあたって音を鳴らすのにどれを使っていくのが無難?
>>414 だからDirectSoundか、XAudio2。
ただしXAudio2については、ググっても日本語の記事はSDKのサンプル以上の情報はほぼ無い
= (入門者が書いた入門記事 = HelloWorld状態の記事) くらいしか無いので、
SDKのSample頼みか、あるいは眉にツバつけながらMSDN追うか、あるいは海外の記事を追いかける必要アリ
あ、MIDIとかそっちの話だったら、その他のライブラリ探すか mci 単純にBGMならDirectSoundかXAudioでストリーミング
>>415-416 どうもです
単純にBGM流すのと効果音程度なのでDirectSoundにします
SDKまた最新に差し替えてDirectMusicからDirectSoundにソース変更してみます!
DirectInputで絵を描く並におかしいことを言ってる気がする
419 :
デフォルトの名無しさん :2011/04/06(水) 14:46:00.50
blenderでモデリングした.xをワールドに出すと重心や大きさによってリサイズされるんだけど これは.xの標準仕様? モデリングの段階では2つのメッシュがきっちり角で合わさってるのに、directxでレンダーすると微妙にずれてる
>>419 自分が書いた内容と、Blenderのx形式expoterの中身を、もう一度よーーーく見直してから、
速やかにBlenderスレに移動するといいと思う
※ワールドに出すとって何?重心や大きさによってリサイズって何が?
モデリングの段階できっちり合わさってるってのは、Blender以外で確認したのか?
Expoter は DirectX の物じゃないだろ って事
>>419 自分の場合、blenderから自前の独自形式で吐き出したメッシュは、
DirectX でも OpenGL でも正常に表示されます
ついで言うと、メタセコでモデリングした内容を、自前のインポータでBlenderに取り込んで
それを xfileで再エクスポートしても正常に表示されます。 これらの話は、DirectXと無関係です
スレチです
複数のモデルを全て(ビルボードで)こちらに向かせたいのですが、一回の処理で全て向かせるにはどうしたらいいのですか?
>>422 一回の処理がどの程度を言うのか分からないけど、
カメラが動く度に逆行列の計算とワールド変換が必要なのでは?
ごく最近勉強した。参考になればどうぞ↓ 間違ってたらごめん。
// ビュー行列の逆行列
D3DXMATRIX matView, matInv;
d3ddev->GetTransform(D3DTS_VIEW, &matView);
matInv._11 = matView._11;
matInv._12 = matView._21;
matInv._13 = matView._31;
matInv._14 = 0.0f;
matInv._21 = matView._12;
matInv._22 = matView._22;
matInv._23 = matView._32;
matInv._24 = 0.0f;
matInv._31 = matView._13;
matInv._32 = matView._23;
matInv._33 = matView._33;
matInv._34 = 0.0f;
matInv._41 = 0.0f;
matInv._42 = 0.0f;
matInv._43 = 0.0f;
matInv._44 = 1.0f;
// モデル描画関数
D3DXMATRIX matWorld = トランスフォーム行列 * matInv * 平行移動行列;
d3ddev->SetTransform(D3DTS_WORLD, &matWorld);
逆行列を使えばいいんですね、ありがとうございます。
>>422 「一回の処理」の定義がよく分からんが、
1クロックでって事ならそういうSSE命令が出来るのを待つしかないんじゃないか?
計算式をあまり使わずにって事ならカメラ行列の逆行列が使えたような気がする。
やべっ、リロードしてなかった恥ずかしい
427 :
419 :2011/04/07(木) 12:25:47.39
2つの.xの中身は、どちらも頂点の場所が-1.0、1.0で、並べるとぴったりくっつくようになってるはずです。 でも、directx(自作のスキンメッシュクラス、サイズも同じ)で並べて描画すると、微妙に大きさが違うのです。 なにか仕様があるのではないかと思っています。
428 :
419 :2011/04/07(木) 12:48:15.79
自己解決しました お騒がせしました
俺は間違ってない系が一番タチ悪い
マップや地形を描写してキャラ(素材サイトの頂きもののポリゴン)を一通り動かし 当たり判定等の処理も入れられたのですが、キャラそのものを動かす(アクションする?)にはどうしたらいいのでしょうか? 剣を振りまわしたり等の事です 自分なりに調べてみたら「ボーン化」という作業が必要なのは分かりましたが そっから先がさっぱり分かりません どこか参考になるサイトありませんでしょうか?
>>431 このレベルだとその回答じゃわけわからんと思う
>>430 「スキンメッシュ」で調べてみるといいよ。ちなみに普通ボーン化なんて言わない。
DirectXのSDKサンプルにもSkinnedMeshというのがあるので参考に。
>>431 が出してくれてるサイトにもxファイルのスキニングについて書いてるよ。
>>431-432 有難う御座います
なるほどスキンメッシュって言うんですね、サンプル見て勉強してみます
ちなみにサンプルを追いかけて改造して勉強するならいいけど、 丸パクすると詰むぞ
俺の場合 サンプルコピペ→エラー→1から見直し→勉強になる というパターンが多いな でもたまに根本的な部分がわからなくて詰むから基本はそのうちやりたいな COM集成体とクォータニオンは最初から理解するのに大きく足止めされた
スキンメッシュ(ボーンデフォームなど)って、クォータニオンとその乗算だけじゃなく、 座標系が回転していく動作とか理解してないと、とてもじゃないけどキャラクターアニメーションなんて作れない 特に頂点座標と、その座標が置かれている系と、回転軸がどこを中心にどう回転してるのかとか、 そしてそれらが再帰的に回転を繰り返してて、結局グローバル座標系におかれた頂点は今どこにいるべきか、とか 確かに丸パクだと詰むな。挙動自体追えなくなる。ちょっと詰んだ瞬間に、全部逆戻りで予想以上に足止めされる 下手するとそのまま頓挫
仕組みを理解してもクラス設計が難しい
クラス設計は 「計算の仕組みを」 理解しただけじゃ無理じゃね 目的の整理が出来ていないと。 どうしたいか、の部分
1.サンプルを参考に必要な処理を抜出し、自分なりにtxtにまとめる 2.まとめたtxtを見ながら自分の環境に処理を追加していく 3.とりあえず動かしてみるとどっかで失敗しているようで落ちる 4.まとめたtxtを読み返すがtxtでまとめてある処理はきちんと組み込まれている 5.txtにまとめた俺が間違っていると気づき、とりあえずサンプルを丸パクする 6.当然動く訳だが何も理解出来ていないので意味が無い 7.凹む ← 今ココ
ただのアホ
ビュー行列から遠近法だけを打ち消すにはどうしたらいいのですか? 遠いものも近いものもサイズだけは一定にさせたいのです。
442 :
デフォルトの名無しさん :2011/04/08(金) 20:57:47.28
>>441 素直に正射影使えば・・・・・
そういう意味でなければパースペクティブがどういう風になっているのか調べて。
きっと希望にそうものがなんにせよ出来ないと思うけど。
つかビュー行列の時点では遠近法なんてないだろ
射影行列ではじめて遠近感が出る
で、
>>442 が言うように正射影で射影行列作ればいい
DirectInputでマウスデバイスを作ったんですが、なぜかY軸だけ反応しません。 X軸もZ軸も左右のクリックも反応するのに、Y軸だけ反応しないってのは、 何がおかしいんでしょうか。
DrawIndexedPrimitiveで四角形を描くにはどうしたらいいのですか? 現状は、カリングをオフにして device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1); で三角形までは描画できるのですが、 device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 4, 0, 2); にしても三角形のままになってしまいます。
>>444 自分で何も調べず、情報も一切出さずに他人に丸投げして解決しようと考える
お前の頭がおかしい
449 :
デフォルトの名無しさん :2011/04/09(土) 18:22:50.70
>>445 DrawIndexedPrimitives は C# だなぁ・・・
450 :
445 :2011/04/09(土) 18:28:32.11
頂点とインデックスデータは
indices[0] = 2;
indices[1] = 1;
indices[2] = 0;
indices[3] = 3;
indices[4] = 1;
indices[5] = 2;
v[0] = Vector3(0,0,0);
v[1] = Vector3(1, 0, 0);
v[2] = Vector3(0, 1, 0);
v[3] = Vector3(1, 1, 0);
になっています。
>>449 はい、Slimdxを使っています。
451 :
デフォルトの名無しさん :2011/04/09(土) 18:44:32.80
>>450 何故 primitiveType(arg1)が TriangleList で primitiveCount(arg6) が 2 で numVertics(arg4) が 4 なの?
452 :
445 :2011/04/09(土) 18:56:08.15
TriangleListを使う理由は、DrawIndexedPrimitivesで一度に四角形(三角形2つ)を大量に描こうと思って使っています。 それで、試しに1個の四角形を描こうと思って、頂点数4つと面が2つを引数にいれています。
453 :
451 :2011/04/09(土) 19:04:13.22
>>452 5年前のC++の記憶で悪いけど TriangleList で2つの三角形を描くなら numVertics は
(三角形の頂点数)3 * (三角形の数)2 で 6 だったはず。
454 :
445 :2011/04/09(土) 19:29:10.74
>>453 ありがとうございます。numVerticsの所を重点に検討してみます。
てs
>>444 元も子も無いんだがジョイパッド以外のマウスやキーボードはWinapiで出来るから、
DirectInputは非推奨だぞ
GetCursorPosとかScreenToClientとか使ったほうがいいらしいし、
おまけに簡単だ
XInput2現る。
練習に、DirectXでテトリス作ろうと思ったんですが、 画面の枠にぴったり合わせた描画って可能なんでしょうか? もしかしてカメラ位置とかは気合いで合わせないとならない?
>>458 んなわけない。
3D描画でも、カメラの視野角とアスペクト比でほぼ正確にわかる。
「視錐台」でぐぐれ。
本当に数学的な認識力は必須。何をするんでも
2Dだけしか使わないなら座標変換済み頂点を使う 3Dも混ぜたいならプロジェクションを正射影行列でやる
レンダーターゲットを変更して、アンチエイリアスを設定した深度ステンシルサーフェスを利用すると正常に描画されず アンチエイリアスが可能なのはバックバッファだけだと聞きました 実際にやってみると、確かにレンダリング結果がおかしくなります しかし、最近のゲームでは遅延レンダリングを行っているにもかかわらずアンチエイリアスが有効なゲームがあります(Crysis2とか) どうやってアンチエイリアスをかけているのか分かりますか
レンダリングターゲット用のテクスチャにフィルタを掛ける
>>462 バックバッファの4倍の面積のテクスチャ上にレンダリングして、
バックバッファに戻すときにフィルタかけるとか
おまいら頭いいな
DirectXを使っていてプログラムを終了した時に終了コードが0x1で終了するスレッドって何らかのエラーが 発生しているって事でしょうか? 1つだけ出ているのですがどこの呼び出しで作られたスレッドか特定出来なくて困ってます・・
それDirectXと関係なく、あなたの書いた処理にバグがあるだけとかそういう ・・・特定自体しんどいだろうけどな
エラーしたのがどこかを表示させるメッセージボックスを組み込めばいいんじゃないでしょうか
メッセージボックスなんてしなくても、VSなら右クリックでトレースポイントしかければいいのでは あとウォッチ。 せめてデバッガの機能使おうぜ
>>466 俺が建てたスレッドが正常終了でTRUEを返してるだけだ気にするな
工場統一したってこと? ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 / ヽ/ ヽ l l l つ l l l つ ,. ‐'' ̄ "'' 、 ,,. --‐┴─-- 、 / ̄ "'' -、 つ / ,.-‐''"´ \ _/ ヽ l / ヽ l l / > l l ヽ l (_人__ノ < ヽ / ,,>‐‐| ´´ | / / , , ,. ‐'' ̄ "' -、/___ / l ヽ_{ i , '" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ `ヽ l ` 、 ヽ ゝ ________ l ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 / ヽ\ l, / ヽ / ヽ, / ノ フヽ ヽ、,, l l l,,_〈 ーく く く ノ "'''l l ! \/ ̄i ̄ ヽ /ヽ / ゝ ⊥___,. -- ヽ,___,,,/ ヽ,,___,,,/ / | / |
DirectX9でゲームを作っているんですが、 GeForce 9300 GSのPCでdevice->SetViewPort()を 呼び出したタイミングエラーが出ているようで困っています。 通常こんな所でエラーが出た経験がなくて戸惑っているのですが、 ひょっとして、MinZ/MaxZは0.0〜1.0の範囲じゃないといけないのでしょうか?
>>472 1.D3DDeviceを内包するクラスの宣言がポインタだ
2.DirectXバージョンを間違ってdefineしている
3.SetViewportに渡しているのがD3DVIEWPORT以外だ
4.関数の大文字小文字を間違えている
とりあえず俺がミスった時はだいたいこの辺が原因だった。
>>473 どうもありがとうございます。
実際にはSlimDX越しにアクセスしているので
いずれとも違ってそうです。
475 :
472 :2011/04/11(月) 16:25:01.85
最初の書き込みで抜けていましたが、 D3DERR_INVALIDCALL エラーが発生しています。 DirectXのAPI内でのエラーです。
>>474 >実際にはSlimDX越しにアクセスしているので
じゃあSlimDXスレへどうぞ。いやマジで
テクスチャの各フォーマットが使えるかどうか判別したいんですが、どうすればできますか
それは自分で判断
普通に表示させてみりゃ一発じゃねーの
IDirect3D9::GetDeviceCaps で調べる
とりあえずCaps周辺調べりゃいいじゃん テクスチャフォーマットも調べられないクズが長居すんじゃねーよ
ヘルプを見る
481ではないが IDirect3D9::CheckDeviceFormat このあたりだろう。不親切なやつばっかだな。たいした手間でもないだろうに
うーん、その程度のこと教えるのって親切なんだろうか?
少なくとも偉そうに 間違ったことを教えるよりはマシだな
DirectXCapsViewerも見たことないんじゃしょーがねーな あれ、一括してCapsだから間違ってはいないと思うがな 間違いって確定でいいのかね?
そもそもここの質問者はできたらできたでこのコードでできましたとか
事後報告もできない根っからの糞ばっかだからこの程度でいい
結局、
>>477 だってもうこねぇだろ?できたんだかどーだか知らないけど
うーん、その程度のこと教えるのって親切なんだろうか?
492 :
472 :2011/04/12(火) 10:07:08.02
>>476 あっちは過疎ってるので、SlimDX固有の話くらいしかできません。
質問するまえにSlimDX中の該当箇所のC++ソースコードに目を通して、
SlimDX側には問題なかろうという判断はしています。
この問題はDirectX9/ハードウェアの組み合わせによって発生する問題と考えています。
最初の質問から追加する件として、
・ATI Mobility Radeon HD 3470
でも発生を確認しました。
ただしこちらはドライバのバージョンが2008年と古いため、
ドライバの更新をお願いしようとしているところです。
なお、
・Intel GME 950
・ATI RADEON 4850
・GeForce 9600 GT
およびそれ以降では同様の不具合は確認されていません。
あなたの書いた範囲にバグがあるよとかそういう・・・特定自体しんどいだろうけどな
じゃあGeforce9300GSで動作するゲームは全部、SetViewPortを使ってないんじゃねw
海外のツールでdirectxアプリケーションのウインドウの端に黄色い数字でFPSを表示するツールがあったと思うのですが、名前かURL教えてください
たぶんDxtoryのことだと思う
スペキュラーライトを使っても、モデルにスペキュラーの設定してなかったらテカッってならないです?
そもそもモデルにしか設定できなくね?>スペキュラー
ライトのスペキュラって光沢色じゃね。って、OpenGLとごっちゃになってるかもしれないが
ライト側にスペキュラの設定値があるっておかしくね? そんなことね?
ミスった時はだいたいこの辺が原因だった。
ところで世のゲームエンジンは超難しいシェーダたくさん使ってるのにどうしてライトが複数使えるの?
モデルの方も設定しないとキラッとしないっぽいのか ライトのスペキュラーとマテリアルのスペキュラーの作用の仕方がわからない 試さないと… ライトのスペキュラって typedef struct _D3DLIGHT9 { D3DLIGHTTYPE Type; /* Type of light source */ D3DCOLORVALUE Diffuse; /* Diffuse color of light */ D3DCOLORVALUE Specular; /* Specular color of light */ ←これのこと D3DCOLORVALUE Ambient; /* Ambient color of light */ D3DVECTOR Position; /* Position in world space */ D3DVECTOR Direction; /* Direction in world space */ float Range; /* Cutoff range */ float Falloff; /* Falloff */ float Attenuation0; /* Constant attenuation */ float Attenuation1; /* Linear attenuation */ float Attenuation2; /* Quadratic attenuation */ float Theta; /* Inner angle of spotlight cone */ float Phi; /* Outer angle of spotlight cone */ } D3DLIGHT9;
なるほど、一番明るくなるところのライトの色か!ありがとうわかった
>>504 自分でシェーダ組んでるなら書いたとおりじゃね?
固定シェーダならライト側のスペキュラーは使われてるかどうか調べる必要あんじゃね?
>>500 OpenGLのライトにはspecularカラーの設定あるよ。その時設定されているmaterialの
specularカラーに上乗せされる = 光沢がある時、それが見える
これ以降では同様の不具合は確認されていません。
>>492 ビューポートがウィンドウからはみ出した場合、
環境によって補正されて歪んだり、何も表示されなかったりしたことがある
エラーが出た覚えはないけど、そのあたりはどうかな
というかエラーってどんなエラーよ
>>507 マテリアルに設定したスペキュラの色とライトに設定したスペキュラの色を合成する感じでおk?
そして、スペキュラはハイライトの部分だけに反映される設定か
ライトの色をマテリアルのスペキュラに渡して使わせると上手く表現できるのか、いいこと聞いたわ
だからぁマクローリン展開しろよ糞ハゲ☆
514 :
472 :2011/04/13(水) 01:23:35.94
>>509 475でも書いたんですが、
D3DERR_INVALIDCALL エラーが発生しています。
RADEON9800やGeForce7600GS当たりでも普通に動くコードなのに、
なんで今頃エラーが発生するようになったのか検討がつかないんですよね。
参ったな……。
チョッパリの不幸で今日もキムチがうまい!! + ____ + + /⌒ ⌒\ + ニダ━━━/ \ / \━━━━!!!! + /:::::: ________ ::::::\ + < \ トェェェイ / > + \ `'´ / + _|\∧∧∧∧MMMMM∧∧∧∧/|_ > < _/_ / ノ /_ ──┐ヽ| |ヽ ム ヒ | | _/_ / --+-- / ̄ / / | ̄| ̄ 月 ヒ | | / /__| ノ _ノ \ / | ノ \ ノ L_い o o
>>512 どこにそんなこと書いてあるんだ?
出来ないやつの思考ってやっぱりわからない
説、拡がる
テクスチャに透過色を指定して透過させたいのですが、描画順が(前後の重なり)ばらばらでも透過させるにはどうしたらいいのですか?
明白ですが。
521 :
518 :2011/04/13(水) 14:18:46.29
>>519 パーティクルみたいな複数の板ポリを描画する時も、奥から描ける様にソートしてから描けば良いですか?
>>521 奥行きがあんまりないのっぺりしたパーティクルだったら複数の板ポリを
順番気にせず描けばいい。
気になるようだったらパーティクル内でもソートする、みたいな感じ。
>>514 DXデバッグランタイムのログは?
SlimDXでもDebugViewってツールで見れるから
確認してみろクソハゲ
たしかpastelで描画しなければいけなかったはず。
525 :
デフォルトの名無しさん :2011/04/16(土) 15:13:40.59
書籍で行列の継ぎ足し合成は誤差が蓄積されるので止めるようにと書かれていたのですが、そうすると座標値を保存しておいて、それに行列を掛けることを繰り返すのもNGですか?
疑問持たない気がすんだけどなぁ どうだろ
結果が気になるようだったらパーティクル内でも先にソートしておく、みたいな感じ。
528 :
デフォルトの名無しさん :2011/04/17(日) 23:35:55.20
D3DXCreateTextureFromFileInMemoryEx関数使ってる人いる? D3DXCreateTextureFromFileInMemoryだと正常に動作するものが、前者だとメモリリークするのだが・・・ 俺がどっかでアクセス違反してる可能性もあるが、なにか知っている人いたら情報ください。 使ってるけど普通に動くよって人がいたら、俺のミスです。 DirectX 9.0c SDK (December 2006)を使ってます。
Direct3D11で文字描画をするためにDirect2D+DirectWriteを導入しようとしています。
下記のサイトを参考にしています。
http://mitsunagistudio.aki.gs/tips/d2d-d3d11-sharing ここのサンプルではD2D側で描画したテクスチャを
D3D側にCopyResourceでスクリーンに丸ごとコピーしているのですが、
ドラクエのメニューウィンドウのように
D3D上の一テクスチャとして利用するのはどうしたらいいのでしょうか?
他サイトやMSDNのヘルプをいろいろ見てみましたが
具体的な実装方法が見当たりませんでした。
前後の扱いを関係省庁と協議しているvV
DX11でテクスチャつきのポリゴンの表示の仕方を覚えろ。
程度も調べてできないようじゃプログラミングなんか向いてないから今すぐやめちまえ
533 :
デフォルトの名無しさん :2011/04/18(月) 03:38:56.79
ところで世のゲームエンジンは超難しいシェーダたくさん使ってるのにどうしてライトが複数使えるの?
>>534 D3D9世代なら、DeferredShadingを使う。
>>528 9割9分自分のバグだとおもわれ
DXのメモリリークはDirectxControlPanelのところのデバッグ設定を使えば
簡単に分かる場合があるからやったことなければ試してみるべし
AllocIDを調べてみてブレークさせてみればおk
あとはpoolとか間違ってないかとかチェックしてみては
フルスクリーンからウインドウモードにしたとき、 nVidiaやIntelのGAだと問題が無いのですが、 GeForce系だと横に縮み、左右が黒くなります。 このときのウインドウのサイズは問題ないのですが、 描画される部分だけ横に縮みます。 何か回避策はあるのでしょうか。
家はGeforce8800だけど、そんな現象起きた事無い 自分で書いた物でも、世間のソフトでも。 それ、ハード周りが原因じゃなくて、何か忘れてるかバグがあるなじゃないの?
>>537-538 当たってるかどうかは分からんが、
NVIDIA系でだけ挙動がおかしい例として、
Zバッファの取り扱いがあるな。
Zバッファの解像度よりもフレームバッファの解像度のほうが大きくなると、
NVIDIAでだけ挙動がおかしくなる。
フルスクリーンからウィンドウモードにしたら、
普通はフレームバッファのサイズも変わるでしょ。
先にソートしておく、みたいな感じ。
541 :
528 :2011/04/18(月) 20:26:04.95
542 :
537 :2011/04/19(火) 16:56:55.38
>>ALL ありがとうございます。 GeForceはデバッグ中に何回かDirectX系のバグを出すと、 挙動がおかしくなるみたいです。 バグへの耐性が低いみたいです。
それってチップのせいじゃなくてモニタとの相性の希ガス
544 :
537 :2011/04/20(水) 02:48:24.65
モニタやマシンを変えても同じ挙動をしました。
>バグへの耐性が低いみたいです。 最高にバカすぎて涙が出るな
546 :
537 :2011/04/20(水) 03:29:47.65
>>545 バグを5回以上出すと、挙動がおかしくなります。
547 :
537 :2011/04/20(水) 03:34:07.02
xlat,uvパイプライン,pic,avr,6502,6800,8080,z80,8086,xmsドライバの作成,SB16のドライバ作成, asm,C/C++,C#,JAVAを使えますので、そんなイージーミスは起こしません。
548 :
537 :2011/04/20(水) 03:53:17.65
OSやコンパイラも作ったことがあります。
そんなに自信満々なら2chの初心者スレで聞かずに自分でなんとかしろよ。 ドライバ作ったことがあろうが多数の言語が使えようが人が書いてる限りバグは出る。 どんだけ自信過剰なんだよおまえ。 OS作った?コンパイラ作った?だからなんだよ、だったらお前はいつも一切バグがでねーのか?w バグらせたらおかしくなるのはメモリやらVRAMやらにゴミがのこっておかしくなってんじゃないのか。 バグチェックしてるときに表示がおかしくなってOS再起動したらコード変更一切せずに(表示は)元にもどったなんてこともあるし。
ママが作ったんだろ。 ママ明日朝起こしてうるさいねえ。
ム板はID出すべき
>>547 むしろそこまでの人が初心者スレなんて場違い
nVidiaにでも問い合わせたらいいんじゃ
現象が再現する最小限のコードを出せばいいだけの話。 ただしアホじゃない限り、その課程で他人に聞く前に自分のミスを発見するけどね。
554 :
デフォルトの名無しさん :2011/04/20(水) 10:27:45.39
初心者スレ在住で「OS作ったことある」って「知り合いのスーパーハッカー」くらいの響き
OSやコンパイラって情報系の学校行ってたら一度ぐらいは趣味で作るだろ
それとバグでないとかミスしないとかはまったく関係ない話だけどな、ってことだ言わせんな/////
98時代だったらBIOSがよくできてたから、ブートローダーさえ作れば しょぼいDOSぐらいなら割とすぐに作れたな。
どれだけ経験があろうが、目の前で不具合が発生すれば一緒なんだが。 むしろ不具合をいかに退治するかのノウハウが経験だろ?
そしてバグを作りこまないよりも、バグを退治する為のノウハウが蓄積される。 本当はバグがないプログラムを作る事に時間をかけるべきなのに そういう目に見えない努力は評価してもらえないもんね。
つまりメルトダウンしない原発にこだわるあまり、 メルトダウンした後の対策が全くされていない今の状態が最高だと。
562 :
537 :2011/04/20(水) 18:25:07.03
x386用のOSだよ。コンパイラはMASMとCの機能を盛り込んで、式その物を構文設定できる物。 以下はendの処理。 #amacro end( d0 )(local0,local1,localn,localt,localcase) ; end ( while,do,for,switch,if ) #getnum localt 2 #getnum localn 3 #subnumsp 3 #define local1 "f_{localn}" #unstr local1
このスレじゃそんな事どうだっていいし。
564 :
537 :2011/04/20(水) 18:48:55.50
#define local0 "b_{localn}" #unstr local0 goto local0 local1: #elseif (localt==13) ; switch #popnum localcase #substrsp 1 #define local0 "case_{localn}_{localcase}" #unstr local0 local0: local1:
コイツ最高にダメだなwwwwwwwどうにもなんねぇよwwww
566 :
537 :2011/04/20(水) 18:54:38.14
#elseif (localt==14) ; if #popnum localcase #define local0 "if_{localn}_{localcase}" #unstr local0 local0: local1: #else #error end文の対応が異常です #endif #endm
んなもん書き込んでも答えはでないぜKENJI
568 :
537 :2011/04/20(水) 19:00:06.49
#if (localt==10) ; while #define local0 "b_{localn}" #unstr local0 goto local0 local1: #elseif (localt==11) ; do #elseif (localt==14) ; if #popnum localcase #define local0 "if_{localn}_{localcase}" #unstr local0 local0: local1: #else #error end文の対応が異常です #endif #endm
ついにスレが電波に乗っ取られる日が来たか…
570 :
537 :2011/04/20(水) 19:04:46.04
10万行1万ラベルを0.1秒でコンパイルするため、2分木検索を使ってる。 後はGDIで3Dのミドルウエアも作ったこともあるから、そっちのソースも一部見せようか?
>GDIで3Dのミドルウエア ありふれてるので結構です
>>570 お前のソース自慢はどうでもいいからとっとと消えてくんねーかなぁ、スレチだから。
これら537のコメントは天才チンパンジー「アイちゃん」 が言語訓練のために書き込んだものです。 このスレッドに多大なご迷惑をおかけしたことを お詫び申し上げます。 霊長類研究所
必要なのは症状を再現できる最低限のソースなのに、どれだけ馬鹿なんだろう?
これは釣りだな
本物の 537 は
>>537 だけ
突然この板のIDが表示されたら面白いのに
一つ確認方法としてSDKについてるサンプルプログラムでも同じ状態になるのか?
頂点バッファってまとめて取ったほうがいいとかあります?9の話です。
弾幕STGの弾とかならまとめてとったほうがいいよ でも普通の3Dゲーの場合無理にまとめちゃうと 送らなくていいデータも全部シェーダ側に投げちゃうことになったり・・・ まあ、ケースバイケースで
確かにゲフォで10回くらいバグを出すとドライバの挙動がおかしくなるな。
それはSDKのサンプルでもってこと? そしたら回避のしようがないなー
583 :
デフォルトの名無しさん :2011/04/21(木) 01:59:56.56
D3DXPlaneFromPointsってどういう式で実装されているんですか?
584 :
デフォルトの名無しさん :2011/04/21(木) 02:09:04.39
>>583 {(y2-y1)(z3-z1)-(y3-y1)(z2-z1)}(x-x1)+{(z2-z1)(x3-x1)-(z3-z1)(x2-x1)}(y-y1)+{(x2-x1)(y3-y1)-(x3-x1)(y2-y1)}(z-z1)=0
じゃね?
>>584 ありがとうございます!
x,y,zは後から与えられる座標値ですよね。
法線でfloat3つ使って、残り1つでどうやってx1,y1,z1を表すのでしょうか?
頂点を3つ渡すだけで、法線は全く関係ないから。
このスレは天才チンパンジーアイちゃん〜霊長類研究所の書き込みは幾度と無く見てきたが 天才チンパンジーアイちゃんを生で見たのは初めてだわ
三頂点あればその三角形の法線が外積で計算できる 法線と平面を成す点(三頂点の中から任意)があれば平面の方程式は求まる、おしまい スレチだからなんか教科書でも見れ
589 :
583 :2011/04/21(木) 19:56:08.06
>>586 使い方ではなくD3DXPLANEを自分で実装したいだけなんですw
590 :
583 :2011/04/21(木) 20:14:31.65
>>588 D3DXPLANE構造体は法線だけで、平面の位置は構造体とは別で保持してるってことで合ってますか?
まだw(d)の使われ方が分かってないのでもうちょっと調べてみます。
スレチすません、ありがとうございました><
dは法線と辺の内積か
>>590 いや、dがあるから平面の向きだけでなく位置も決まってくるはず。
DirectX9で、Nvidiaのビデオカードで、 Zバッファをテクスチャとして使用してデプス値を取り出す (シャドウマップではなく、遅延シェーディング等で使う)方法は ないんでしょうか? Radeonだと、DF24/DF16で取れるようですが、 Nvidiaではカラーバッファの方に出力するしかないでしょうか…
>>593 Zバッファだってフレームバッファの一種なんだから、
ロックしたらメインメモリにコピー出来るんじゃないの?
試してないのでごめんだけど。
595 :
593 :2011/04/21(木) 23:09:19.80
>>594 レスありがとうございます。
一応、速度が重要なアプリケーションでの使用を考えていますので、
ロックしてメインメモリにコピーするのは避けたいところです。
今ちょっと試してみたら、APIがDirectX9でNvidiaのカードでも、
カード自体がDirectX10に対応していれば、INTZフォーマットは
作れるみたいですね。
このフォーマットもデプスが取れるので、これが作成できれば
いけそうなんですが、今試した環境がVistaなので、XP環境だと同じカードでもINTZに
対応しないのかもしれませんが…
>>593 ハード側の対応に依存するような話なら、
dxinfoのサイトで調べるといいよ。
主だったハードウェアの診断結果は大抵載ってるから。
597 :
593 :2011/04/21(木) 23:20:26.42
>>596 おお、ありがとうございます。
参考にさせていただきます!
FPSを求める方法を教えてください 1秒で1000回レンダリングしたら1000ですよね 0.5秒で500回レンダリングしても1000ですよね
時間を取得して何回プログラムがリピートしたかとか?
1 / 1回のレンダリング時間(秒)で求まる
ありがとうございます 経過時間(秒)までのレンダリング回数/経過時間(秒) でした
おまえらに足りないのは日本語力だと思うよ
スプライト表示のとき キャラクタを暗くするのは 頂点のRGBAの調整でできるのですが 白く光らせるにはどうしたらいいでしょうか?
なん・・・だと・・?
>>603 ID3DXSpriteでは不可
加算合成でポリゴンを描画する→光ったように見える
D3DXComputeNormals等で計算した法線ベクトルを、頂点毎に取得するにはどうしたらいいのですか?
頂点だけでは取得しようがないから不可能
610 :
608 :2011/04/23(土) 14:05:15.78
>>605 ,607
ポリゴンでスプライトっぽく描画する方法のことです
加算だと白っぽくなるだけで
背景黒いと白にならないです
パレットやシェーダー使わないで
なんとかならんですかね
ライトでごまかすしかないんかな
>>610 平面もしくは方向の構築に必要な情報
スムーシングをかけるのならその情報と周囲の角度
>>611 加算合成
加算合成は足し算だから src,dst両方暗いと255行かないじゃないすか
すみません。 D3DXMatrixRotationYawPitchRollを使って回転を行っているのですが、 YawとPitchはラジアン角を入れ思ったように縦横グルグル回ってくれるのですが、 Rollが思ったように(=Rollが回るとYaw、Pitchも傾く)なってくれません。 (いわゆる戦闘機ゲーの左右操作のローリングするような挙動を作りたいのです;) 値を入れてもそうならないという事はそれが仕様で私が何か勘違いしてると思うのですが・・ どなたかご助言頂けませんでしょうか・・orz
そういうふうに頭が固いから、プログラムが先に進まないんだよ。 複数重ねたり、加算用のイメージを作ればいいだけの話。
>>614 ドキュメントを読め
順番が書いてあるだろう
617 :
614 :2011/04/23(土) 15:07:25.01
あ・・回転させているのがベクトルでそれを座標に加算してたので当然だったのかもしれません; Rollによる傾きは別途計算しないと駄目ですね・・; 多分自己解決できると思います、お騒がせしました;
回転軸と角度で計算すればいいだけの話なのに、 何で面倒な方法を使おうとするのかさっぱり分からん。
行列の合成を使ってないんじゃないか? ドラゴンボールのキントン雲やりたいなら 1つの行列だけでやるのはかなり困難だと思う XZ平面の姿勢行列を制御する行列Aとバンクを制御する行列Bを2つ作って 描画時(描画時じゃなくてもいいけど)に合成して1つにして使えばいいと思う Aの行列の上にBの行列が乗る形で合成したらうまくいくんじゃないだろーか?
>>614 ヨー・ピッチ・ロールとか、X軸・Y軸・Z軸だけでやろうとすると
ジンバルロック(←要ぐぐり)が起こる。
任意軸の回転を使えば解決。
>>618 初心者はそこが分からないから質問に来ているんだよ。
ジンバルロックが理解できる奴は最初から質問しない
>>615 それくらい誰でもわかるわ
でもそれじゃ処理重くなったりリソース増えるわ
使っているのがID3DXSpriteというのが前提なら、処理の重さとか度外視だろう。 普通に自前で頂点を指定しているのなら、テクスチャのαだけ使って、 頂点カラーなりで調整すればいいだけの話なんだから。
>テクスチャのαだけ使って、 詳しく教えてください ・頂点カラー255x4にしても、テクスチャの色が普通に出るだけで ・加算や乗算合成にしても、下地との合計が255未満なら白くならないし ・色のみ指定でテクスチャ参照しないとアルファの部分が抜かれず ・テクスチャのαだけ使うのは白色マスクで出来るかもしれないけど 白とテクスチャ色の中間の色ができない ぬう
いたポリ数枚重ねただけでなんで重くなるんだよ まさか1枚描画するたびにID3DXSprite::Begin,End呼んでるんじゃないよな?
ID3DXSprite使ってないです つーか加算言っても、加算する色が0だったら何枚重ねても黒いまま そんなんだったらマルチテクスチャとか使うわ パレットって便利やね
>>624 まずはドキュメントを読んで、どのステートがソースの色を決定するかと、ブレンディングモードを確認しろ。
単純にソースの色をどこから持ってくるのか、持ってきた色をどう計算するのか設定するだけなんだから。
それだけ分かればホワイトアウトなんて簡単に出来る。
ありがとうございます
ちなみに背景を考慮しないのであれば加算合成である必要はないよ。
固定でやるなら一番楽なのは鏡面反射光を段階的に強くしていく。
ブレンディングのやつ2次元ループで全パターン試して描画したけど マスクありホワイトできねー
632 :
デフォルトの名無しさん :2011/04/24(日) 05:21:20.29
ワールドでx軸は右が+?yは上が-でzは向こうが+で合ってる?
>>632 適当にオブジェクト作って動かした方が早い
物体を円上に動かすことはできるのですが楕円上に動かすにはどうすればいいのでしょうか?
最近、ちょっとググればわかるような ほんっっっっっとにくだらないことを質問するアフォがいるな 脳みそ性能悪いなら何も作れないだろ 死んでろバーカ
すいません自己解決しました
自決しました
/ ̄ ̄\ (丶/ ヘ || (゚Д゚) |/) <他己解決しました \>◎(○)◎/8/ (\_ノ/⌒/⌒/⌒oイ_ノ| `\_丿o|8|8|し|ノ (_ノ\_)_)_ノ
よかったゲソ
頂点バッファを作成して描画して開放、までを繰り返す処理って一般的ですか? というのも、描かせるモデルがフレーム毎に変化させようと思ってるんですが、 頂点数が100の時もあれば、200の時もあるので、それを実現させようとしたら 作成&開放しかないのかなと思ったのです。
200で作って100のときもそれ使うとかは?
644 :
642 :2011/04/25(月) 17:28:26.24
>>643 やっぱり、予め多めにとって、それを上回らないくらいで使い回すのが主流なんですか。
一応、メモリを節約しようと思って作成と開放を考えてみたのですが、何か負担があるかなと思ったので。
作成と解放より使いまわすほうが高速だな 結局メモリの動的割り当てってことだから 毎フレnewしてるようなもん
>>642 どちらかというと特殊ケース。
モデルが変化するってことはCPU→GPU間の頂点情報の
転送が起こるので、かなり遅くなる。
DrawPrimitiveUpみたいに。
GPUは、GPU側のメモリにある頂点バッファをいっきに描画するときに
パフォーマンスが出る設計になってる。
昔実験したら、30倍くらいの速度差があった。
頂点シェーダで間に合う処理ならば、GPU側でモデルデータを
変更できるのでかなり速くなるはず。
毎フレ変わるビームとかのラインっぽいポリゴンとかって これと同じようにバッファ使ったほうがいい? DrawPrimiticeUpでやってるけど
描画時に移動行列とスケーリング行列変更するだけじゃダメなのかそれ
ビルボード化したものを上下さかさまにするにはどうすればできますか? RotationYawPitchRollをいじればいいと思ったのですが画像がくずれちゃって
テクスチャ座標を逆さまにすればええんでねえの
>>647 >>648 ポリラインのやり方等によっては台形になったりして形状そのものが
変化するパターンもある。
そんなに頂点数多くなければDrawPrimitiveUpでいいと思う。
あくまで大量に頂点情報を転送する場合がネックなのであって、
GPU内部のレンダリング的には同じだから。
ただ、出来るだけ全部のビームの頂点を一箇所にまとめて
一度のDrawPrimitiveUpで描くこと。
>ポリラインのやり方等によっては台形になったりして形状そのものが >変化するパターンもある。 それ変化するパターンもある、んじゃなくて考えて計算してないだけ
ホワイトアウト ブラックアウトを徐々にさせたいんだけど やっぱり手軽な方法は真っ白な画像のアルファ値を上げてく方法でいいですか
色固定なら画像テクスチャいらないじゃん まあ楽なんだけどね
マルペケの
http://marupeke296.com/DXG_CreateBorad.html ここで、DirectXのデフォルトだと反時計回りのポリゴンは描写して
その裏つまり時計回りの方を描写しないとなっていますが
他のサイトだと、デフォルトは時計回りで描写となっています
調べてみると、時計回りを表として描写するのがデフォルトのようですが
マルペケのサンプルプログラムだと、反時計回りで頂点を指定しているにも
関わらずちゃんとポリゴンが描写されています
これはどういうことなんでしょうか?
カメラが後ろにあるから
>>657 すいません、カメラとはどの部分ですか?
他のサイトのサンプルと見比べても、頂点の指定順が
時計回りか反時計回りかの差しかないように思います
でも、反時計回りでも表示されているのはおかしくて・・・
どこか見落としてるんでしょうけれど、さっぱりわかりません
時計回りで頂点を置く、ってのはどっちから見て時計回りなのか → じゃあ裏側から見たら逆周りじゃないのか → 3次元空間では、どこから何を見るが決定して初めて目の前にそれが現れるから、その前提次第 → その前提の事を、カメラと言う あと、"裏"側を表示しない=カリングの指定なども この辺のイメージが掴めない場合、多分この先何も出来ないと思うので、三次元処理の基礎をもう一度
>>656 つまるところレンダリングターゲット上で時計回りが描画される
ここがあやふやだったのでは?
y+が下なら上の時と比べると逆になる
OpenCVで作ったプログラムとDirectXで作ったプログラムを1つにまとめたいのですがどうすればよいのでしょうか? やりたいことはOpenCVで求めた変数をDirectX側に渡したいだけなのですが OpenCVはコンソールアプリケーションでDirectXはWin32APiでないと起動できないので同時に動かせず困ってます。 ご教授よろしくお願いします。
OpenGLを使う
コンソールアプリケーションだってWin32API使えるんだぞ
必要な関数をコピペして持って行けばいいだけの話。 何が困っているのかさっぱり分からない。
そうなんですか。 1つにまとめたんですがエラーはでないんですがDirectX側のウィンドは作成されるのですが OpenCV側のウィンドが作成されずプログラムが動いてないんです。
ウインドウを二つ出す必要性が無い
ウインドウは出さなくてもいいんですがプログラム自体動かないです 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartupみたいなエラーがでてきました
プログラムの中身を理解せず闇雲に2つをくっつけようとしてるのか?
死ね
CVってよくわかんがウインドウハンドルを取得すればいいんじゃないの
WinMainを作れ、mainはいらない それからWindowsプログラムを基礎からきちんとやれ
DirectX云々以前の問題だからスレ違いだろう
言語の勉強から始めないといけないレベル
コンソールでビルドしなければコンソールは生成されんよ
嘘を言うな APIで出せる
つ AllocConsole()
DirectInput と WinAPI使うのと どっちがいいと思う? 入力はキーボードとジョイパッドと多くても合計2個しか使わないけど
>>677 ジョイパッドのみDirectInput
それ以外はWinAPI推奨
スペシャルサンクス
/ とまどい
ジョイパッドはDirectInputじゃないと入力情報が 取れないけど、他は普通のAPIでいけるからでしょ
joyGetPosEx とかのAPIは?
msdnには
>>678 が書いてあったよね
あとxboxのコントローラー使うんなら代わりにXInput使ってくれみたいな
>>682 それだけじゃなく、例えばキーボードの入力の張替えなんかでカスタマイズしても、
DirectInputだとそれをバイパスして元のキー入力しか受け付けなくなってしまうから。
DirectInput使うとUWSC防止(Bot防止)になっていいぞ それだけでマウスやキーボードの入力が取れなくなる
なるほどなー。
688 :
デフォルトの名無しさん :2011/04/30(土) 03:19:15.21
理由あってDirect XのSDK 2005 Decをwin7の64bitに入れたら、 PCが起動しなくなりました・・・ 起動後、ユーザにログインすると画面真っ黒になって、なんともなりません。 ctrl+alt+delでログオフはできるんですが、普通に操作できません。 シャットダウンもできません。 どこかで同じことに出会った人いますか。
それ多分SDK関係ないんじゃないの・・・
>>688 とりあえず、Windowsの復元だね。
開発者ならそれくらいは準備してるはず。
とりあえずセーフモードで起動してみたらどう。 新しいユーザーつくってみてそっちで通常起動するとかさ。
692 :
デフォルトの名無しさん :2011/04/30(土) 04:57:45.29
DirectX SDK - (December 2005) Supported Operating Systems: Windows Server 2003; Windows Server 2003 Service Pack 1; Windows Server 2003, Datacenter x64 Edition; Windows Server 2003, Enterprise x64 Edition; Windows Server 2003, Standard x64 Edition; Windows Small Business Server 2003; Windows XP; Windows XP 64-bit; Windows XP Home Edition; Windows XP Home Edition N; Windows XP Media Center Edition; Windows XP Professional Edition; Windows XP Professional N; Windows XP Service Pack 1; Windows XP Service Pack 2; Windows XP Starter Edition; Windows XP Tablet PC Edition
693 :
デフォルトの名無しさん :2011/04/30(土) 05:00:26.88
まぁどうせどこぞのよくわからないドライバでもぶち込んじゃったんでしょ・・・
やーいw
しかし、サポートしてないOS見つけたら止めてくれてもよさそうなもんだけどなw
サポートも何もSDK関係ないから
697 :
688 :2011/04/30(土) 13:49:54.31
> 690 復元は問題なくできるんだけども、開発ができない… インストール後、再起動さえしなければ続行できるんですがw > 691 セーフモードだと起動するけど、テストができない… コンパイルまでならSDK展開するだけでできるんですが、 テストができないとなんとも… どうもSDKで入るデバック系のdllがおかしい?? 通常に起動する状態からSDKだけ入れてみても再現性100%で起動しません > 692、696 サポートしていないこともわかりつつ、一方でSDKいれても関係ないだろうと 思ってましたがやはりだめぽなんですな。 既知の問題かなぁーと思って解決策がないかたずねてみたんですが… あきらめてVirtualBoxでしょうか…
698 :
688 :2011/04/30(土) 14:03:05.09
事故怪傑しますた。 2005 Decインストール後、最新版のSDK 2010 juneをもう一度入れたら 起動もでき、テストもできますた。ありがとうございますた。
699 :
デフォルトの名無しさん :2011/04/30(土) 14:11:33.41
>>698 Decインストール って何? 多分アンインストールの気がする。
Decemberだろう
>>699 ワロタ。変なとこに噛み付こうとする前にお前にはやることがある。
>>698 それ、juneが動いてるだけでdecのほうはまったく動いてないんじゃ?
703 :
デフォルトの名無しさん :2011/04/30(土) 17:19:03.58
2D描画のみしたいんだけど 昔あったDirectDrawはもう無いらしく 最新版SDKでも覚えることは大して変わらない?
>>704 DrawPrimitiveでスクリーン座標の描画方法を調べれば幸せになれる
仕様は大分変わってるように感じると思うけど
昔よりちょっぱやで半透明や加算半透明、回転、拡縮なんでもござれでいいよ
GDIじゃダメか。 Bitblt か AlphaBlend するだけで済む話になるが
速度はまったくでないけど 普通にやるよかある程度ましなのがGDI+かな?
速度とか必要を満たせるならそれでいんじゃないの? あとGDI+ は機能が+なのであって、速度の話関係ないんじゃない?
俺GDIでもコード書くけど、特に不満だった事は無い 3D扱うなら問題外だが
710 :
704 :2011/04/30(土) 22:30:56.66
まあ2DだけならGDIでもできんこたぁないわな AlphaBlendはバグってるって聞いたけど DirectDrawのあの糞長ったらしい初期化処理みたいなのは今でも健在なの?
>>707 は速度が出るなんて一言も言ってないだろうに
>>710 ちょっとは自分で調べるとかしないの?w
GDIはGPUのRAM間で直接コピーできたから、かなり速かった。 ただ、後発のGDI+でアルファブレンド使うと透過処理はCPU通すから めちゃ遅だったね。
マジで?
>>707 だけどGDI+で回転とかやると自分でやるよか超早くね?
アルファブレンドも結構使える速度が出てた気がするけどな
ハードの機能使ってると勝手に思い込んでたけどあんまり早くなかったんだな
5.x時代の話である
回転+アルファブレンド+拡縮とかの速度は単に機能+じゃすまない速度だと思うけどな 俺がアセンブラ書くよりは数倍早い気がした
アルファブレンド等もGDIアクセラレーションの対象だったはず ただし対応してるカードorドライバが少ないって話を昔見た
アセンブラで書く書かないとか、あんまり関係ある内容じゃなくね やれる事って、sinテーブル用意する事と、あとは間接アドレシングしてるような部分を 若干レジスタだけでやりくりするように書くだけじゃね。
GDIとか中途半端なもの選ぶなよ 男は黙ってOpenGL
>>721 俺も黙ってOpenGL好きだけど、頼むからスレタイのアルファベット読んでくれ
D から始まる所だ。頼む
ダイレクトにチョメチョメするのが初めてなウブなハートな者が質問するスレ。パート人妻(34)
>>719 回転のアセンブラってsinテーブルなんて使わないだろ
いい加減スレチ
>>724 そんなの書くロジック次第だろ。バカなの?
アセンブラで高速化の前にまず作品完成させろよ
こんなスレに書き込む前にまず作品完成させろよ
730 :
デフォルトの名無しさん :2011/05/02(月) 12:52:06.53
2Dゲーム作るのに最適なページ無い?
おまえらスレタイ読めようっとおしい
>>732 絶対つかいませんーw
よほど頭のおかしい人しか使いませんーw
>>734 絶対使わないとは限りませんーww
他人は自分と同じコードを必ず書くとか思い込んでるキチガイしか、そんな事言いませんーw
いいかげんにしろよ二人とも
>>734 お前どこかのサイトで見た内容を丸暗記してて、それしか方法無いって思い込んでるんだろ
>>735 お前もバカにいつまでも粘着してんなよ
ス レ タ イ を 百 回 読 ん で ど っ か い け
エンジン高速化の前にまずアセンブル完成させろよ
>>735 だったらどこに使うのか言ってみなさいよ低脳君w
まぁお暑い愛の交換日記だこと。
>>739 かあさんは黙っててくれないか
いま大事な話をしているんだよ(cv:えなり)
>>738 むしろ絶対に使わないと言い切る根拠を書きなさいよ
他人がいないと何も出来ない知ったか君w
おっさんだけど atanテーブル作って8分割して使うより atan2呼んだほうが早くてびびった
御子さんだけど、もっと詳しくて血湧き肉踊り心高鳴り胸弾む詳細を頼む。
>>741 マジレスすると
sin項の計算が1ドットの回転処理にたどり着く前に値が決定してるので
テーブルは必要ない
角度の計算が必要なのはプリミティブの描画ごとに1回だけで、 各頂点座標に対しては行列の一次変換をかけるだけだから。
>>717 >>719 の流れに対して、突然
>>724 が現れて
>>726 の返事になり、
そこで 「そうだな、
>>744-745 のような処理を想定してる前提なら、いらないな」 の一言が出ないまま、
「いりますー」 「いりませんー」 のガキみたいな応酬
結末は、どっちもちゃんと前提を出せよと。 そして ス レ タ イ を 200回読めよ と
>>747 おちつけ
つ(cv:えなり)
これ、お前のだろ?
DirectX初心者の質問って出尽くした感
お前の中ではな
やい!教えろ!www その辺に転がっている、Xファイルを持って来て サンプルプログラムを変えて表示させたいのだが? ファイル名を変えて表示できる? 換えるのならどの辺かえれば良い? お願いしますwww
むしろそのXファイルの方をサンプルプログラムのと同じ名前に変えた方が楽なのではないか
まずニホンゴでお願いしたい
>>755 そういうのどうでもいいから
>>751 アニメーションついてるやつかそうでないかで変わる。
サンプルがアニメーション付き→アニメーション付きのやつをサンプルのファイルと置き換える
サンプルがアニメーションなし→ry
ただしアニメーション付きXファイルは置き換えだけだとモノによってはうまくいかないと思うよ。
わかってると思うけどアニメーションのサンプルにアニメーションないファイル投げてもうまくいかないし逆もしかり。
まず生理臭いのでニホンゴでお願いしたい
>>751 なにこのイラッとくる中途半端な釣りみたいなレス
坊やだからさ
DIMOUSESTATE2のrgbbuttons[8]って ボタン情報がはいるのはわかるのですが どの変数にどの部分の情報がはいっているのでしょうか? リファレンスにもあまり載っていないので
自分の持っているデバイスのボタンを押して出力状態を表示すればいいだけの話なのに、 いちいち質問する意味が分からない。
762 :
デフォルトの名無しさん :2011/05/03(火) 21:54:29.54
>>761 ・・・というかコントローラの番号依存って良くないのに
ってマウスかよw
なんかかぶったかのようなにDIについて聞きたいのだが hr = DirectInput8Create( _hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**) &this->g_pDInput, NULL ); と初期化したのだが、DIERR_OLDDIRECTINPUTVERSIONとエラーがでるんだが なにか間違っているところある? 使っているバージョンが古いとか言われているんだがもっと新しいバージョンがあるのか?
ごめん 一分後に自己解決 DIRECTINPUT_VERSION を 0x900で定義していた
複数人プレイ可能にしたいんだけど ユーザIDみたいなのを利用したいと思うんだよ IDを振り分ける関数とかあります?
767 :
766 :2011/05/04(水) 22:58:54.09
DirectInputで
768 :
デフォルトの名無しさん :2011/05/05(木) 02:00:25.59
>>766 ID?・・・
情報を取得するデバイスのインターフェイスを
プレイヤーとして扱うのじゃだめなの?
769 :
603 :2011/05/05(木) 06:14:39.91
10日かかったけどやっと解決した お前ら具体的なコード書かないから苦労したわ
>>769 おめでとう!
俺も知りたいので書いてほしい
重なりを目出させるようにアルファブレディング?
772 :
デフォルトの名無しさん :2011/05/05(木) 11:36:55.70
もの凄い漠然とした質問で申し訳ないのですが、 マルチパスでのシェーダーの管理ってどのようにしていますか・・・? 現在描画対象となる(DrawPrimitiveを実行している)cppの中で、 複数のエフェクトを読み込み、各々ハンドル取得して、レンダリングターゲットを生成し、 描画時には各シェーダーにパラメーター渡して・・・と、 パスが増えるごとにコードが肥大化してしまい、可読性も著しく落ちています。 レンダリング結果を次の入力として使っているため思い切ったcppの分割も出来ず、 効率の良いシェーダーの管理が思いつきません orz 何かしらヒントを頂けますでしょうか・・・? よろしくお願いします。
フレームワークなかんじ〜みたいな〜 コードを上手く書くなんて、頭の良さに比例するだろw
頭の良さ(笑) どれだけ経験積んだかだろ
そうだね先人のソースをいくつ見たかに比例しそう 凄い人はさらにそれを上手くしていくんだろうけど
776 :
デフォルトの名無しさん :2011/05/05(木) 15:55:48.60
Windows 7上に標準搭載されているDirectX11ですが、DirectX11特有の機能 を使わずにDirectX9相当の機能のみを使うのなら、Windows XPが動いていた グラフィックカードでも使えますか? それとも、グラフィックカードが DirectX11対応でないとダメですか? 何でこんなこと質問するかというと、DirectX9+VC++2008でコンパイル済み のアプリケーションがWindows 7上で動いたためです。
機能を使うかどうかっていうか、プログラム側から DirectX11を使うかDirectX9を使うかで決まる。
778 :
デフォルトの名無しさん :2011/05/05(木) 16:06:49.13
プログラムでDirectX11を使うとします。そのときにグラフィックボード がDirectX11対応でないとダウトでしょうか?
ダウトじゃないよ。
780 :
デフォルトの名無しさん :2011/05/05(木) 16:27:51.26
ありがとうございます。
下記プログラムで50番目の頂点のx座標を1.0に変更したいのですが 頂点が1.0の位置と元の位置の2か所に存在してしまいます。 元の位置の頂点は消して1.0の位置にだけ頂点を移動したいのですがどうすればよいのでしょうか? //頂点の参照処理部分 { LPDIRECT3DVERTEXBUFFER9 pVB=NULL; pMesh->GetVertexBuffer(&pVB); DWORD dwStride=pMesh->GetNumBytesPerVertex(); BYTE *pVertices=NULL; D3DXVECTOR3* pvVertex=NULL; if(SUCCEEDED(pVB->Lock(0,0,(VOID**)&pVertices,0))) { pVertices+=g_dwIndex*dwStride; pvVertex=(D3DXVECTOR3*)pVertices; g_dwIndex = 50; pvVertex->x = 1.0 pVB->Unlock(); } SAFE_RELEASE( pVB ); TCHAR sz[100]; sprintf(sz,"%d番目の頂点の座標は%3.1f %3.1f %3.1fです",g_dwIndex,pvVertex->x,pvVertex->y,pvVertex->z); RenderString(sz,10,10); } pDevice->EndScene();
ありがとうございました
>>781 >g_dwIndex = 50;
の位置が悪いんじゃね?
ってC言語も怪しい状態な予感
頂点バッファのフォーマットが載ってないから分からないけど、 頂点バッファをLockして得られたポインタをD3DXVECTOR3への ポインタと見なして大丈夫だっけ?? あと、 pvVertex->x だけだと、50番目じゃなくて先頭になっちゃう。 pvVertex[g_dwIndex].x とかになるんじゃないかな?
基礎すっ飛ばしてやってきちゃって自滅するパターンか
そんな知識で大丈夫か?
一番いい実装で頼む・・・
基礎ちゃんとやらんと 壁にぶつかりまくりで効率悪いし やる気なくすよ
初心的な質問なのですが宜しいですか?(というより此処でいいのかな) XAudio2を使おうとするとMp3フォーマットを定義している MMReg.hにて adpcmcoef_tagとadpcmwaveformat_tagが再定義されるのですが これを回避する方法はないでしょうか? 仕様上両方のヘッダーを両方取り込まないといけないのですが
>>792 namespaceでは解決できないの?
>>792 同じもののはずなので、新しいものを使う。
違う構造になってたらまた改めて考える。
定義すれば宣言切り替えられる構造になっていた気がする
入力ってどういう形で返って来るの? boolなの?
direct input でキーボード状態を以下のように取得すると思うのですが、 ・& 演算子は実質 == 演算子と同じ意味でしょうか? ・また0x80の値に意味がありますか? (0x70だと単に現在ボタンが押されているではなく 押し続けた・離していた状態から押した瞬間など 状態の違いに分かれているとか) GetDeviceState(256, buffer); if ( buffer[ button ] & 0x80 ) { //buttonが押された }
C言語の勉強を勧める
>>797 >・& 演算子は実質 == 演算子と同じ意味でしょうか?
全然まったく本当に違うので、
>>798 と同意見
DirectX以前の問題ですよ本当に
&演算子はビットを抜き出す演算子。 ==は完全に同じかどうかを確認する演算子。
つまりビットが一つでも一致すれば x > 0 でtrueになる仕組みだと思うけど なんでこんな判定の仕方になってるんだろ
x > 0 でtrueになるんじゃなくて、 条件式は0であるか無いか、だ。 その理由は、この高級アセンブラについての初心者向けスレにでも行ってくれ
まぁどちらにせよ プログラムなれていると>0とか省くのがあるからなぁ if(変数単体)とかそういう使い方もあるし 確かにその通り動くんだろうが、ぶっちゃけそういう書き方していない とわかりにくいよな
805 :
804 :2011/05/08(日) 01:38:13.65
連スレだが
>>797 つまり 0x80 っていうのは二進数でいうと 1000 0000って訳よ
でそれと入力の結果(Hogeとする)を&演算しているって事は
Hogeの一番上のビットが1か0かって判断をしているわけだ
0x70っていうのは1110000だからその部分を判別してるってことだろ
まぁそれがどうなるかっていうのはしらねぇよ
リファレンスでもなんでも確かめろよ
そもそも演算子すらもまともに使えない奴がDirectXをやったところで
まともに動作すると思えない。
以下
>>798 と同意見
>>805 はわかっててわざと、伝える為に言葉濁して書いてるイケメンだと思うが
元の質問者向けに補足だけしておくと、判別してるって言うか、演算な。計算。
そのビットだけ残す計算。 8bitの範囲で言うなら、128で割ってるのと同じ(=x&0x80)
そしてここは DirectX ライブラリの初心者スレであって、それ以前の初心者スレではないって言う
>>775 誰か教えてくれ!
>そうだね先人のソースをいくつ見たかに比例しそう
どこで見ている?
参考になる所って有りますかね?
そんなの個人サイトでも SorceForgeのオープンソースでも GoogleのCodeSerchででもいくらでも出てくるだろ いくつか読んでみて自分や今作っているゲームの フレームワークとかと相性がよさそうなの探し出せカス こうだっていってお前は納得するのかと、小一時間吉野家で問い詰めるぞ そういう部分で労を惜むな
>>807 世の中のオープンソースプロジェクト
sourceforge
googlecode
いくらでもあるんじゃね。良い悪いは別にして
ぱっと見見ていると此処の質問者ってせかす癖にお礼すら言ってこないとか ひでぇヤツらが多いよな まぁ回答者さんは善意で答えているから気にしている人は居ないと思うけど
子供が多いんだよ。「かっこいいゲームをめんどくせーとか言いながら簡単につくりたい」 と妄想する子供らの集まる場所
812 :
デフォルトの名無しさん :2011/05/08(日) 11:15:40.46
>>811 「作りたい」というか「作ったという優越感に浸りたい」じゃないかな。
3Dエンジン作ったんだぜっていいつつサンプルとか人のコードのコピペのせいで仕組みを本人全然理解していないのを時たまみるし。
恐縮です(ヽ'ん`)
荒れるんだから、C++の初心者スレに誘導すればよかったんだ。
DirectDraw の使用は非推奨になりました。 ゲーム開発での DirectMusic の使用は非推奨になりました。 DirectPlay は廃止が予定されており、新しいアプリケーションの開発には使用しないことを強くお勧めします。 DirectSoundの使用は非推奨になりました。 ゲーム開発での DirectShow の使用は非推奨になりました。
DirectGraphicsはどうなの?
>>815 で思い出したが、当初の予定ではDirectXはCOM使ってるから
DirectX-DLLは常に最新のみで、COMインターフェイスはそのまま継承し続け
古いゲームでも最新バイナリで動作可能!!とかだったんだよな。
例えばトゥームレイダー2でHWT&Lが動作するとか。
おっと、歳がばれるな。
自分で書いて思い出したが 昔はGPUメーカーがいっぱいあって、グラボは熱かったんだよ。 Geforce256がHWT&Lを引っさげ鳴り物入りでデビューしたが、ベンチ以外モッサリとか Savage2000がHWT&Lを引っさげ鳴り物入りでデビューしたが、全てにおいてモッサリとか 今も物理演算とかいろいろあるけど、ちょっと難しくなりすぎだよね。
でっていう
>>818 おっさん今のGPUの方が熱いんだよ
下手なテクニックが必要ない今のほうが組むのは楽
ただしD3D10以降に限る
>>816 >DirectGraphics
どうなのもなにも、そんなものは存在しない
822 :
初心者 :2011/05/08(日) 23:21:53.95
ウインドウを表示するだけのソースを書いて(ほぼコピペ) 表示はできましたが、 解放のところで0xC0000005エラーがでてしまいます。 ポインタのエラーみたいですが原因がわかりません。 DirectXの再インストールしても直りませんでした。 VISTAで、ドライバータイプはDirectX10_1でデバイスが作成されます。
823 :
初心者 :2011/05/08(日) 23:24:04.25
わかる方いたらご指導ください あと文字数制限きつい・・
DirectX再インストールとかする前に、
その切り貼りしただけのソースで何をやっているかはわかってるの?
ポインタのエラーみたいですが、じゃなくてそのポインタはどこの何?
そんだけの話でわかる方なんて、エスパーしかいないってマジで
ソース貼るならここへ →
http://codepad.org/
825 :
初心者 :2011/05/08(日) 23:52:50.50
おお。こんなところがあるんですね、ありがとうございます。
動作は流れはなんとか理解できています。
エラーが起こる個所はスマートポインタ使用時はD3D11Deviceの解放時です。
スマートポインタを使わないとSAFE_RELEASE(this ->context);
のところでエラーがでます
ソースは以下になります。
http://codepad.org/EzGY0YtL よろしくお願いします(._.)
826 :
初心者 :2011/05/08(日) 23:57:41.67
訂正 D3D11Device → ID3D11Device 申し訳。(._.)
827 :
初心者 :2011/05/09(月) 00:11:47.34
ちなみにSAFE_RELEASEマクロでの解放時の解放の順番を変えると 何故かswapChainとdeviceとcontextのうち 一番最後に解放しようとしたもので同様のエラーが起きます。 サイトを回ったのですが該当の情報がとんとありませんでした・・
スレッドじゃね?
>>827 あぁなんだ。 それ、簡単に言えばスマポだから。
つまり解放順番が意図どおりでないせい、と思う。 よくある話
830 :
初心者 :2011/05/09(月) 00:46:01.54
マクロでのRelease()だと解放順がランダムなんですか? また_tWinMain関数ないで直接このクラスをインスタンス化してるので 別スレッド化はしてませんが、そういう方向での問題な気もします。 C#のガベージさんに頼り切りだったもので・・ DirectXのスレッドの仕組みとCOMの解放順をもうちょっと勉強して出直してきます。 ありがとうございました(._.)
いやマクロのRelease順じゃなくて、スマポ側
SAFE_RELEASEでエラーが出てるってことはスマポ使ってないだろ 上がってるソースがエラーが出るソースと違うから混乱してるが
833 :
デフォルトの名無しさん :2011/05/09(月) 01:53:23.26
SAFE_RELEASE を使えば開放の順番、タイミングなんて関係ないって思ってるのかねぇ・・・ 使用中状態なら終了するなりする。 親子関係がある者については子・・・というか作られた逆順にしないと管理がどこか彼方へ跳んでいってしまう。
>親子関係がある者については子・・・というか作られた逆順にしないと管理がどこか彼方へ跳んでいってしまう。 まあ普通そういうふうには作らんけど。 IDirect3DResource9からIDirect3DDevice9を取得できるみたいに。
親が急に居なくなったら子はグレル
てか、SAFE_RELEASEが駄目じゃん。 CComPtrでコンパイル通らなかった気がするけど、Releaseと=NULLで2回Releaseが呼ばれてんじゃね。
頂点が重複しない場合はインデックスバッファ付く必要ない?
訂正 付く→使うです
>>837 サイコロを想像したとき、頂点は 8 あれば良くて、面数は 6*2 = 12三角面
これを各面ごとにマテリアルを変えて描画するような場面を想像した時、
1つの三角面は頂点3つだから、サイコロ1面で言うなら6頂点づつ指定する必要があるが、
これをインデクス使わないで表現すると、単純にサイコロ1つあたり、6*6 = 36頂点必要なるよな?
同じ8頂点の値がコピーされた36頂点分のデータ。 1頂点あたり三軸座標値だけだったとしても、float が108個。
これは無駄だし、同じ頂点の情報を持つ構造体(カスタムVERTEX)は1つにしておきたいから、
頂点は8個、インデクスを36個とかにする、そういう事。 データの様子をよく観察して、方法を選択すること
あぁ、で、そういう意味であってもまったく重複しない = 三角の板ポリがバラバラに宙に浮いてるだけ、って話なら、 インデクス必要ない
でもどうせそのサイコロに テクスチャ張るならテクスチャ座標の存在のせいで頂点を共有ないよな?
法線って頂点1つにつき3つ必要じゃないですか?
>>841 面UVと、頂点UVって考え方があるので、
面UVの場合には1つの頂点あたり、UVがnセット必要になる = コピーしたそれぞれの頂点が必要になるが、
頂点UV(カスタムVERTEXに持つような)の場合、それはそういう仕様として使えばいいだけ
>テクスチャ座標の存在のせいで頂点を共有ないよな
このせいで、って言うより、どういう仕様にしたいか次第
>>842 3つてのが数値3つ=三軸の事なら当たり前。ベクトルだから
面UVなんてあるのかサンクス
面UVってのはあくまで考え方で、そういう実装を自分でしたならば、だから 別にそういう機能がある訳じゃないので注意な 面UVの例で言うと、例えば Blenderっていう統合3DCGソフトのUV管理がそれ
インデックスバッファ使わないのって板ポリくらいだな
>>846 むしろ板ポリでこそインデクスバッファ使いまくるよ。
ボタンやプログレスバーなどの挙動も含めて1回で描画したり、
文字画像をテクスチャ化した上で1回で描画したりするときに
アニメーション表示を併用するときはインデクスバッファで調整する。
それって、複数のオブジェクトを一括で描くの?
テクスチャが一緒であればそう
以前DirectX9をちょこちょこっといじくった事があるぐらいの初心者同然ですが これから本格的に10か11で3Dアプリを作りたいのですが 今のところテセレーションやGPUプログラミングなど、11特有の機能を使う予定はないのですが 10と11どちらがお勧めですか?
11
D3D10までにしか対応していないようなグラボに向けて最適化に取り組むのでもなければ D3D10は忘れていいよ。
Direct3D10用のデバイスもDirect3D11から全ての機能が使えるようになっているんだが、 何をどう最適化するというのか、説明してもらおうか。
854 :
850 :2011/05/10(火) 16:02:25.78
レスありがとうございます。 なぜこういう質問をしたかといいますと、以前どこかのスレの誰かが DirectX9から10になってだいぶシンプルになったのが 11になってまた複雑になってきたとうい様な事を言ったからです。 実際、両方のコードを見比べてみると(まだtyutorial7しか見てないが) 10の方が短いコードですんでいるという事もあったし、資料の少なさもあるので 11で組んで良いか不安になったんですが、DirectX10のコードで買いても 初期化以外はだいたい11で通るのでしょうか?(通るなら、資料の少なさは 気にならないと思います。) その他互換性以外の部分でDirectX11で失ったものとかはないのでしょうか? (例えばDirectX9のステートが好きだった人は10で、DirectDrawが好きだった人は 8で喪失を感じたかも知れません)
すみません質問です 3次元において ベクトルの方向を向く 回転マトリックスを作成したいのですがうまくいきません (例:ミサイル等が進行方向を向く処理) 最初からオブジェクトが向いている方向と方向ベクトルとで 外積を軸に内積の分だけ任意軸回転をしてる方法をとっているのですが うまくいきません 何か参考になるページなどご存知の方はいらっしゃいますか? v1 = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );//最初にオブジェクトが向いている向き v2 = data.GetVec();//方向ベクトル取得 d = D3DXVec3Dot( &v1, &v2 );//内積 D3DXVec3Cross( &cross, &v1, &v2 );//外積 //任意軸で回転 D3DXQuaternionRotationAxis( &q, &(cross), d * D3DX_PI * -0.5f); // mに最終的な回転ベクトルが入る D3DXMatrixRotationQuaternion( &m, &q );
内積d とは何か d * D3DX_PI * -0.5fとは何か
>>855 カメラ座標決めるときに使うD3DXMatrixLookAtLH関数使えば出るんじゃないの?
858 :
855 :2011/05/10(火) 17:11:47.43
>>856 d は float型ですすみません
D3DXQuaternionRotationAxisの第三引数はラジアン単位だそうなので
d( -1〜1) × 3.14... × -0.5f
( -0.5fはdで1がきた場合そのままだと180度回転してしまうので調整用)
>>857 一般的(?)にはそちらを使うのが普通なのでしょうか?
そちらの方法も試してみます。
>>839 頂点だけ考えるならそれでいいけど
サイコロの場合
UV見ると同じ頂点でも違うUV座標なので
インデックスバッファ使うわけにはいかないパターンになるよ
>>855 RotationArc
最小弧クォータニオン
でググる
もしくは冗長だけど
ベクトル間の角度+球面線形補間
>>855 内積で得られたdをそのままD3DXQuaternionRotationAxis()に入れてるけど、
内積だけじゃ角度出ないんじゃないかな?
内積 = |A| * |B| * cosθ
なので、
cosθ = 内積 / (|A| * |B|)
となって、ここから角度(ラジアン単位)を求めるには
アークコサインで変換しなきゃならない。
dの計算方法は
float div = sqrt(v1.x * v1.x + v1.y * v1.y + v1.z * v1.z) * sqrt(v2.x * v2.x + v2.y * v2.y + v2.z * v2.z);
if (div != 0.0f) //ゼロ除算を避ける
{
d = acos((v1.x * v2.x + v1.y * v2.y + v1.z * v2.z) / div);
}
とかになると思う。
>>855 の例で言うなら単純に、
× D3DXQuaternionRotationAxis( &q, &(cross), d * D3DX_PI * -0.5f);
↓
○ D3DXQuaternionRotationAxis( &q, &(cross), acosf(d));
で終わり
質問です 次のどれかで描画するときは重複した無駄な頂点が発生しないため インデックスバッファを使わない方が効率的ですか? D3DPT_POINTLIST, D3DPT_LINESTRIP, D3DPT_TRIANGLESTRIP
864 :
デフォルトの名無しさん :2011/05/11(水) 03:30:54.04
>>863 同じところを通る頂点を使う事はあると思うけどねぇ〜
同じ頂点使わないならいらないんじゃね ぶっちゃけ水面とかグリッドなやつにしか使わないような
上のほうでコントロールとか一括描画とか言ってるのあるけど 同じテクスチャという制限とかもあるし 今の時代そんなことやらなくても速度出るし
>そんなことやらなくても速度出るし 追求をやめたらPGじゃない
今でも、オンボードやネットブック等をターゲットに入れるなら一括描画は効果あるよ まともなボード積んでること前提にするなら変わらなくなってきたけどね
>>866 ,868
このご時世にi845やGeForce7600やらのサポートが必要になるんだぜ……。
870 :
855 :2011/05/11(水) 12:47:29.92
>>862 解説付きありがとうございます
仰るとおりにしたら見事動きました
871 :
863 :2011/05/11(水) 17:12:25.88
2Dで四角い画像貼ってまわるのに D3DPT_TRIANGLELISTで個数ごとにポリゴン2つ、インデックス6つ drawIndexedPrimitive() D3DPT_TRIANGLESTRIPで見えないポリゴンで繋げて 個数ごとにポリゴン3つ、インデックスなし drawPrimitive() どっちがいいかなと思ったんですけど 過去すれだとD3DPT_TRIANGLELISTのほうが良いっぽいですね。
それだったらインデックスやね 見えないポリゴンとか重くなるわ
カメラのビュー行列から、Eye,Focus,UpやYaw,Pitch,Roll に分解できるのでしょうか? 目的はカメラのワールド変換行列から、カメラを制御することです。 ビュー行列にワールド変換行列の逆行列を設定すればいいとわかった のですが、カメラは上記のEyeなどパラメータを保持しており 通常の入力操作でそれらを更新することで制御しています。 ワールド変換行列をもとにビュー行列を直接書き換えたときに、 それらと整合するようにしたいです。
>>873 そんな面倒なことしなくてもカメラの位置、注視点を保存しとけば
いんじゃないの?
やりたいことがいまいち伝わってないから、そう思うのかもしれないけど
>>874 カメラは位置(Eye)や注視点(Focus)などを保存していて、
マウスの入力操作ではそれをいじってビュー行列をつくっているんですが、
それとは別にワールド行列からもカメラを制御できるようにしたいのです。
「ワールド行列からもカメラを制御」ってイマイチ意味が分からないんだが 俺が知識不足なだけ?
877 :
デフォルトの名無しさん :2011/05/11(水) 19:03:07.69
ググッてもわからないので質問させて下さい。 LG D2342P-PNのモニターを購入して3Dのゲームをしているのですが DirectX9のゲームをDirectX11でプレイできないのでしょうか? 今DirectX11を使っていて一応3Dでゲームは出来ますがDirectX9 にして下さい。と警告が出て途中で落ちます。 そしてDirectX9をインストールしよとしても インストールするとできません。ご教授よろしくお願いします。
879 :
デフォルトの名無しさん :2011/05/11(水) 19:18:29.69
>>878 お前みたいなバカに聞いてない死ねやカス!
880 :
デフォルトの名無しさん :2011/05/11(水) 19:19:27.53
>>876 カメラの位置と回転を、モデルを制御するのと同じように、
SRTのワールド変換行列で制御するってことなんですけど。
俺の言い方がまずいのでしょうか。
>>877 1ヶ月前に我慢できずに3Dモニタ買ったんだけど
それHDMI1.4a対応かよ
糞が
死ねばいいよ
つーかスレ違い
>>881 IDirect3DDevice9::SetTransform(D3DTS_VIEW, )
で行列突っ込めば行列で制御できるんじゃないの?
>>871 D3DPT_TRIANGLELISTでインデックス無しが一番いい。
>>877 ここはDirectX「プログラミング」のスレだからスレチな。
あんまり頭悪いと回りに迷惑かけるから気をつけろよw
>>883 ?? 何故IDirect3DDevice9が?
カメラクラスがあります。カメラクラスは注視点などパラメータをもち
マウス入力でパラメータを変更し毎フレームビュー行列をを生成します。
しかし、マウス入力でなくワールド変換行列で直接カメラの位置と回転を
制御したいときがあります。その後もマウス入力で継続して制御するには
ワールド変換行列から生成したビュー行列をパラメータに落とし込まなければ
なりません。どうすれば?
ってことなんですけど、全然通じないのは俺がおかしいのでしょうか?
887 :
デフォルトの名無しさん :2011/05/11(水) 20:39:26.75
う〜ん。どう説明すればいいのでしょうか。説明ベタは駄目ですね・・・。 本題は、ビュー行列をEye,Focus,Upに戻せないか?ということなので、 「そういうことはできない」「こういう方法ででえきる、あるいは行列の 成分のどこどこと対応している」というふうにお答え頂ければ幸いです。
888 :
876 :2011/05/11(水) 20:42:28.75
SetTransformは関係ないだろう やっとやりたいことがわかったわ でも位置と回転を覚えておいてそれを行列操作すればいんでね? ビュー行列は 移動と回転の情報は普通のワールド変換行列と同じだから 情報は取り出せると思うが。
ViewMatrixを作るためにFrom , At , Upが必要なわけだけど、それがあとで必要になるなら 作成したときに保存しておけばいいじゃない。
どうすればも何も、平行移動成分の逆がカメラ位置になって、 回転成分で(0, 0, 1.0)を逆方向に回転して得られる方向ベクトルを カメラ位置に加算して注視点とする。 上方向については(0, 1.0, 0)を回転させる、とかじゃいかんの?
>>887 D3DXMatrixLookAtLH(MATRIX *pOut, VECTOR3 *pEye, VECTOR3 *pAt, VECTOR3 *pUp)
やってること
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
行列の中身
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
>>890-891 ありがとうございます。解決できそうな感じです。
他の方々もありがとうございました。
D3DXMatrix関連は、MSDNとかで調べると中身教えまくりだし ある程度単純な処理はインラインなので.hや.inlで中身砲台
中身見るならXNAMathの方がいいよ。SSEだし。
895 :
初心者 :2011/05/12(木) 21:26:22.22
少し前に投稿したものです。 D3DXオブジェクトの解放ができなかった問題が半分解決したので ご報告にあがりました。 デバイスとコンテキストとスワップチェイン解放時に最後に解放しようとするものが どうしてもアクセス違反になる問題で、 原因はD3D11CreateDevice時のドライバータイプでした。 ビデオカードなしでもFeatureLevelが10_0でちゃんと返ってるし デバイス作成できてるから D3D_DRIVER_TYPE_HARDWAREでもいいんかなと思ってたら 無理だったようでした・・・。 ご協力してくださった方々ありがとうございました。 新しいパソコン買いますOTZ WIn7でOTZ
なんだよ!描画もやってないのに成功したと勘違いかよ!
897 :
初心者 :2011/05/12(木) 21:42:44.91
レンダービューのクリアで青に塗りつぶすのはできてましたが、 三角形の描画くらいしとけばよかったです;;
Direct3Dってバージョン間で共通のI/Fで呼び出せないんですか? バージョンが上がるたびにIDirect3DDevice9とかバージョンが付いた 型名使うのは辛すぎます
>>898 どのバージョンの処理が呼び出されて欲しいの?って話
てか、typedef するなりマクロ書いたり、自分の用件でオブジェクト化してたりしないの?
>>898 DXも歴史がかなりあって毎回使い勝手変わるから、それは無理だと思う。
せめてD3dBase的なものがあればよかったのかも知れんが、
そういうものがあったとしたら、仕様はそのBaseが策定された時期の仕様引きずってると思うよ。
>>899 OpenGLしか知らないからバージョン毎に型が変わっていくっていうのに驚いた
せめて初期化くらいは共通I/Fのファクトリとかになっていればいいのに
>>900 毎回変わるのか・・・MS-officeみたいだ・・・
あれは解説本出す業者と金で繋がってるとしか思えない
>>901 俺も普段OpenGL使って色々やったりするけど、
シェーダとかARBとかEXT関係の辺りはバージョンによって使える/その時代には無かったとかあるじゃん
それと一緒だって。 ・・・分量が違いすぎるだろって話はあるが
今日も拾ってきたソースをコンパイルしようとしたら自分のPCに インストールしてるSDKのバージョンと違ってて SDKバージョン変更対応する苦行が始まるお!
OpenGLは拡張多すぎて泣く DirectXのマイナーバージョン違いは 一応バージョンのdefineあるから #if で分岐してる
>>887 >本題は、ビュー行列をEye,Focus,Upに戻せないか?ということなので、
これは色々やってみた感じ
不可能である場合が多い気がする
ティーポットってどっちが正面(+Z軸)なんでしょうか? 視点から見て注ぎ口が右に見えたら後ろ?
ビューの設定にもよるし、そもそもZの定義がどうなっているか次第。 軸の設定なんて自分で勝手に決めるものなんだから、他人が知っているわけがない。
折角出た話題だからこだわりたいんだけど 行列から回転やスケール、位置への逆変換って不可能だよな? できるようなページがたまにあったりするけどおかしいよね? できてないもんね ちなみに俺は色々やってみた感じどうにも無理と結論づけた
行列で動かしたのを元に戻したいなら逆行列かければいい
>>909 そういう話してない
たまに逆変換しなきゃいけないような状況においこまれるときがある
ツールとかもそうだし
あとシステムの基盤が行列でしか状態を保持してないとかだと
別に回転、スケール、位置情報を保持しておかないといけなかったりする
別に元に戻したい云々の話してない
あくまでそのときに構成した行列の回転要素が知りたいとかそういうとき
わかりやすい例でいうと キャラを3回転させてる途中なのに担当者が超馬鹿で行列しか保持する機構ねーの 基盤作ったやつにおもいっきり馬鹿馬鹿アフォアフォアフォ能無しウンコウンコたくさん書いてメール送ってやったけど 今更、そんなもん挟めない云々いいわけするから強引に推定3回転とかわけのわからない判定作って強引にやったけどねw
キンモー
わかったわかった。 もうそれDirectX関係ないからとっとと消えろ、キモいからw
914 :
デフォルトの名無しさん :2011/05/13(金) 21:48:40.05
>>911 こういうことじゃなくて?
// m = translation * rotation * scale (D3DXではm = scale * rotation * translation)
template< typename value_type >
void decompose ( /*[in]*/const matrix< 4, 4, value_type >& m,
/*[out]*/matrix< 3, 3, value_type >& rotation,
/*[out]*/vector< 3, value_type >& scale,
/*[out]*/vector< 3, value_type >& translation)
{
translation = vector< 3, value_type >( m[0][3], m[1][3], m[2][3] );
rotation = matrix< 3, 3, value_type >(m);
scale = rotation.length();
for( uint_t i = 0; i < 3; ++i )
rotation[i] /= scale[i];
}
>>914 そうだけどそれ動かないでしょ?
だってどう考えても理にかなってねーもん
916 :
デフォルトの名無しさん :2011/05/13(金) 22:52:12.74
>>908 行列が4×4なら、元に戻らんやろね。
次元縮小の話が無い限り、そんなことはありゃんすめぇー。
カメラ行列って結構難しいことやってんだよね 方向ベクトルから回転求めたりして
>>917 大してやってない
以前のDirectXならヘルプに載ってたんだがな・・・
DrawIndexedPrimitive()がDrawIndexedPrimitiveUP()より良い場合って 頂点が多い場合といわれてるけどいまいちわからないですね。 UP系は描画の度に全ての頂点配列を値コピーするかわりにロックの負荷なし。 UP無しは石や樹木のように動かないオブジェクトはビデオメモリに残ってる データをそのまま描画して、歩いたりしたオブジェクトの頂点に関しては ロックした後そのオブジェクトの分だけ頂点を値コピーするから コピーコストは少ない。 だとすると、ずっと動かないオブジェクトはビデオメモリに残しておいて そのままUPなし()で描画する。一方で常に動いてるようなオブジェクトは UP()で描画するのが効率的な使い分けとして正しくなりますか?
>>919 効率を気にするならUPなんて一切使わない。
結局GPUは頂点バッファからしか描画できないから、UP系は頂点バッファの確保や
コピーをドライバに任せるだけ。
>>919 つーか動的に頂点を変化させる場合でも、普通ロックなんかしない。
VertexShaderとかあるでしょ。
質問です pDev->StretchRect(pBackBuffer, NULL, pSurface, NULL, D3DTEXF_NONE); バックバッファから、テクスチャのサ―フェースへとStreachRectをしようとしています この際、 ・バックバッファがアンチエイリアシングつき ・バックバッファとテクスチャの横縦幅が完全に一致 している時のみ、うまく転送されません。 StreachRectの返り値はS_OKなのですが、実際に画像は転送されていませんでした。 バックバッファのアンチエイリアシングを外したり、テクスチャのサイズを例えばバックバッファの横幅と一致、縦幅は1ドット小さくした場合などは転送されました MSDNを読んでも「拡大縮小が対応していない転送元と先の組み合わせもある」みたいなことは書かれているのですが、むしろ拡大縮小が無ければ対応が増えるような書き方です 解決の手段を知りたいのですが、何か情報いただければ幸いです
ビデオカード次第ではD3DTEXF_NONEだと描画されないよ
質問です。 SDKを導入したいのですが、ソフトウェアによくある「安定するバージョン」というのはあるのでしょうか。 環境はWindowsXP VC2008で、Windows2000以降で動作可能な2Dゲームを想定しています。 高度は機能はまず使わないと思うのですが、動作速度や環境の問題がありましたらご教授願います。
>>924 そもそもWin2000まで対応のDirectXというだけでかなり制限される。
例えばXP SP2以降で利用可能なXAudio2はWin2000では使用できない。
DirectXを使用するアプリケーションは必ず使用している
DirectXのバージョンの再頒布パッケージを添付することになっているが、
エロゲーメーカーを中心として、パッケージの添付自体を嫌がって
D3DXなどのバージョン依存性が高いライブラリを使用せずコアだけで実装する例もある。
質問の「安定するバージョン」だが、そんなものはない。
DirectXは動作を何も保証しないし、同じバージョンのDirectXでも
ハードウェアのドライバによって動き方が全然違うから。
>>925 ありがとうございます。
自分が想定しているのは、AVGで出来るならまず出来るだろう程度のものなので、
代替手段があるのであれば機能性よりも動作環境を優先したいです。
導入するにあたっては、闇雲に新しいバージョンを入れても大丈夫なのでしょうか。
DXライブラリのバージョン変わるだけで、使わなきゃどれでも同じ。
>>921 リアルタイムデフォームする時って、VertexShaderで計算させるのが常識なの?
常識とまではいかないけど、計算が速い。 でも、CPUでないと出来ない計算とか、CPUで十分間に合う計算とかもある。
>>929 そうなのか・・・
俺は普段モデラソフトみたいな物(処理的な意味でそういう物)とか、
リアルタイムのキャラクタアクションを扱うモジュール(ボーン・デフォームと、ボーンベクトルのslerpによるアクション)
とかを自分で書いて使ったりしてるが、どうも今ひとつ、「あともう若干速い手段無いだろうか」と思ってた
ちょっとVertexShader使ったその辺を調べて追いかけてみる。ありがとう
>>922-923 情報ありがとうございます。
ただ、他のD3DTEXFを全通り試してみましたが、やはり「まったく同じサイズへの転送」の場合描画されないようです
>>931 そもそもオレはStretchRectは使用しないな。
テクスチャに書き込むならテクスチャをレンダーターゲットに設定して文字通り書きこむ。
描画結果をファイルに書き出したいなら
テクスチャではなくサーフェイスを作ってレンダーターゲットに設定して描画して、それを保存する。
>>頂点シェーダ 正三角形だったら(0,0) , (0, 32) , (16, 16)に頂点おいたままにして そこから頂点シェーダに変数渡して動かすのか!思いつかなかった。 ID3DXEffect *pEffect; pEffect->SetFloat("x", screen_x / 2); pEffect->SetFloat("y", screen_y / 2);
それ早いのか〜? いまいち疑問な俺 頂点数分のデータ転送が行われてるんだからロックしたときと大して変わらんのと違うの〜? って思うけど使う関数によって時間変わったりもするから脳みそで考えるよりも実測あるのみなんだろうな
>>932 あれ?もしかしたら自分の勘違いかもしれませんが
テクスチャをターゲットにしてしまうと、アンチエイリアシング使えなくないですか?
当方、環境はDirectX9.0cです
アンチエイリアシングを利用して画面を描画して、
今度はそれをテクスチャとして使い、色々画面エフェクトをかけて
実際のディスプレイに表示
ということをやろうとしています
>>922 ストレッチ有りとなしの場合処理を分ける必要があるとして
マルチサンプルの場合も分ける必要がある。
原因は、コピー先かな。
ドキュメントに制限書かれていた気がする。
935です。やっている処理を書きます D3DXCreateTexture(pDev, w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTex); pTex->GetSurfaceLevel(0, &pSurface); pDev->GetRenderTarget(0, &pBackBuffer); pDev->StretchRect(pBackBuffer, NULL, pSurface, NULL, D3DTEXF_NONE); w,hはバックバッファのそれと同じです 返り値をチェックしましたが、どれもS_OKで失敗した様子はありません ですがきちんと転送がされません テクスチャを作り際、wでもhでも両方でも、1ドット以上違いがあればうまく転送されるようです 「拡大縮小がある時だけ失敗する」ならまだ分かるのですが、「拡大縮小が無い時だけ失敗する」のは何故なんでしょう・・・
コピー先と元の領域指定してみなよ。 それと、downsample のところの制限守っているか。
アドバイスありがとうございます
さっそく領域指定もやってみましたが、駄目なようです
ダウンサンプリング周りですが、ここの文章を読む限り
転送元と転送先のRenderTargetサイズさえ一緒ならOKなはずなのですが…
ttp://msdn.microsoft.com/en-us/library/bb174471%28VS.85%29.aspx ところでこのページの、まさにダウンサンプリングのところの
・Create a second rendertarget of the same size, that is not multisampled.
という文章。日本語訳ページだと that is not の not が訳し忘れられていて、意味が正反対になってますねw
日本語ページ見て違和感感じて「またいつものか・・・」って英語ページ見て正解でした
バックバッファとフォーマットが違うんじゃないかな。
941 :
デフォルトの名無しさん :2011/05/15(日) 01:28:25.11
>>940 やだなぁ、バックバッファフォーマットが違ってたら、そもそも「1ドットでも差があれば転送できる」ができるわけが無いじゃ・・・
ないじゃ・・・
ち、違ってた・・・
しかも揃えたらうまくいった
超ありがとうございました
拡大縮小が無い時はなんか超速転送するために、まったく違うアルゴリズム動かしてるとかなんでしょうかね…
で、そのアルゴリズムの時はフォーマットがまったく一緒でないと駄目とか…?
D3DXCreateTexture生成してるけど、生成されてるサイズは合ってる? D3DFMT_A8R8G8B8で生成してるけど、コピー元とフォーマット同じじゃないと駄目かも。 あと極一部の環境で、CreateTextureのLevelsが1の場合、コピーされないドライバのバグが発生することがある。 この場合1以外か0で回避できる。ドライバの最適化(チート)関係のバグだと思っている。 って既に解決したぽ?
>>944 ありがとうございます
バックバッファも当然D3DFMT_A8R8G8B8だと思ってたら
D3DFMT_X8R8G8B8
だったようです。
で、フォーマット不一致で駄目だったと。
・駄目だったのなら、ちゃんとStretchRectの返り値でエラー出してほしいよ…
・何故拡大縮小があれば不一致でもいけるのに、同じサイズだとむしろ駄目になるんだー!
ブラウザが標準でdirectxに対応してくれればな
Windowsにしか対応してないDirectXをブラウザに組み込むとか何の冗談だよw
948 :
デフォルトの名無しさん :2011/05/15(日) 04:13:34.58
>>947 しかも「ブラクラ=GPUクラッシュ」の可能性がある・・・
この世にはXboxというものがあってな
この世にはドリームキャストというものがあってな
Firefox4とかIE9とか、すでにDirect2Dや3Dに対応している時代に、 対応してくれればとか、何の冗談とか、いったい何を言っているんだろう?
一方WebGLはセキュリティリスク問題が提議されていた
>>947-950 をみると、
プログラムを組んでいる人間の知識が、PC初心者並みなんだよな。
あまりに酷い。
そんな浅い評論いらないです。 プラグラマはイコールで、パソコン詳しいお兄さんではありません。(一般の人にありがちな誤解)
まぁブラウザ云々はスレチだから他でやれって感じだけど、
>>953 みたいなのはなんで
初心者スレにいるの?自分の知識ひけらかして他人を見下したいだけなの?w
DirectX初心者!=PC初心者
不勉強を指摘されて開き直るやつって、成長しないから何年たっても初心者を名乗り続けるんだよな。
それは確かにそうだけど種類の違いもあるからな 大雑把に一括りで考えちゃダメよ
>>957 おまえみたいなのも何年たってもそうやって煽ることしかできなさそうだよな
素人=初心者 ?
始めてから日が浅い者を初心者と言うが、いつまでも初心者を名乗り続けているのはただの馬鹿。
15年前に若葉マークは卒業したけど運転することほとんどないまま ペーパードライバなんですけど、3回目のゴールド免許更新なんです。
>若葉マークは卒業したけど運転することほとんどないまま まさにこれが鍵。良い事を言う
素人ですか?いいえ、ペーパーグラマーです。
プログラム技術板でそういう人生論的なものを語り出す方が 余程マヌケ
質問です。 マウスオーバーやクリックの検知を、座標による判定ではなく、テクスチャ毎に設定することは可能なのでしょうか トランプの様な、対象が何度も移動する類のものに対応したいのですが…
>>967 なんて言っていいか迷うが、それ、そういう用件で
自分で実装する固有処理なんだがそもそも
>マウスオーバーやクリックの検知
↑これが何をしているかわかってるよな?
もしかして DXUT で、何かパラメタ設定したら、そんな事が出来ると思ってるんじゃね
>>967 そもそもDirectInputを使おうがWinAPIで済ませようが、
マウスカーソルがどのウィンドウの上にいるか、
どの座標に居るかしか教えてくれないんだぞ。
どのメッシュ上にあるかは自分で計算するんだ。
自動で計算するプログラムを自分で作れば、自動で計算してくれるよ。
JavaのPanelとかEventListenerとか そういうフレームワークは自作するしかない。 俺も作ってるがやりだしたらきりがなくて ゲームがつくれない(・3・)
VertexShaderで変換をかけた結果を保持することって出来ないのでしょうか? 例えば、スキンメッシュモデルの頂点を変形済みにして、ハンコのように何度も描画するとかです もっと具体的に言えば、スキンメッシュモデルを ・Depth値書きだし用 ・法線書き出し用 ・DepthShadow用の遮蔽フラグ吐き出し用 といった感じで、同じポーズで何度も描きたい時に、頂点変換を毎回かけるのは勿体ない気がします。 もちろんそのためのマルチレンダリングがあるのですが、古いグラボだと対応していないとかもあるので…
DirectXViewerで見ると、.xファイルが真っ黒に表示されて、テクスチャとかアルファ値が適用されません テクスチは.bmpで.xと同じファイルに入っています ファイルのパスはD:\CG\commonです。 Metasequoia(フリー)で作って.x形式で保存しています。
DirectXViewerは糞だから ちょっと古めのSDKに入ってるmeshviewでみれ
あれ、早く直してくんないかな? なんでバグってんの?
質問です。 テクスチャをレンダリングターゲットに指定し、PixelShaderで出力色のa成分に値を入れて出力しているのですが、 いざそのテクスチャを使ってみるとa成分が常に255になってしまっています。 D3DRS_ALPHABLENDENABLEをFALSEにするなどしてみたのですが、うまくいきませんでした a値をそのままテクスチャに出力するにはどうしたらよいのでしょうか? D3DRS_ALPHABLENDENABLEをTRUEにして、 SrcBlend = ONE; DestBkend = ZERO; としてみても駄目でした rgb成分は他用途で使っているため、余っているa成分に情報を吐きたいのですが・・・ (rgbには画面深度を入れ、a成分には太陽光があたっているかのフラグを入れたい)
テクスチャのフォーマットがX8R8G8B8 になってるとか
テクスチャのラッパークラス作るとき Texture,Cube,Volumeクラスそれぞれサブクラスにする? テクスチャインターフェースみたいな基底クラス作ってもあまり役に立たない。。。
そりゃ使用用途が異なるんだから、サブクラス化しても仕方ないだろう どんなラッパーにしたのか知らないが、 CComPtr<IDirect3DTextureX> で十分じゃないのか?
それラッパじゃなくてスマポでは と、言おうと思ったが、用はラッパにしようが無いからスマポでおk って話か
>>982 そういうこと
強いて挙げれば、俺はRENDER_TARGETなテクスチャは自動でリストに登録されるようにしておいて、
ロスト時とリセット時に解放と再確保を自動でやるようにさせてるけど
DirectX勉強しながら作った俺システムでもそうなってるな。 ちょっとほっとした。
テクスチャとか頂点バッファってPresent()したら 即解放して良いことになってる? なにかフラグとか確かめなくてよい? Texture* pTexture = ...; pDevice->Begin() pDevice->End(); pDevice->Present(...); pTexture->Release();
じゃあそれ以外のタイミングでいつ解放しろと
>>985 Presentどころか、Endの段階で消してOK
988 :
985 :2011/05/19(木) 10:42:36.99
頂点バッファをGPUがまだ使っているか非同期で調べるAPIがあるから 怪しい段階でRelease()していいのかなと思ったけど そのへんはRelease()内で隠蔽されてるのかな。
不用意に開放されない為に参照カウントがあるのさ
文字列ってたぶんビルボードに書き込む人が多いと思いますが 表示サイズが小さい(16pxくらい)と形が崩れませんか?
>>990 大きめに作っておいて、表示の時縮小するよー
自作クラスでは、テクスチャに用意する文字の大きさを指定する機能つけてある
>>991 ID3DXFontを横で描画させると劣ってるのがはっきりわかるんですよ
ビットマップはこれで取得してます
GetGlyphOutline(hdc, code, GGO_GRAY8_BITMAP, &GM, 0, NULL, &Mat);
>>990 (1)ポリゴンのXとYそれぞれの座標に-0.5fのオフセットが加わってない
(2)GetGlyphOutline()から作るテクスチャを大きくし過ぎてかつミップマップを作ってない
(3)テクスチャフィルタの設定がなしとかになってる
とかだと思う。
ミップマップで多少改善しました。 でもあんまり綺麗なフォントじゃないね。 自作テキストフィールド作りたいけど難しい
そいえばDirectX用のフォントに特化したライブラリって見かけない 誰か作ってくれないかな
glfontなライブラリなら腐るほど見かけるがなwww
単体でライブラリ化するほどか? クロプラ開発の必要もないし。 DirectWriteもあるし。
DirectWriteは少なくともXPのサポート終わるまでは使えないだろう
乙
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。