【C++】 DirectX初心者質問スレ Part25 【C】at TECH
【C++】 DirectX初心者質問スレ Part25 【C】 - 暇つぶし2ch780:デフォルトの名無しさん
09/10/17 16:55:03
DirectInputを使って、XBoxコントローラの左右トリガーの値を独立して取得するにはどうすればいいですか?
XInputだと別々の値としてあるんですが、現状DirectInputだと一軸の+-としてしか取れなくて、
左右トリガーを同時に使うと相殺して0とかの値になってしまいます。

781:デフォルトの名無しさん
09/10/17 17:00:07
>>780
それはMSの嫌がらせ的仕様。
XBoxコントローラーのドライバをサードパーティー製に入れ替えれば取れないことも無い。

782:デフォルトの名無しさん
09/10/17 17:05:07
わりと有名なクソ仕様だよな。

783:781
09/10/17 17:14:45
結局配布する場合は、ドライバをインストールさせるわけにもいかないし、
XBoxコントローラを検出したら、XInput使えってことになるんですかね。

784:780
09/10/17 17:15:42
すみません。間違えました。783は781ではなく780です。

785:デフォルトの名無しさん
09/10/17 17:24:29
XInputはなぜかボタン数が10固定の制限があったりと
いろいろXBox360型のコントローラー以外認めないですよ仕様があって鬱陶しいな。

786:デフォルトの名無しさん
09/10/17 18:49:23
頂点バッファだけでD3DPOOL_DEFAULTで
インデックスバッファをD3DPOOL_MANAGED
あるいはその逆とか
複数ストリームに頂点バッファをモデルとインスタンスとに分けて
描画したりする時もモデルだけMANNGEDでインスタンスを
D3DUSAGE_DYNAMIC | D3DUSAGE_WRI-TEONLYのD3DPOOL_DEFAULT
にするのはありですか?


787:デフォルトの名無しさん
09/10/17 18:50:44
どちらの書き方がより一般的でしょうか?

//ソース1
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_MIXED_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_HARDWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
) return false;

//ソース2
if (FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
){
  return false;
}

788:デフォルトの名無しさん
09/10/17 18:55:37
DirectXと関係ないです

789:デフォルトの名無しさん
09/10/17 18:59:21
>>787
少なくとも後者はどのモードで起動しているのか分からない。
デバッグを容易にするためにも前者のほうがいい。
ただ、前者もここまで行数が増えるならカッコでくくらないと視認性に欠ける。



790:デフォルトの名無しさん
09/10/17 19:00:08
見苦しいからフラグを配列にブチ込んでfor文で回せば?
4時間前からDirectXの勉強始めた人間なんでテキトー発言だけど。

791:デフォルトの名無しさん
09/10/17 19:01:27
>>787
別にC言語としちゃあ間違ってないが、オレならそもそもそういったダダ書きは嫌だな。
引数を変えたい部分だけを残して残りを固定化したラッパー関数をまず用意する。
で、順にチェックしていって失敗したらエラー処理してreturnするように書く。

void InitD3dDevice() {
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 //全部失敗したのでエラー終了
}

792:デフォルトの名無しさん
09/10/17 19:30:49
DX11で作ろうぜ。どうせ趣味でやるなら楽なほうがいい。

793:デフォルトの名無しさん
09/10/17 19:34:45
俺ならまず処理内容と評価優先度を表すenumを作ったりする。
enum D3DDeviceConfig {
D3DDEVCNF_HAL_MIXED = 0,
D3DDEVCNF_HAL_HARDWARE,
D3DDEVCNF_HAL_SOFTWARE,
D3DDEVCNF_REF,
D3DDEVCNF_MAX, // ループカウント
};


794:786
09/10/17 19:41:12
現実逃避するな

795:デフォルトの名無しさん
09/10/17 20:39:09
で、結局DirectX11はいつ出るの?

796:デフォルトの名無しさん
09/10/17 20:48:31
>>795
もうとっくにDirectX SDKに入ってるよ。
ただベータ版と違って正式版はどうもVistaでは動かない模様。
ちゃんと確認はしてないけど。
少なくともSlimDX経由では動かなかった。

797:デフォルトの名無しさん
09/10/17 21:37:45
>>789
>>790
>>791
参考になります。
こういった記述の多い条件分岐だと、書く人によって結構変わるんですね。

