【C++】 DirectX初心者質問スレ Part41 【C】
■ このスレッドは過去ログ倉庫に格納されています
回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前
【C++】 DirectX初心者質問スレ Part40 【C】(c)2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1474782237/
>>2リンク おま環
前半のような勘違いをしてる知能だと後半でも勘違いしてる可能性大 >>357
音が出たならそれでいいかと。
チャンクのゴミはコーデックのハイパスフィルターで除去される。
ストリームにヘッダー情報が来るようなAPIはないと思う。
サンプルがファイル処理をやってんだと思う。 DirectX11でレンダーターゲット(画面全体)にシェーダを適用する方法を教えていただけませんでしょうか
板ポリゴンにシェーダを適用する方法は分かるのですが…
画面全体にピクセルシェーダを使って「GLSL Sandbox」のようなことがしたいです
ググったのですが、そういうサイトを見つけられませんでした >>360
・シェーダで一切行列を使わない
・射影座標(-1〜+1)の範囲で頂点座標を指定して頂点配列を作る
要点はこの二つ
細かい点は
・ビューポートはウィンドウサイズに合わせる
・描画ターゲットはスワップチェインから取り出す
・深度ステンシルは取り敢えず忘れる
・固定機能ステートはすべてデフォルト値でつくり、コンテキストに設定する
・シェーダーは、とりあえずバーテックスとピクセルのみ(中身はパススルー。入力頂点要素複写だけにする)
あとD3D11デバイスだったかコンテキストとスワップチェインを同時につくるAPIがあるから、ネットサンプルを参考にせず、そっちを使う。 描画するまでに最低限やることリスト
・デバイス、コンテキスト、スワップチェインを作る
・スワップチェインから描画ターゲットを作る
・コンテキストに固定機能ステート(ラスタライズ、ブレンド)を設定
・コンテキストにシェーダー(バーテックスとピクセル)を設定
描画ループ(最適化なし))
・コンテキストに入力頂点配列レイアウトをつける
・コンテキストに入力プリミティブを指定する
・入力する頂点配列に適したdrawを呼ぶ
・スワップチェインにフロントとバックバッファを切り替えるようにつたえる(present)
必須なのは、このあたり。
やっちゃダメなこと
・神に祈るな >>361
ありがとうございます!
おっしゃるとおりVertexBufferで-1.0〜1.0の範囲の4頂点を作って、VertexShaderで行列を使わずにそのままinput→outputするだけでいけました
数時間悩んでたのですがスッキリしました
基礎が全然分かってないことに気づきました
ありがとうございました >>363
おめめ!
そこがわかれば、射影行列、ビュー行列、ワールド行列と芋づる式に理解できる。
射影行列は、行列で指定した範囲の8つの角をそのデバイス座標空間に納めるように座標変換する計算を指す。
その-1から+1の範囲の外におかれた頂点はラスタライズされなくなる。(ピクセルシェーダーに送られない) (チラ裏)
VulkanとDirect3D12の両方でオフラインサーフェースへのレンダリングとレイヤ合成しての描画は実装できるようなったけど、
UnityやUnrealで使われているスクリプトやデータ構造を使ったレンダリングパスの可変実装ってのは、
必須なんだな、ってシミジミと感じる。
・平面に描画するパス(1:n)
・立体を描画するパス(1:n)
・立体に影を付けるシャドウマップ用の計算目的のパス(1:n)
・字形をプロセッサで描画したテクスチャをGPUに流し込むパス(1:n)
・ウィンドウ(をウィジェット単位に)描画するパス(n:n)
・上記を合成してスワップチェインに描画するパス(n:n)
今まで描画パスは全部個別にC++で書いていたが、
動的に「描画ターゲット」「シェーダ」「ブレンディングに代表される固定機能ステート」をスクリプトや外部データ参照で実装できるようにしないと
映像的な演出を工夫する際のコード実装でコード量が爆発しそう。
ウィンドウ処理は、描画ターゲットを複数枚要求し、立体の描画は描画ターゲットが一枚でもいいが、複数のジオメトリとポリゴン集合別のブレンディングパラメータを欲する。
やっぱりUnityは、よく出来ている。 XAudioでモノラル音声のパン制御について質問です。
以下のページを参考にしているのですが、
https://docs.microsoft.com/en-us/windows/win32/xaudio2/how-to--pan-a-sound
IXAudio2MasteringVoice::GetChannelMask 関数が
無いようなのですが、どうすればいいでしょうか?
SDKはWindowsXPでも動かしたいので
DirecctX SDK(June 2010) を使用しています。 >>369
そのSDKのXAudio2(2.7)ではサポートしてない機能だから無理じゃないかな
IXAudio2MasteringVoice::GetChannelMask
Platform Requirements
Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8) このバージョンではサポートしてない機能でしたか
代わりの手段があれば知りたかったのですが
ありがとうございます >>371
どうしてもやりたければ自力でパンを考慮したステレオデータに変換からXAudio2に渡す
完全な興味本位だけど、XPは何に使ってるの? イメージとしては、モノラルからステレオへの変換は、モノラルデータの開始位置に差をつけて、右チャネルデータとして扱い、後ろに詰め物を入れる。
パンは出力したい左右の比率に合わせてPCMデータに比率を掛ける。
これで行けそうな気はする。
チャネルを分離する部分なんかはキチンと実測して試行錯誤しないと、ステレオじゃなくエコーに聴こえるか、モノラルのままに聴こえそう。 ありがとうございます
どのチャネルが左右のスピーカーのどちらなのかを知る手段がないと厳しそうに思えました WindowsXPは古いゲームをプレイするのに使っています 第三科学研究所のDPPケーブルがUSBよりも入力遅延が小さいのと
マルチタップが使えるので気に入ってます 「DirectX9必携」という本が良いと聞き
DL版をカートに入れてPayPalで支払いしたんですが
お店からなんの音沙汰もありません
手続き間違えたんでしょうか?
ノースブレインコンピュータのペイパル店です それ結構アレな筆者がひとりでやってる会社だから
音沙汰ないならペイパル通さないと埒が明かないかもしれない dx9は、環境を整えるのが苦労するような。
プログマブルシェーダーはよいもの。
固定機能シェーダーは難解。 >dx9は、環境を整えるのが苦労する
昔はともかく今は全然苦労しない
っていうか最近のVS(VC)入れたら勝手に入る 固定使わなければいいだけね
初学者には難易度逆な気もするが 初学ならウニかアンリ。
レンダリングパスをプログマブルにスクリプトに出来るのは、かなりいい。
最近、自作プログラムでディスクリプタとコマンドリストを工夫したが、12とバルカンはかなり面白い。
ディスクリプタが最適化の要とかかれたウェブページを見かけるが、コマンドリストもかなりいい。
専門用語チックな単語を使うけど、モデルデータ単位でコマンドリストを作ることが出来るのは11の特殊な実装と12とバルカンだけだと思う。
「コマンドリストへの命令詰め込みを描画パスの外側に追いやることができる」
簡単な実装で試してみたが、目に見える効果があった。 ちなみにこのアイデアは、バルカンチュートリアルの受け売り。
あれのサンプルがしれっと実装していた。 (どうせ使わん知見)
ディスクリプタとは?
→ テクスチャと定数バッファに対する入力アセンブラに位置付くメカニズム
入力アセンブ ちらうら。VRMというものがある。
ファイルフォーマットは、glTFを拡張したもので比較的に統一されたボーンデータを含めて人形モデルを扱える。
おおこれは!と思って調べてみた。
メッシュデータを覗いて無かったことにした。
データ交換にはよいけど、これをランタイムでロードする気にはならない。
終わり。興味がありそうな規格なので書いてみた。 VRMというよりglTFのデータ構造がランタイムで使うには不適切てのは、
GPUに流し込む頂点配列は、予め流し込んで扱いやすく整理しておかないと、ロード時に頂点構造をいちいちフェッチ、整理(積み替え)が必要になるということ。
GPUメモリをマップしたアドレスにストレージからダイレクトに流し込むことが最効率となる。
つまりそういうこと。
こんぐらいは説明なしで理解出来ているのが殆どだろう。 >>396
反射鏡面に歪みがないなら、当然焦点はないだろ。 描画パイプラインが新しくなるんだね。
増幅シェーダとメッシュシェーダに変化する。
増幅がIAからテッセレータあたりまでをカバーし、メッシュシェーダが評価シェーダからジオメトリシェーダをカバー。
そのあとはラスタライザに繋がり、ピクセル補完なんかに続く。
増幅シェーダに与える頂点バッファ索引バッファを複数一気に与えることが可能っぽいから、
ほとんど計算シェーダになって、シェーダが意識して頂点を参照するような気がする AIがプログラム描くようになって
中で何やってるか人間に判らないレベルになると
みんな気がするしか言えなくなる気がする >>403
まあ、答えを書く義務なんてないからね。
キチンと読まんと頭の中身がおばちゃんになっちゃうよ。 ぶっちゃけ俺もVulkan移行中だけどこっちも驚くほど盛り上がってない
低レベルAPI叩く時代が終わっている気がする UnityでグラフィックAPI選べるからねぇ
DirectX、Metal、OpenGL、Vulkan そのユニティバルカンは、たぶんスマホ向けだろうから、機能制限が多そうな予感がする。
いずれスマホ向けユニティと、コンソール向けユニティ、PC向けユニティに三分割されるか、
フレームワークが双互換性になしになる気がした。 DX12触ろうかと思うんだが
VisualStudioのバージョンて何がいいとかある?
サンプル見ると2015ばっかりなんだけど何使っても変わらん? 変わらん
普通に2019でもバシバシ開いてビルドできてる
DXRのサンプルとか2019オンリーだったりするし
特に理由がなければ新しいの使った方がええんでないの c++ってクソだよな
いつの間にかdxtlビルド通らなくなってるし DirectXTKやったわ
メンゴォォメンゴォォメンゴォォッッ!! 所詮9は固定機能とプログラマブルシェーダが入り混じった半端者
DirectXの面汚しよ… >>422
機能の増改築が重なってツギハギだらけだったよね DirectXは9で終わったよ。今はゲームエンジンでポチっとな。 ボクが一番、DirectX11をうまく使えるんだ!!! DirectXの本ってモノクロのイメージあるわ。
偏見かな? Windows7サポート終了でやっとこさDirectX11.1/11.2が使えるようになって嬉しい
XPのせいで息絶えたDirectX10の悲劇を忘れてはならない
>>422
DirectX9の初期の汚点NV3x GeforceFXとかいうゴミ
ハード的にPS1.3相当のパイプが半数を占めるので固定機能+DirectX9それもFloatが遅いのでHalfを多用しないと使い物にならない
内部的には演算 テクスチャ命令X2 の組み合わせでないとテクスチャユニットが片方使えないとか並列性にも難があったのでボロボロだった
あと頂点シェーダーがCPU任せでパフォーマンスが劣悪なIntel GMA系列も
底辺のAtomとCore2Duoで頂点処理とメモリ帯域のの比重が違うからロースペックほどパフォーマンスが非力で過酷なGPUだった
どちらもMRT4も浮動小数点テクスチャ使えないから骨抜きにされSM2.0はゴミ同然だった
まあDirectx11.1でHalf精度は再サポートを果したが
Intel Broadwell(Gen8)
AMD RavenRidge(Vega)
Nvidia Turing以降なのでやっと足並みは揃った所
※NV30ことGeforceFXはx86なら8.1で動く…ので試したい人はどうぞ尚FeatureLevel9_1だと固定機能無しなのでHalf型で足搔こうが鈍足だろうけどね…
https://m.youtube.com/watch?v=T1GfenBaQxM Direct3Dの話というより射影行列作る時の話なのですがお願いします。
初期化する時の、fovy(視界)とアスペクト比についてです。
アスペクト比を変えた時にfovy(視界)を調整して、画面に写り込む範囲を出来る限り一定にしたいのですが
どうすればいいでしょうか?例えば縦に縮んだ時に縦は変化あってもいいですが、横幅の映る範囲は一定にしたいとかです。
今は、fovyに入力する値を適当にそれっぽいものにしてある程度一定っぽい結果を得てますが、出来ればちゃんとした計算式でやりたいです。
お願いします。 FieldOfViewじゃなくてFrustumの方(XMMatrixPerspective(OffCenter)とか)で射影を作るべき案件に見えるが 三角関数で割り出せないか?
先に水平視野角決めて、そこからアスペクト比をもとにFovYを計算。 >>437
そうですね。普通に三角関数で出せそうですよね。何か難しく考え過ぎてたような気がしました。
>>436
今回は自分で計算してみようと思います。ありがとうございました。 DirectXの話ではなくて申し訳ないんだがここでしか質問できないので
DirectShow で Enhanced Video Renderer (EVR)を使って動画を再生してるんだけど
ビデオカードのユーティリティーソフトで GPU のクロックをダウンクロックしているにも関わらず
EVR を作成したら設定が無視されてGPUのクロックがブワーって上がる
この現象を抑えるのに何か有効な手段はない?
てか何でこんなことになるのかしら
ビデオカード: AMD Radeon R9 200系
OS: Windows 10
とりあえずの対策で EVR を VMR9 と カスタムアロケーター に置き換えて凌いでいるけど
気持ちが悪い 初歩的な質問で悪いんだけど
D3DXMatrixPerspectiveFovLH()関数で設定したカメラの
視界からオブジェクトが消えたかどうかの判定方法について
どういう方法があるか教えてくだせえませ >>441
視錐台カリング
出来合いのでやるならDirectXMathのBoundingFrustumなど >>441
視点から奥方向への距離は、深度範囲に設定した最奥値(よくあるサンプルだと1.0から1000のパラメーターでいう1000の方)だから、視点から1000離れたオブジェクトを描画しなければいい。
視点から球上に距離を計算してもいいし、単純に視点座標系でz成分1000以上を弾いてもいい。 質問です。ddsファイルに並んでいるテクスチャ一つ一つを、
画像形式で保存する方法があれば教えていただきたいです 使ってるOSがLinuxでOpenGLの民なんですが、
DirectXとOpenGLの違いを教えてください。
OpenGLを知ってたのでエンジン的な物でも作ろうと思い、
何となく半々くらいだろうと思ってゲームプログラミングについて調べたら
情報の殆どがDirectXだったのが凄く意外で
……DirectXの方がゲーム作りに優れているならその具体的な理由が知りたいのと、
内容によっては乗り換えも検討してるのが現状です。 何が意外って何も知らないIT音痴がLinux使ってること。
世界のPCのほとんどがWindowsなんだから当たり前だろうに。PCゲーム市場=Windowsなんだよ。 >>448
違いなんて膨大にあるし、その辺を説明したwebページも大量にあるのだから、まずはそれを自分で調べて疑問点をもっと具体的に絞り込んだら? そもそも技術的に優れたものが流行るとは限らないし
実はそっちの方がレアケース ちなみに Windows で OpenGL 使ったって構わないんだぜ
>>449 は変なこと言ってるけど
Linux で OpenGL に慣れてるって思ってるなら
Windows でも OpenGL 使いなはれ なぜOSS陣営は常に技術的に遅れていたいう事実を隠すんだ? 一番の違いはIDEじゃねw
Linuxで大き目の開発しろって言われたら発狂しそうになるわ
どうせならVulkan頑張ってみたらいいのに、今回だいぶDirectXに寄ったし
関係ないが、昔MIFESとか使ってたなぁと検索したらまだ頑張ってたのな・・・ ああー
42歳超えると意欲が
欠片もでねええよおお
去年は数行程度、今年はゼロだ
歳はとりたくねえもんだ 445で質問した者です
教えていただいたサイトを読んでみたのですが、内容が難しくよく分かりませんでした
具体的にはMOD用に↓のような画像をパーツごとに分解したいです
https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTeC5R4VL4oDXM4_moWz5wTJw_OcplSDSQ1MnDuEtQHKVBPji9Y
繰り返しの質問になってしまい申し訳ないですがよろしくお願いします ■ このスレッドは過去ログ倉庫に格納されています