ひとつわからないことがあるのですが、>>789のモードとはなんでしょうか?
視認性の事ばかり考えていて、デバッグに関しては考えていなかったのですが
「モード」というものがわかると前者の方がデバッグしやすくなるんですか?

798:デフォルトの名無しさん
09/10/17 22:06:33
間にDXTRACE_ERRとか挟んだことないの?
失敗したときに何故失敗したのか分からないと
困ると思うんだけど

799:デフォルトの名無しさん
09/10/17 22:54:57
モードはHALなのかなんなのか、つまりどの呼び出しが成功したかってことだろ

800:デフォルトの名無しさん
09/10/18 01:11:28
>>796
さぁ早くDirectX11の解説サイトを開くんだ。

801:デフォルトの名無しさん
09/10/18 01:13:46
Dx10の話題ってあんまり聞かないけど
おめーら使ってる?

802:デフォルトの名無しさん
09/10/18 01:25:08
DirectX11が出たから10は既に空気。
DirectX11で9以降に対応しているハードは動く。

803:デフォルトの名無しさん
09/10/18 02:16:45
俺はXPなんで10なんて使ったことあらへん。
つーかこのまま永遠にD3D9でいーよもう。
んで、ららびーが出たら完全ソフトレンダ化でD3D廃棄、
3D初心者総挫折っと。

804:デフォルトの名無しさん
09/10/18 02:31:18
むしろ、パイプラインがどんどん増えていってHLSLやらCompute Shaderやらで複雑化する一方の
今のDirectXの方が初心者総挫折だと思うけどな。
ソフトレンダ化でD3D廃棄なら、当然MSが代替SDKを出すだろうし。

805:デフォルトの名無しさん
09/10/18 02:51:23
というか、HLSLはきれいにまとまったchmヘルプやらはないのか!

806:デフォルトの名無しさん
09/10/18 03:12:17
DirectX3くらいのころ、Direct3DIMもRMも駄目だと息巻いて
ソフトウェア3Dレンダー作ってた奴って世界で一人くらい生き残ってないの

807:デフォルトの名無しさん
09/10/18 10:11:51
>>804
パイプラインは複雑化したけど、頂点シェーダーとピクセルシェーダーだけで描画は出来るから
別にアレもこれもやろうとしなければAPI自体はいたってシンプルになってるとおもうぞ。

>>805
August2009にグラフィックだけに特化したchm入ってたぜ。

>>806
ある程度の年代以上ならいくらでもいるだろうけど、今はみんなD3Dでシェーダー書いてるんじゃないかね。
若い奴らの方がそういうのまったく出来ないんじゃね。


808:デフォルトの名無しさん
09/10/18 10:47:44
つーか、ComputeShaderなんて必要?
GPUの仮想化が出来てるなら、
今までみたいに、何でもかんでもDX通さなきゃ駄目って
訳じゃなくなったんだろ。



809:デフォルトの名無しさん
09/10/18 10:50:19
まだビデオカードの性能に太刀打ちできる時代ならやろうとも思うが、
今となっては竹槍でB29と戦うようなものだからな。

810:デフォルトの名無しさん
09/10/18 11:56:54
ゲームの物理演算や乱立するGPGPU規格のまとめ役として必要だろ。
Win32APIにインターフェイスを用意したらDirectXとのデータの遣り取りが冗長になる。
GPGPUはCUDAやらBrookやら各社俺が俺が状態で一向に纏まらないし、
おかげでGPU物理演算が普及しないし。
Compute Shaderがあれば、BulletのGPUメーカーに依存しないGPUアクセラレーションの可能性が見えてくる。

811:デフォルトの名無しさん
09/10/18 12:31:10
あと5年ぐらいすれば淘汰されてどれ学べばいいかはっきりするんじゃね
それまではCUDAとCompute ShaderとOpenCLを平行してやるしかないだろ。
まぁBrook+は要らんとしても。

812:デフォルトの名無しさん
09/10/18 17:25:52
XFILEからのアニメーションデータの読み込みが時間がかかるんで
既に読み込んであるアニメーションデータをバイナリデータでテキストに
吐き出しておいて、実行時に読み出そうと思ってるのですが、そういうのって
可能でしょうか?

割りとこういう質問すると「独自形式やれよカス」とレスがつけられるんですが
俺の力じゃ無理だ。

813:デフォルトの名無しさん
09/10/18 17:37:46
可能だろうけどあんまり変わらないのでは?
モーションが一種類で同じ動きをするオブジェクトが複数あるって事?

814:デフォルトの名無しさん
09/10/18 17:44:58
それならバイナリデータのまま出力してそれを読み込まないと速度かわらなくね?

815:812
09/10/18 18:05:13
>>814
ああ、そっかXFILEってバイナリデータ書き出しがサポートされてましたね。
訳の分からない質問してごめんなさい。

XFILEのテキストモードでの書き出し見る限り階層構造とかロード時に内部で
動的にくみ上げてるものだと思いましたが、バイナリモードのXFILEでやりとりすれば
自分が質問したことは普通にやってくれちゃってるのかも。
(つまりDirectXで扱いやすいように展開された状態でバイナリデータ書き出しされていると)

という事はXFILEの書き出しや読み込み時にバイナリさえ指定してしまえばこれ以上早くアニメーションをロードするのは難しいって事ですかね。
うーん。

816:デフォルトの名無しさん
09/10/18 18:24:55
アニメーションデータは、全部必要なのかな?
補間される事、表示同期のコマ数と同じか?
最適化される部分が色々あると思う。

817:デフォルトの名無しさん
09/10/18 18:29:17
バイナリデータでテキストに吐き出しってなんじゃそりゃ

818:デフォルトの名無しさん
09/10/18 20:05:02
間違っても行列でサンプリングされたモーションデータなんて使うなよ。
モーションブレンドが阻害される上に、無駄にでかくなるだけだから。

819:デフォルトの名無しさん
09/10/18 20:42:50
>間違っても行列でサンプリングされたモーションデータなんて使うなよ。
>モーションブレンドが阻害される上に、無駄にでかくなるだけだから。

これってどういうこと?
大抵LightWaveから書き出してるけど、その際はファイルサイズを抑えるために行列(Matrix)で書き出してる。

行列データだから拡大や移動なんかの普段使われないデータも入ってるから
無駄って事でFAなんだろうか?

820:デフォルトの名無しさん
09/10/18 21:07:39
要素をキーフレームではき出せば、サンプリングしなくても途中は補完出来るだろ。

821:デフォルトの名無しさん
09/10/18 21:44:12
影の描画ってどうすんの?
光源からオブジェクトを貫通した光が次に命中する部分を
黒くするようにすれば良いんだろうけど
どうすればいいんだろ?

822:デフォルトの名無しさん
09/10/18 22:05:00
┌―――――┐  ┌―┐
|DirectX 影      |  |検索|
└―――――┘  └―┘

823:デフォルトの名無しさん
09/10/18 22:05:12
お前のケツを貫通させてくれたら
教えてやってもいい

824:デフォルトの名無しさん
09/10/18 22:06:48
オブジェクトのZ位置をステンシルバッファに書き込んで、
影が必要なオブジェクトをライトの方向に拡大してステンシルバッファにみに書き込み、
交差した位置のバッファを対象に、その位置を暗く塗りつぶす。

825:デフォルトの名無しさん
09/10/18 22:08:21
ただしオブジェクトは隙間がでないように、接合部分にポリゴンを追加しておく。

826:デフォルトの名無しさん
09/10/18 22:12:38
今時ステンシルは無いわ

827:デフォルトの名無しさん
09/10/18 22:13:34
>>824-825
半端な説明なら無い方がいいです

828:デフォルトの名無しさん
09/10/18 22:14:17
とりあえず氏ね

829:デフォルトの名無しさん
09/10/18 22:16:25
>>827
だれだよ
スプライト厨だろおめー

830:デフォルトの名無しさん
09/10/18 22:16:45


スレリンク(blog板:1-100番)

831:デフォルトの名無しさん
09/10/18 22:19:52
>>827
Teapotのサイト見ればいい

832:デフォルトの名無しさん
09/10/18 22:27:09
コードを貼ってもらえなきゃ実装できませんてか

833:デフォルトの名無しさん
09/10/18 22:31:04
これってあれだろ
「分からないなら書き込まないでください」
とかいって情報を引き出そうとする下等テックニック

ぐぐれカスと答えればおk

834:デフォルトの名無しさん
09/10/18 22:35:06
初心者スレ全否定ww

835:デフォルトの名無しさん
09/10/18 22:42:23
自分が何を分かってないかすら解ってない人間にものを教えるのは不可能
こういうアプローチで試して見ましたがうまくいきませんでした、なぜですか?
という質問ならいつでも歓迎

836:デフォルトの名無しさん
09/10/18 22:46:52
テクスチャ描画用の板ポリ複数枚を一つの頂点バッファとインデックスバッファでまとめて
DrawIndexedPrimitiveというのは普通だと思うのですが
その際、任意の板ポリを描画しないだとかのオンオフはどのようにしていますか?
私は動的なバッファの場合、ポジションを画面外にするか0にするかとかしか思いつかんです。
静的なバッファならどうにもならないような・・・。

837:デフォルトの名無しさん
09/10/18 22:54:07
まだ初心者の頃はオブジェクトと光源位置からベクトルだして
その方向にぶっつぶして黒くすることでやってたわ
ただ角度のある物体には出来なくて悩んだなあ

ところで二つのオブジェクトが近いとポリゴンが縞々に
なるって見えるんだがこれはなにが原因なの?
一応配置を何とかしてるけど出来るなら解決したい
どうすべきか?

838:デフォルトの名無しさん
09/10/18 22:58:49
>ところで二つのオブジェクトが近いとポリゴンが縞々に

誤差範囲内に入っているとしかたない。近くないようにデータを工夫する

839:デフォルトの名無しさん
09/10/18 23:00:09
>>835
物を教えるのは不可能と偉そうに言う前に
>>824に突っ込んでやれよ
Z位置をステンシルに書き込むって
シャドウマップとステンシルシャドウをごっちゃにしてるんですか?ってよ
お前ら本当につかえないカスだな

840:デフォルトの名無しさん
09/10/18 23:10:03
ググって勉強してきたのかえらいぞ

841:837
09/10/18 23:10:18
>>838
あーやっぱ無理か
調整で何とかすることにするわ

842:デフォルトの名無しさん
09/10/18 23:17:40
>>837
Zファイティング (Z-fighting) という現象
Zバッファの精度不足でZ値が丸められてしまい、
場所によって実際より手前になったり (Z値が切捨てられたり) 奥になったり (Z値が切上げられたり) して縞々になる
なるべく近クリップ面を遠くにして遠クリップ面を近くにすると、1個のZ値が担当する範囲が狭くなって精度が上がるので、
少しマシになるかもしれない (ならないかもしれない)

843:デフォルトの名無しさん
09/10/18 23:39:15
↓影ならGPGPUでレイトレやれと初心者に言う高飛車な回答者


844:デフォルトの名無しさん
09/10/18 23:46:56

null

845:デフォルトの名無しさん
09/10/18 23:49:12
ブラックライトでええねん

846:デフォルトの名無しさん
09/10/18 23:57:29
テクスチャに投影してプロジェクションシャドウとかでいんじゃねぇの

847:デフォルトの名無しさん
09/10/19 00:05:51
>>836
基本的に、ON/OFFは毎フレームIndexBufferを書き直すことで表現する。
そのためのIndexBufferだ。
また、描画順を入れ替えても問題ない場合なら、切り替えたいメッシュを前側なり後ろ側なり集めて
DrawIndexedPrimitiveの描画Primitive数を変更するという方法でもいい。

848:デフォルトの名無しさん
09/10/19 00:09:43
初心者だったら
シャドウマップかシャドウボリュームでぐぐって
自分で使いやすいほうを使えばいいと思うよ
どっちも一長一短だからどっちが良いとはいえないし

849:デフォルトの名無しさん
09/10/19 03:13:54
>>847
ありがとうございます。良く分かりました。

850:デフォルトの名無しさん
09/10/19 09:25:18
普通にシャドウマップしか選択肢ないだろ
他の方法はソフトシャドウが出来なかったりしてだめすぎる
シャドウマップなら指数シャドウマップとかバリアンスシャドウマップとか
あとPCFもあるし

ていうか最近のゲームでシャドウマップ以外はほとんど使われてないだろ

851:デフォルトの名無しさん
09/10/20 01:36:26
いまはGPUパワーでごり押しできるからシャドウマップが主流ではあるけど
DirectX11が主流になればシャドウボリュームが盛り変えすかも知れない
テッセレータとジオメトリシェーダで影の負荷を大分減らせそうな気がしてるんだが


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch