【C++】 DirectX初心者質問スレ Part41 【C】
DirectX9でアニメーションメッシュを描画するのに
HLSLを利用しようと考えています。
そこで気になったのですがID3DXAllocateHierarchyの仮想関数CreateMeshContainerの
3番目の引数に D3DXEFFECTINSTANCE *pEffectInstances というのがあります。
また、D3DXMESHCONTAINERにもLPD3DXEFFECTINSTANCEというメンバーがいて
シェーダー用に何か用意されているみたいなのですが
これは無視して問題ないですか? >>5
使ったことないから知らないけど、
おそらくは、固定機能の挙動を操作するパラメータ値を「エフェクト」と読んでいた筈だから、
固定機能のパラメータを別に設定すれば、そこは省略しても大丈夫だと思う。
ただ、それ以前にDirect3D9を使うことを避けた方が合理だと思う。
アニメーションメッシュ(ボーンアニメーションとかスケルタルアニメーションとか言われるやつ)は、
それを実現するには、入力するモデル(=ジオメトリ、メッシュの集合)に頂点索引と頂点重みを適切に付与してやることを暗黙の大前提とする。
これが整ったモデルがない限り、アニメーションメッシュを描画して、任意にモデルを動かすことはできない。
そして、これが整ったモデルがあるならば、Direct3D9を使う必要もない。 >>6
回答有り難うございます。
いろんなサンプルを見てみたのですが
まるぺけ様の解説以外は皆無視していたので
自分も無視して実装してみていました。
HLSLのエフェクトのことではないんですね…
いろいろあってDirectX9使うしかない状況になっています。すみません。 これが期待通りの結果を得られるならば、ライトマップテクスチャを作りやすくなりそうだな dx12には興味はないけど
これはちょっと面白そうだよな
今は忙しいんで始めないけど
落ち着いたらやってみたい DirectX9でD3DXMESHCONTAINER構造体にpNextMeshContainerというメンバがいて
次のメッシュへのポインターということはわかるのですが、
先頭のメッシュはどうやったらわかるのでしょうか?
よく再帰関数でMeshContainerを探すプログラムがありますが
兄弟→子供の順で探すものと子供→兄弟の順で探すものがあり
この場合、XファイルにMesh情報が複数あったときに最初に見つかるMeshが異なるはずです。
兄弟から探す、というような決まりがあったりするのでしょうか? DaaSって
DirectX as a Service の略? 数学の初歩的な質問ですみません。
D3DXVECTOR3型の単位ベクトルをD3DXVECTOR4型にする場合、
xyzをコピーして、w要素に1.0fを渡せば良いのでしょうか?
もしくはD3DXVec4Normalizeを再度呼ぶべきでしょうか? 目的が分からないから答えにくいが
とりあえずw=1にしておいて問題が起きたらw=0にすればいい
正規化は不要 >>15
まず単位ベクトルとは何なのかちゃんと調べろ
>>16
馬鹿は黙ってろ >>15
元が単位ベクトルなら正規化は不要
ラスタライザが正規化に問題を起こすこともあるから、ピクセルシェーだで正規化を必要とすることもある w=1はおかしいでしょ
w=0だろ元は3次元ベクトルなんだから
お前等大丈夫か? 位置座標は w=1
向き(法線とかライト方向とか)は w=0 向きと座標の違いが分からないのかも
アフィン空間で生活しているのかもしれない DirectXを最近始めた者です。
http://k3tec.net/neko_wiki/index.php?DirectX%B9%D6%BA%C26%B2%F3
に出ていたコードをコピペしたけど、エラーが出て起動できません。
エラーの赤線が引かれている部分は、
pD3D9 = Direct3DCreate9(D3D_SDK_VERSION); のpD3D9の部分
// メッセージループ
MSG msg = {};
while(msg.message != WM_QUIT) {
のwhileの部分、
コードの最後のpDevice3D->Release();
pD3D9->Release();
////////////////////////////////////////////////////////////////////
return 0;
のpD3D9の部分、return 0;の部分などです。
どうすればいいのでしょうか?
よろしくお願いします!! >>24
SDK関連のインクルードができてないのでは?
とにかくエラーメッセージ出してくんないと分からない。 >>25
いろいろいじったりインクルードをやりなおしたりしたのですが、エラーの赤線はなくなりましたが、やはり実行できません。
これがエラーメッセージです ↓ よろしくお願いします
https://youtu.be/olZEyKLDRlw あほというか、これが普通なんだよ。
ここの住人が普通じゃないだけで directwrite始めたいんやが
サンプル落とせないんやがあ!!
ワイどうすればいいんや
馬鹿は死ね以外でよろしおま 最近、とある字形レンダリングライブラリを使った描画処理を整理したが、
DirectWriteからDirect3Dへの転送が遅い理由がよくわかった。 >>31
な、なんや・・
優Cやないけ
おかげでゲット出来たわ
ワイがJKならお礼に
ぎゅるんぎゅるんやってやつところやけど
汚いオッサンなんや
堪忍な☆ >>34
単純にパス数(工程数)が多い。
1.字形のラスタライズ
ベクトルフォントからビットマップにラスタライズ。CPU。輝度のみ
2.字形に色を塗る
輝度から色相。CPU
3.GPUのステージんぐに転送
4.ステージングからレイアウトされたテクスチャに変換
5.アルファ合成
完成
普通のモデル、ジオメトリなら一度読み込ませたらテクスチャ転送なんかしない。 >>35
サンクス!
うわぁ、けっこうCPUに仕事させてんなぁ〜。
もっとGPUにオフロードしてほしいもんだね。 字形描画を実装した。
雑な実装だが、アホみたいに遅くなった。
初期実装:描画ループで35の全部やったらフレームレートが1fpsを割った。
兎に角、プロセッサからGPUメモリにアクセスするとガッツリと下がる。 昔の古いゲーム、メモリの動きを監視してたら
起動するとかなりシステムメモリが消費されるけど
ビデオメモリ使用されてないんですかね?
古いバージョンだとなんか制限あるとかですか? >>37
遅くなったが読ませてもらった。
全然理解できなんだw
フォントレンダリングの基礎を知らないとアカンっぽいね。
今のところ、GPUよりもCPU(SMID)でやるほうが良い領域なんだな。 >>41
・GPUだと早いでw
・FreeTypeは遅い
としか書いてないからな。
GPUオフロードがメモリ面での現実問題になりにくいアルファベット文化の発想と感じる。
訳なんだが、たかだか100MBのベクターフォントなら全部上げて計算シェーダで実装とかも嫁ではないが、
字形をフレーム毎に再計算したいニーズがあるのだろうか? 描画のほとんどは、字の計算式だろ
毎フレーム、描画すると遅い DirectX9 SDK(June 2010)をインストールするとついてくるDirectX Control panelの64bit版が
設定を変えて保存して閉じても、有効にならず、再度DirectX Control Panelを起動すると
変更が戻っています。32bit版であれば正常に動作します。
ググっても同じ症状の人がおらずお手上げ状態です… DirectInputでタッチパネルは扱えるでしょうか? ようやくFreeTypeで縁取りを取り出せるようになった。
気づいたことは、最初から太字でデザインされたフォントじゃなければ、見るに耐えない字になる。
NotoSansレギュラーを縁取りしたら、見栄えが悪くなりました。
とりあえず、あれ。縁取りのサンプルでSVGでやるやつは、取り出しかたの考え方を間違えていると思った。
それとベシエprimitiveがほしい。 やってるのは、16ピクセルだしね
64ピクセルぐらいにすれば、今でも綺麗に縁取りが描ける。
製本、組版はビットマップを好む。
3DCGは速度を求める。パスが欲しい。 「DXライブラリ」がミドルウェアとしてNintendo Switchに対応、ロイヤリティーフリーで提供開始
https://www.gamer.ne.jp/news/201806080022/
マジか… >>53
出世したなぁ…。
使ったことないけど、おめでとさん! 俺もちょい信頼性の落ちる簡易ラッパーぐらいの印象しかなかったわ
昔からあるよねぇ……祝福しておこう dxライブラリーと聞いて、d3dxのライブラリー関数のことだと思ったら別物なのね。 2つの方向ベクトルがあるとき、
一方をもう一方の向きに一致させるようなピッチ(X軸回転)とヨー(Y軸回転)を導き出すには
どのようなアプローチがあるでしょうか?(ロール(Z軸回転)はなし)
一つは、
(1)2つのベクトルに直交する軸(外積)で2つのベクトル間の角度分回転させるクォータニオンを生成
(2)Z軸方向の単位ベクトルを(1)のクォータニオンで回転させる
(3)(2)で回転させたベクトルの先を原点から注視するようなビュー行列をXMMatrixLookAtLH()で生成(上向きベクトルはY軸方向の単位ベクトル)
(4)(3)で生成したビュー行列(回転行列)からピッチとヨー成分を抽出
という手順が考えられますが、もっとエレガントな方法ってあるでしょうか? ただの数学じゃねぇか
数学苦手なんか?
アホらしい DirectX11.0で2Dの不思議のダンジョン系ローグライクゲームを作ろうと思うのですが
ヌルヌル快適に動く物を作りたいので、Direct2DとDirect3Dのどちらを使った方が実行速度が速いのか教えてください >>66
>"DirectX11.0で2Dの"
って書いてあるじゃん?オーバーレイだけでやるって事?
スーパーファミコンの疑似3Dがやりたいのでしょうか?
オーバーレイの機能って3D? 速いね。だが、そのハードルは高い。
11.0てことは、7。
つまり2Dでシェーダが使えない。
すると、ビットマップなんかをロードしてやるにしろ、ちょっとしたセピアフィルターなんかも自前、CPU処理とかになる。
つまり2Dでは遅い。 Direct3Dでやってみようと思います
ありがとうございます
>>72
すみませんよく分かりません
普通のドット絵を特別な演出なしでただ表示するだけです >>75
8.1以降だよ。D2Dのシェーダ機能は。 >>77
正確にはPlatform Updateを当てたWin7からだねえ
shader linkingとかWin10じゃないと使えない部分もあるけど 過疎ってるな
やっぱりDirectX/(^o^)\オワタのが原因か スプライトでも座標変換済み頂点の2D板ポリゴンでも、
1MB程のデータサイズの画像(3000×6000ドット等)を2、3枚重ねて描画していると、
終には重ねたい画像が、白いボックスのものが表示、あるいは画像がまったく何も表示されないという
怪奇現象に出会った人いますか?
仕様です
解決策としてZを少しずらす事で対処するのが普通
そういった機能はDirectXにもOpenGLにも既に付いてるよ 答えてくれてありがとうございます。
言い方間違えました(´つω・`)
Zをいじったり、座標をずらしてみたのですが、結果は同じでした。
16GBもメモリを積んでいる、にもかかわらず、
テクスチャーがトータル5MB分ぐらいしか表示されません。
どう足掻いても、メモリ不足になる、これはどうしてもおかしいなと思うんですよ。
いろいろやり方試したけどできないのです、おそらくVRAMが1GBしかないからなのかな〜?
もうOpenGLで行こうかと思いもします。(´つω;`)
利用しているのはVC++2015とDirectX9.0です、初学者には丁度良いものです。
11、10飛ばして12に覚えようかと期待もします。11はやること多すぎでつ。
みんなみたくUnityみたいなのに乗り換えたほうが利口なのだとおもうますがね、
どうしてかDirectXが捨てられない
沢山pngファイルが読み込めるサンプル作ってくれる人いませんか?
簡単なものでよいので壱万円ぐらいなら払いますじょなもし。(´・ω・`)
>>86
まずそっちから上手くいかないコード晒すのが順序ってもんやろ
現状じゃテクスチャ解放忘れてVRAM使い果たしてんじゃね
くらいの予想しかできねえよ なんで自分が判ってないのを環境のせいにするんだろうな CPU i7 6700K 、メモリ16GB、VRAM1GB、Windows764Bit
テクスチャーを作成しています。中でも大きいものは1920*1080ぐらい)
CreateTexture(n〜10枚ぐらい);
lpSprite->Begin(D3DXSPRITE_ALPHABLEND);
UDXDrawSprite(0);z=0.1
UDXDrawSprite(1);z=0.2
UDXDrawSprite(2);z=0.3
(※この中身はDraw()の3連続描画です。完全に重なっています。3つのレイヤーを持ったスプライトをアニメーションさせているところです)
UDXDrawSprite(3);z=0.4
UDXDrawSprite(4);z=0.5
UDXDrawSprite(5);z=0.6
UDXDrawSprite(6);z=0.7 //この3枚目が描出来ません
UDXDrawSprite(7);z=0.8 //この3枚目が描出来ません
UDXDrawSprite(8);z=0.9 //この3枚目が描出来ません
3枚ごとに表示、ここは重なっていません。3キャラクター分、計700KBで9枚のスプライトを表示しています)。
lpSprite->End();
RELEASE()
解放して終了。一般的なコードです。複雑なことはしていません。3×3枚並べてます。つまり3キャラクターが揃ってアニメーションしてくれれば良いのです。
ごめんなさい描き忘れました。
ようするにこのパソコンのスペックで最大限のスプライトをどのくらい使えるのかが知りたいのです。
みんなのDirectX9.0ってどのくらい詰め込めるものですか?(´・ω・`)
えっと
CreateTexture(n〜10枚ぐらい);
RELEASE();
これを書いてる場所が可笑しい void CreateTexture(UTEXTURE *inf) {
lpTexture = new LPDIRECT3DTEXTURE9[10];//ここで10枚つくる
(中略)
D3DXCreateTextureFromFileEx(lpDevice, inf->fn, inf->size.cx, inf->size.cy, inf->mip, inf->usage, inf->format, inf->pool,
D3DX_FILTER_NONE, D3DX_DEFAULT,inf->colorkey,NULL, NULL, &lpTexture[n]);
}
メモリの解放は
for(unsigned long j=0;j<10;j++){
RELEASE(lpTexture[j]);
}
他 delete
不明だったところです。
レス頂きまして、ありがとうございます。
>これを書いてる場所が可笑しい
場所ですか・・・、これは
便宜上隣り合ってるだけで、実際の記述とは異なります。(´・ω・`) RELEASE(&lpTexture[j]);
じゃね?
知らんけど 自己解決しました。
レスポンスをくださった方々ありがとうございました。
機会がありましたらまたよろぴくぴくぴくです(´・ω・`)
解決法は画像データ(pngデータ)のサイズを半分にしました。 ディファードレンダリングについて質問です。
directx11でディファードレンダリングを勉強中なのですが、
最終描画でカラー情報と法線情報をうまく取得できません。
以下の画像のようにテクスチャ一枚一枚に描画されるような感じになってしまいます
左上がカラーと法線、下が結果です
http://iup.2ch-library.com/i/i1926984-1533963662.png
http://iup.2ch-library.com/i/i1926983-1533963662.png
そのまま取得するだけではだめなのでしょうか? >>101
参照するメッシュがスクリーンじゃなくて、立方体になってるじゃん >>101
最後は立方体じゃなくて1枚の板ポリを描画する >>102
>>103
上手くいきました!!
ありがとうございます Direct3D12で描画ループを描けた記念のカキコ。
Direct3D12は、かなりVulkan(Mantle?)の影響を受けているけれど、
11以上に描画パイプラインが理解しやすく、GPUをイメージしやすくなっていていいね。
もう11には帰れない。 11に帰りたくない。
そこで12を普及に当たって、躓き易い箇所を整理、共有しておきたい。 箇条書きで。
<Descriptor Heap、Descriptor Table、Root Signature、そしてCBV,RTV,DSV,SRVの関係>
1.Descriptor Heapとは?
CPUとGPUを結びつけるCPUポインタとGPUポインタの集合。
GPUポインタは、リソースを示し、CPUポインタはハンドルを指す
又、一つのエントリが11でいう「ビュー(RTV、DSV、SRV、CBV)」
2. Descriptor Tableとは?
シェーダリソース。
3.Root Signatureとは?
シェーダにリソースを入力するデータの構造定義。 レジスタとのバインディング情報
機械翻訳だと「ルート署名」とか翻訳されるが、罠なのでスルー推奨。
決して、ルート証明書で署名したASN.1符号データなんかじゃない。
ヘッダを指して「シグネチャ」と呼ぶ、そういう慣習から来るワード
QA. シェーダリソースの構造、レジスタとのバインディングって、どう決まるの?
Root Signatureのパラメータテーブルに登録する「Descriptor Table」で規定する構造で決定される。
ここだけ理解すれば、D3D12の入門で吐きそうになることは軽減できると思う。
次の難関は、nodeTypeとTextureロードだけど、ここは頑張れ。
テクスチャロードは、明示的に命令リストを介してGPUに配列を正規化するように命令を飛ばすことをプログラムするだけの話。
nodeTypeは、マルチGPUでの処理を制御するための情報。 D3D12はD3D11がやってくれてたことを自前でやるだけだから凡その場合どうでもええが
DXRが目的の場合はいよいよ避けて通れなくなりそうだからなあ どうせまた複雑過ぎるとか
世論が騒いで
易しくなった13が出るだろ
それまでワイは手を出さんで
つーかそれまでにガンとかで
死んでそう いや、簡単は11、複雑は12と住み分けることになってる。 どこで質問していいか判らなかったので質問させて下さい。
LOGFONT の lfPitchAndFamily の FIXED_PITCH と同等の判定を
FreeType2 で行いたいのですが、face_flags を
FT_FACE_FLAG_FIXED_SIZES と FT_FACE_FLAG_FIXED_WIDTH で判定しても、
どちらも FIXED_PITCH と違う判定が返されてるのです。
何か方法はありませんでしょうか? int* str;
int *str;
ポインタなんだけど、2つの書き方の違いって何? >>112
固定ピッチにしたいなら、固定ピッチに対応したフォントに限られる。
MSpゴシック、游ゴシックなんかを与えても固定にはならない。(と、思う)
恐らく、NotoSansMonoというキーワードが妥協案におすすめ。 字形の描画(レンダリング)で言えば、アンチエイリアス(輪郭のギザ付きを中間色で誤魔化す)もFTはやってくれるから、自前でピッチを固定したり、間隔を整えようとすると苦労する。
数学というよりも心理、グラフィックスデザインの領域に近いのかもしれない。
ついでに言うとDirectWriteは字形のパス(この場合、頂点配列に近い)を出力できる。 >>113
前者は
int* str, hoge, fuga;
っていうミスをしがち
後者は
int *str, hoge, *fuga;
で書き分けの意図がはっきりする
よって後者をおすすめします >>115
説明下手で済みません。
そういう意味ではなく、Faceに読み込んだフォントが
固定ピッチなのか可変ピッチなのかを判定したいのです。 >>117
理解はできるが、後者は気持ち悪くてできないなぁ(汗)
しょうがないから1変数1行ずつ書いてる。 >>118
詳しくは知らないが、恐らく「ない」んじゃなかろうか。
以下、すべて蛇足、憶測。
ウィンドウズほど優しくできていない。
字形のレンダリングに限れば、必要としない判定。
必ず字形毎(文字毎)に設計された間隔を読むから。
あとFTはAndroidで使われているから、そっちほが詳しくのがいるのではないかと。 >>119
気持ち悪いのは
int *str, hoge, *fuga;
が混ざってるからで
完全に一行ずつに分けなくても
int hoge, hage;
int *str, *fuga;
なら問題ないだろ int* str, hoge, fuga;
の意図が
int* str, * hoge, * fuga;
だとするとこっちの方が気持ち悪い ミニゲームじゃなくて気合入って作られてるDirectX使った出来の良いゲームで
言い方悪いけどパクれるというかお手本になるソースコードって公開されてない?流石に都合良すぎるか 文法、記述ルールは、宗教戦争だけど、
最近流行りのヌルポ排斥運動は、熾烈な勢いがある。
コーティン?だったかは、変数の使い回しを言語レベルで排斥する思想。
ヌルポを排斥するため「仮決め(代入なしの変数宣言)」を許さない。変数の仮決めは穢れている。
初期値から消滅まで、必ず値を持たせるためには、有意な値を引き回せばよい。
結果、グローバル、アクセス自由度の高い変数に流れ、見通しの悪い、誰が更新参照してんだかを特定しにくく(匿名性を高める効果を促進しやすく)なるか、アホみたいに引数を引き回すかコンテキスト構造体を引き回すことになる。
コンテキスト構造体とは、すなわち匿名性の促進と道義。 >>125
ソースコードだけならば、Elonaがソース公開されているんでないかな。
よくしらんけど。もしかしたら作者と直に連絡を取った人だけに渡してるのかもしれん。
最近は、コンシューマでもインディーズとカテゴライズされて地位が出来上がっているから、なかなか巡り会えないと思う。
最近のインディーズゲームは、少しおかしいぐらいに技術力が高いからね。
3Dシューティングで視点がステージや進捗で変わるのがあるが、あれはかなり異常な出来だった。
もはやプロの仕事。 >>126
適当にGitHubとか言ってるんじゃなくてマジであんの?GitHubすごいな
どういった風に検索すればいいんですか?
>>128
Elonaはもうソース配布してないみたいですね
というかElonaってHSPだけどDirectX使ってたのか >>129
DirectX5からの付き合いだが、俺もVulkan移行中ですわ directX12で勉強がてらゲーム作ってたけどAI流行ってたから
CS使ってAIの実験してるわ。
とりあえずC++とDirectxあれば何でもできるね >>129
VulkanとD3D12、両方使っているけど、
比較的に12の方が優しいが、どっちも癖がある。
整理されていて、より些細なことまでできる分、一山越えると少しだけVulkanが好きになる。
Vulkanの入力アタッチメントなんかは、避けるべきと思う。
vulkanとd3d12の違いは
vulkan
・描画バスの仕組み(このパスは、マルチパスレンダリングのパス)
d3d12
・レイトレができる(らしい) 描画パスの仕組みがないのは、恐らくは後方互換性。
利用するプログラマをつき放さない意味での用語や理解についての互換性が趣旨に感じた。
(そんな言葉はないけど、エクスペリエンスのデノミを避ける、が近い?)
Vulkanの描画パスは、吐ける。 ゲーム制作をしてるのですが、
XInputGetState関数でXbox Oneのコントローラーは扱えますか?
MSDNでは
『XInput とは、Windows 向け Xbox 360 コントローラーからの入力値を、アプリケーションで受け取れるようにする API 』
と書いていたのですが…
https://msdn.microsoft.com/ja-jp/library/bb173045(v=vs.85).aspx >>138
スチームでの対応状況が参考になるのではないかと。
非対応なら無理。対応しているならいける余地はありそう。
7でPS4コントローラがUSB接続で制御できたことは確認済み。
なお、これはDirectInput8を使った。 検索して探していると『WindowsにはXBoxのコントローラを使用するためにXInputというAPIが用意』とか『Xbox One、Xbox360等のX-input式のコントローラー
』とか等と書いてあるブログが複数発見したので同じ仕組みかな?とは思うのですがMSDNを見ているとXbox360専用と書いていたので >>137
Currentは、もうヤダ。
マルチスレッドレンダリングする上で面倒くさい。
って事だと理解している。
命令のキューと整理されれば、プロセッサと同様なメモリ保護も視野に入るし、
とあるシェーダが別プロセスのテクスチャを読める可能性を排除しやすい。
11までのGPUは、そういうのは皆無だろうし、12にもvulkanにもなさそうだしね。
GPUにスワップメモリ、仮想メモリ空間、スワップで逃がすストレージなんかないのだから。 DirectX9でSetRenderStateを使ってブレンディングする場合
除算ブレンディングはどうやったら良いでしょうか?
加算なら以下で出来ますが。除算がよく判りません。
lpD3DDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
lpD3DDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); dstをぜろ。srcを色指定にすればいいだけに見える
oc=(tc*dest bc)+(pc*src bc)
tc ターゲット色、pc シェーダ出力色 >>147
たぶん載ってない。
>>148
わー!ありがとう!やってみる。 皆さんDirect3d上でのGUIは
何を使っていますか? ウィジェットのことなら自作だな。
良さそうな小さいのが見当たらない。
ゴリゴリと頂点配列を作って動かしている。
字と背景を別々に作るから、かなり複雑で眠い ただのゲーマーだけど聞いていい?
いまだDirectX6使ってるゲーム好きで時々やるんだけど
古いバージョンっていつか切り捨てられて動作しなくなったりする?
Windows10でも動いてるしこれからもずっと動いてて欲しいんだけど。 directXはCOMテクノロジーがベースだから
古いゲームでも最新ハードの機能が使えるんやで
例えばdx6ゲームでHWTLやテッセレーション
高度なAAや4k解像度適用などなど
ま、今は絶賛開発中なのでしばし待て
22世紀中にはリリースされるよ >>154
DirectX云々以外のところで動かなくなる。イースとかもうWidows10では互換モードでも起動すらしない >>155-156
DirectX自体は互換性があって大丈夫ってことかな?
それ以外で動かなくなる可能性の心配した方がいいってことか。 DirectXに互換性などはないような。
ただ過去のスタックが残っているだけのこと。
それすらDirect3D9c未満が動くのか?は疑問がある。 ドライバが非対応なんじゃないだろうか。
あと、動画再生時のCODECが非対応で、動画再生できずに堕ちるってのもあるような。
ソフトウェアMIDIもドライバで実現しているのか、Microsoft標準ドライバが実装しているのかも疑問がある。
取り敢えず、過去に買ったWindows 95時代のゲームで動画再生できずに堕ちたゲームは観た事がある。 Windowsは、Windowsのみで機能を実現など出来ていない。
ハードウェアを扱う部分は、メーカーが提供するドライバが核であり、
そこがWindowsの互換性を提供し、メーカーに向けたドライバ要件が担保となっている。
Officeが必要とするドライバ機能がドライバ要件を決定づけていて、
サポート期間中の製品が必要とする部分なら、ドライバも必須となる。
従って、Direct3D関係の機能は、既に9c未満が動く保証はないと思う。 >>159
ドライバの対応次第ってことかな?
現状ではDirectX6や7や8のゲームは普通に動いてるけど
メーカーがドライバ対応しなくなった時が終わりってこと? >>161
ここでウダウダ聞いてもなんの担保にもならんぞ
対応しなくなったら終わりではなく更新されないだけ、それで動き続けるかどうかは神の味噌汁
たまたま動かなくなっただけかもしれない、たまたま動いているだけかもしれない
3DゲームはドライバでなくDirect3DのAPIに対してアクセスしているので
WindowsでDirect3D(の該当バージョン)が態々削除されない限りは互換性はあるとは言える
もちろん削除されなくてもWindowsの更新で内部の挙動が変化してゲームが動かなくなるなんてことはざらにある DWMが変わったタイミングで動かなくなったアプリが増えたっていう意味です >>162
互換性自体は結構あるね。
VBのDirectX用のDLLはもうOSに含まれてないけど自前で用意すれば結構動く。
ただ昔のゲームで使われてたカラーキーがもうダメなハードがあるね。 質問です。
メインスレッドで描画しながら別スレッドでテクスチャを大量に読み込むと
画面がちらつきます。D3DXCreateTextureFromFileを実行した時にちらついてるようです。
ここにコードを書く事が出来ないのでエスパーでおねがいします。
思い当たる原因はありますか?D3DDeviceをスレッドをまたいで参照してたりするからでしょうか? D3DDeviceを
マルチスレッドで使う場合
スレッドセーフで作らんとダメだろう
そこはちゃんとやってるのか? マルチスレッドモードに設定してないと、Debugモード実行で警告メッセージ出まくらなかったっけ?
それが出てたら、出ないようにするとこから。 >>170-172
ありがとうございます。やぱ作り方を不味ってるっぽいっすかね?
言われた事を参考に自分なりに調べてみます。
また何かあったら宜しくお願いします。 ちらつきで疑わしいのは、presentする辺りかな
ディスプレイに表示する描画ターゲットを作り込むときに参照しているテクスチャでもあるんでないかと。
というか複数のスレッドからデバイスコンテキストを触ると蹴られたと思う。
それでもちらつきが一時的な症状ならば、テクスチャ関数が中で排他しているからでなかろうか?
ところでチラツキって具体的な症状としては、どれなんだろう。
・一瞬黒か白が入る
・カクカクしたアニメーションになる
・デジタルノイズが入る
・サブリミナルな絵が入る
・何しにきたんだよ?お前のために決まってるだろ!と友貴に言われる >>174
ありがとうございます。
テクスチャ読み込みした瞬間に「・デジタルノイズが入る」といった感じです。
具体的に言うと「ブロックノイズっぽいものが所々に出る」といった感じです。
症状自体はそこまで酷い訳ではないんですが、チラチラするので気になってます。
一回あたりのノイズのサイズは小さいですね。画面がフルHD時で、128x128くらいです。 テクスチャ読み込み中は特に自分ではD3DDeviceの書き換えは行っていなかった(と思う)のですが
一応念のために以下みたいなクラスを作って排他処理を徹底したら直りました!
しかも20秒くらいかかってたテクスチャ読み込みが何故か5秒くらいで終わるようになって
いいことずくめでw 最高っす。
class CLockObject {
protected:
CRITICAL_SECTION m_CriticalSection;
public:
CLockObject(){ InitializeCriticalSection(&m_CriticalSection); }
void Lock(void){ EnterCriticalSection(&m_CriticalSection); }
void UnLock(void){ LeaveCriticalSection(&m_CriticalSection); }
~CLockObject(){ DeleteCriticalSection(&m_CriticalSection); }
};
スレッド1
LockObject.Lock();
〜
Direct3D描画処理
〜
LockObject.UnLock();
スレッド2
LockObject.Lock();
〜
テクスチャ読み込み
〜
LockObject.UnLock(); >>175
その症状ならむしろ巧くマルチスレッドに動いてしまっている、疑いもあるような。
読み込みが未完なテクスチャを読み込めば、瞬間的に変な画素を参照するから、それがノイズに映る。
でも考えにくいので、変な描画、予期していない描画が挟まれて映っている。
あと突っ込まれなかったから自分で言うが
友貴はチラチラじゃなく、ちゃらいだろ。 >>177
ありがとうございます。
一応>>176でノイズ自体は解決して読み込み速度も上がったのですが
描画スレッドと別で読み込みスレッドでテクスチャを読み込んでいる時に
今度は排他処理の影響か描画速度がかなり落ちてしまう症状が出てます。
ただ別スレッドにして排他処理をしっかりやって読み込むと読み込み速度は
かなり速くなったので開始時に画面を黒で塗りつぶして一気に読み込む方法をこれでやろうと思ってます。
出来れば描画スレッドの速度が落ちずに読み込めればいいんですがこれでも問題ないかなと。
まとめると以下のような感じですね
1 シングルスレッドで開始時に読み込むと普通に20秒くらいかかる
2 マルチスレッドで排他処理無しで読み込むと描画しながら読み込めるが20秒くらいかかりノイズも発生
3 マルチスレッドで排他処理有りで読み込むと描画速度がかなり遅くなるが5秒ほどで読み込める そもそもそのテクスチャは実行時に毎回読まないといけないものなのか? 176の実装だとマルチに動いていない気がする。
クリティカルセクションは、一つのスレッドが入ったら、離れるまでは他のスレッドが待たされる。
つまり並列に実行していない。
真面目に並列度を高めるならば、テクスチャ毎に排他オブジェクトを持たせて、読み込みが完了していないテクスチャを描画ループのスレッドが触ろうとしたら、そいつをまるごとスキップして描画を続けるとかするべきかも。
ジオメトリなんかの単位でアセットを管理しているならば、読み込み完了前のジオメトリに紐付くテクスチャや頂点は描画をスキップする実装。
あとはオフラインサーフェースへの書き込みなんかの単位でまるごとスキップとかもできるかも。
チラツキを予防して、読み込み終わったアセットを段階的に画面に映したいなら、そういったリソース管理が必要。
でも大抵は、そんなことせず、読み込みが全部終わるまでは黒い画面を見せる実装を選ぶと思う。
GPUコアの限界までテクスチャなんかの読み込みスレッドを並列化することを選びそう。 >>180
ありがとうございます。
なるほど。効率の面ではまだまだ出来る事は色々あるんでしょうね。
ただ複雑になって下手な事して不具合が出ると困るので自分も単純な方法で行こうと思います。
マルチスレッドで読み込むと読み込み速度自体は上がったので排他処理だけしっかりやって
あとは画面を塗りつぶしてそこで一気に読み込む方法を今回は採用しようと思います。 d3dのヘルプを読むと
マルチスレッドでは
イミディエイトコンテキストは使わずに
別途デバイスコンテキストを作って
描画スレッドではそれを使うようにとあるよ
多分必要なのはそういうところと思う D3DXCreateTextureFromFileとか言ってるからDeferred Contextすらない世代のことじゃろ 1809記念
Direct3D12でコマンドキューにシグナルするタイミング
1.ExecuteCommandList()
2.Present()
一回のコールの度にフェンスの数値をインクリメント(=GPUに処理を実行する契機を与える)
これを怠ると終了契機にフロントバッファをコマンドキューが掴んでる、との例外が出る。
ギットハブのError on shutdownってタイトルのスレッドにも報告されている。英語
取り敢えず、APIマニュアルでこの旨の事柄を書いたページは見つけられなかった。
ただのシェア ある画像を別に用意したマスク画像の形でリアルタイムでくり抜きたいです(マスク画像のフチのぼかされてる所も再現したい)。
ただしシェーダーは使わずやりたい。ステンシルとかブレンディングでどうにかなりますか?
リアルタイムでやりたいのでロックして直接弄るとかは無しでお願いします。
フォトショの例ですがこんな事をリアルタイムでやりたい(くり抜かれた画像の余白の部分はアルファ値で透明になるように)
https://helpx.adobe.com/jp/photoshop-elements/kb/cq07050438.html (1)マスクをレンダーターゲットのαに書き込み
(2)くり抜き対象画像のブレンディング設定値を工夫して書き込み
でいけるかな? >>187
(1)は、アルファチャンネルつきの画像を用意して描画するとして
ARGBのうちAだけが反映されるように(2)でうまく合成するという事になりますかね?
RenderStateはSRCがDESTALPHAにすると(1)の画像のアルファ値が上手く反映されますね。
ただDESTをどの値にしてもARGBのうちのRGBの部分も反映されてしまってフチが黒くなってしまいます(マスク画像が黒い為)。
ARGBのAだけ反映させるにはどうしたらいいでしょうか。 マスク画像のRGBはオール0(真っ黒)で、Aだけマスクの形となるα値にする。
んで、(1)のときはRGBは加算合成で、AだけSrcをDstにそのまま書き込みってできないかな? >>189
加算合成で黒が見えなくなるのは黒のピクセルのAが0になるからじゃないですかね?
RGBはどうやってもなんらかの値を取らないといけないので…
ブレンディングでやるのは無理なんでしょうか… >>187
色々やってみたんですが、まずくり抜きたい画像を描画しておき
そのあとにマスク画像として用意した全部黒で真ん中だけ丸くアルファ値ゼロの画像を
上から描画して、最後にその合成された画像を加算アルファで描画すると
余計な部分の黒が全部透明になって理想に近い形になりました。
ただ加算されるので真ん中の描画される部分がちょっとピカピカしてしまいますが。
もうちょっと試行錯誤してみます。 >>192
加算以外で綺麗に抜ける方法教えて頂けないでしょうか?
ブレンディングカラーキーはハードが対応してなかったです。 ステンシルがいいんじゃねーの?
そもそもステンシルって
そういう型抜きをやるための機能だし
ステンシルバッファをゼロクリア
型抜き用画像を描画(描画されたピクセルのみステンシル値インクリメント)
対象の画像描画(ただしステンシル値!=ゼロのピクセルのみ)
こんな感じで >>194
ステンシルですか。やってみます。ありがとうございます。 ボカシが必要なら
マルチテクスチャブレンディングで
いいだろう
シェーダ使わないってんで
D3D9あたりだと思うが
RGBとAを別々に設定出来るし
要望は満たせるだろう >>198
ぼかしが必要なので、それよろしければ詳しくおねがいします! ここまで書いてあれば調べて実装するのは余裕だと思う。
ぼかす部分をアルファ値0.5、落とす部分を0にするだけではないかと。
でもdx9は使いにくいから、せめて11とシェーダーを使うべき。 9だと理解に変な癖が付くから悪い面が多い。 頂点配列。というかGPU上のメモリ確保(コミットリソース)は時間掛かるんだな。
d3d12、amdのプロセッサ内蔵GPU、デバッグモードなんだけど、4秒掛かった。
300個、それぞれ600バイトぐらいの頂点配列を確保するのに掛かった時間
と、書いて気づいた。そうかデバッグレイヤーか で、デバッグレイヤーを不活性にしたら、めでたくサクサク動きました。 DirectShowの質問なんですが動画再生している時に動画の上に図形を表示したいです。
表示中のウィンドウからHDCを取得して描画すれば一応表示できますがちらつきます。
検索してもあまり情報が出てこないので教えてもらえると助かります。 調べてたらテクスチャにして表示すれば簡単に実現できそうだったのでこれでやることにしました。 ユニティとアンリアルエンジンの認知度上昇
ハボックのクローズド化
APIの単純化によるアプリケーション実装の複雑化
ポリゴンデータ(アセット)の生産性の低さ
実現に必要となるデバイスの多さ
APIだけでは解決しない課題が多い
なら出来合いレディメードのアセットを簡単に使えるミドルウェアに流れる。
今、d3d12でウィンドウ処理を書いてるけど、 兎に角つまらないのに無駄に複雑になる。 ユニティやアンリアルエンジンの開発者にDirectXやOpenGLがいらないかどうか聞いてみてはどうか。 DirectXで開発ならフルスクラッチ開発になるの? フルスクールエッチに見えたがそれは個人の定義しだい 消防士が17歳高校生(M)に水着モデルやらまいか?
↓
上半身さわる
↓
逮捕 codeさんのおかげで影が薄くなりつつある
VisualStudio2019です
相変わらずレガシィなままです DirectX9でD3DXLoadMeshHierarchyを実行しているときに画面が固まります。
なのでD3DXLoadMeshHierarchyを別スレッドで呼びたいのですが可能でしょうか? VS2017とかにD3D9.hとかまだあるんだな
よくわからんディレクトリだったけど 最近、D3D12を色々触ってみた感想。
新しく登場したディスクリブタは、リソースに近いものなんだね。
描画パスをかなり綺麗に実装できた。 >>223
テッセレーションに関わる論文に見えた。 DirectXが/(^o^)\オワタってなってから久しいなw 久しぶりにパソコン買い換えたから
OpenGL(+FreeGLUT)かDirectX(VS2017)あたりで遊んでみたい
どっちがおすすめ? ム板が終わってる。デジタルネイティブにプログラムは無理。 >>227
1. Unity
2.D3D11
3.D3D12
4.Vulkan
OpenGLはない。もはやCOBOLの域 MME(MikuMikuEffect)でDirectX9でテッセレーションみたいな感じに
角を滑らかにしようと思っています。LoD等は一切考慮しません。
まず初めにMME自体がMMDに対してAPI HOOKを行っているようで、
d3d9.dllを用意してAPI HOOKでDirectX11に横流しするというのは諦めました。
(既存のd3d9.dllがどういう動きをしているか把握しないとならないため)
StreamSourceという機能でなんか角を滑らかにするような動作を
実現してくれてるようにも見えるのですが、
MSDNのDirectX9の開発者向けFAQには
「頂点シェーダは、頂点の作成や破棄を行うことはできません。」
とも記載があって、素人がちょっと調べてできるならとっくに誰かがやってるかな…
やっぱり無理なのか。とも考えています。
今までDirectXやHLSLに全くかかわった事が無かったので、
何かしら実現のためのヒントを頂けたら幸いです。 補足としてやりたいことのイメージを実際にやってるサイトを紹介します。
https://hexadrive.jp/lab/demo/65/ 局面分解に用いる頂点配列はパッチプリミティブを必須とする。(一般的なトライアングルリストではない)
局面分解するMMEもトライアングルリストだろうから、そこはクリアできそうに思うが、問題はテッセレート回路は9だと非対応じゃないかと思う。
9cならジオメトリシェーだがあるから、ソフトウェアで模倣は難しくないと思うが、かなり面倒で制限月になる。
その上でかなり計算回数が増えるから、フレームレートを落とすと思われる。
ノートパソコンあたりのGPUだと10万ポリゴン、1パスでフレームレートは12ぐらいまで落ちる。
そもそもテッセレートしても人形の肌は綺麗にならない。
美を感じるのは素材配置の比率で決まる。
テッセレートは単なる頂点追加(固定間隔での頂点追加。つまり足し算)。
はなからハイポリゴンを法線マップにベイクした方が綺麗で早く、効率がよい。
と、昔やったときに結論づけた。
ただ工夫の余地はある。 簡単に言えば、単純に頂点を増やしただけでは、陰影のリアリティを増やすことに寄与するが、美しくはならない。
曲線のギザツキを抑えることで綺麗にはなるが、それなら単にレンダリングターゲットの面積を広げた方が楽で早い。
今のピクセルは、まだまだ荒い。 ご回答ありがとうございます。
テッセレーションを実現したとしても、
期待している効果は得られない可能性があるということですね。
もっと勉強します。 >>237
ヘキサの人のソースコードがあるのかとちょっとわくわくして開いたらバイナリのみでワロタ DirectXかあ、懐かしいなあ
今はどうなってるんだろう レイトレというても、遅延シェーディングのことだけど。
バルカンでも11でも実装できる。
専用回路があるわけじゃない。
リアルタイムに反射成分を決める因子(陰面遮蔽、拡散反射、鏡面反射なんか)を計算して、2パス目でそれを参照して輝度を決める。
ビューの一面から見たポリゴンの成分を計算するから、これでそれっぼい陰影がだせる。
でもプリレンダしたライトマップのテクスチャの方が早くてリアル。 SpriteFontって描画の時にサイズ指定できないの? DirectX11なんですが、単なるトランスフォーム済みのテクスチャ貼り付けた板ポリを移動させるとして
1 頂点バッファをMapして毎回座標情報を書き換える
2 頂点バッファはいじらず、定数バッファに差分の移動量x,yを入れて更新し、毎回GPUに最終座標を足し引きさせる
感覚的には後者の方が良さそうなんですが、どっちが速いですかねぇ
自分でも実験したのですが、やり方悪いのか毎回100〜300msecくらい余裕で誤差が出て参ってます
誤差込みで、ほとんど変わらない印象なのでどっちでも良さそうではあるのですが、
ここまで来ると気になっちまって…… これからdirectxを始めようと思うんだけど
どのバージョンでやればいいか教えて下さい。
サイト見てるとdirect9が一番参考書が多くておすすめって書いてあるけど
このスレ読んでると11か12の方がいいですか? 12でええんでない?
もうwin7のサポートなくなるし 11が良いし、たぶんそれで十分。
12に行く前にUnityに行っちゃうかもねw >>257です。
画像の描画
画像でアニメーション
フォントの設置
カーソルがフォントの上に来たら光る
wavの再生
上記の事をやりたいです。
ほぼ無知なので
これからどのバージョンで勉強しても挫折すると思うので
direct 3d12使おうと思います。
申し訳ないですが
皆さんは、どうやってでdirect12の勉強をしていますか?
書籍の参考書がなかったのでお願いします。 画像データの各ピクセルの色情報ってどうすれば取得できますか? きちんと解説ある本を読んで勉強しないと難しいのに新しいバージョンは日本語の本がない
そして古い本に附属してるライブラリは今の環境だとすんなり使えなかったりするから結構詰んでる
素直にunity使うのが一番効率よく勉強できると思うわ
c++に拘るならdirectxやってもいいとおもうけど 日本語で出ても余計判りにくくなることの方が多い
日本語だから判りやすいとは限らない どっかの会社のページでやってる機械翻訳とかひでえしな ヘリコプターがシアトル付近を飛行中に、ナビゲーション・システムと
通信系が故障してしまい、現在位置を把握することができなくなって
しまった。機長は、近くに見えた高いビルにヘリコプターを寄せ、周りを
旋回しながら、副操縦士に「私は今どこにいますか?」と大きな紙に書かせ、
それをビルの中の人間に見せるように命じた。
ビルの中の人間は、大きな紙に「あなたは今、ヘリコプターの中です」と
書いて答えてきた。機長はにっこりと笑って手を振り、副操縦士に言った。
「あれはマイクロソフトの本社ビルだ。ここから東へ向かえば空港が
あるはずだ」
「どうしてマイクロソフトの本社ビルだと分かったんです?」
「奴らはいつも、技術的には完璧だが、まったく役に立たない答えしか
寄こさないからさ」 >>276
どこで観たか忘れたけどどこかで観たコピペ DirectX12のwindows7対応って今更何がしたいのかさっぱり理解出来ないな 常に我々の想像の斜め下を行くのがMicrosoftという会社なのだよ。 Windows10への移行が進まないのでまたWindows7からやり直す気になったんだな。
殊勝なこった。 ほんまマジ7永続化しないかな
10使ってるけどクソすぎて腹立ってる >>284
>>281はwindows7なんてもう3割切ってるのになんで今更って意味だったんだけどな 自分は、もう最新のDirectXの開発から身を引いている者なのですが、
下記のニュースにて、Windows7でDirectX Raytracingが
動作するのではと思いました。
ttps://www.4gamer.net/games/033/G003329/20190314031/ 質問です。
IDirect3DDevice9::Reset を呼び出すと、
D3DPOOL_SYSTEMMEM や D3DPOOL_SCRATCH で作成したテクスチャも消失しますか? いえ、すいません、
結局どっちかわからなかったもので・・・ >>293
>>294
ご回答ありがとうございます。
自分でも調べたところ、D3DPOOL_SYSTEMMEM で作成したテクスチャは内容が消失しているように思えました、
ただ、自分のプログラムが間違っているだけかもしれないですが・・・ はい、もう9で色々作ってしまっているのと、WindowsXPで動かしたいので >>297
うんまあ、どんな検証コード使ったのかしらんが結論がそれなら間違っとるな やはり間違ってますか。テクスチャ自体は消失してませんでしたが、
内容がおかしなグラフィックになっていました・・・
ご回答ありがとうございます。
>>294さんのご意見も聞きたいです。 おまいらアフォか
IDirect3DDevice9::Reset を呼び出すと、すべてのテクスチャ メモリ サーフェイスが消失し、管理下のテクスチャがビデオ メモリからフラッシュされ、すべてのステート情報が失われます。
ってヘルプに書いてあるだろ MSに限らずだけどフラグが明示されていないようなドキュメントの言い回しは鵜呑みにしない方が良いのよねえ
https://docs.microsoft.com/en-us/windows/desktop/direct3d9/lost-devices
> All video memory must be released before a device can be reset from a lost state to an operational state.
> This means that the application should release any swap chains created with IDirect3DDevice9::CreateAdditionalSwapChain
> and any resources placed in the D3DPOOL_DEFAULT memory class.
> The application need not release resources in the D3DPOOL_MANAGED or D3DPOOL_SYSTEMMEM memory classes. 情報ありがとうございます
ResetするのにD3DPOOL_SYSTEMMEMを解放する必要はないが、
テクスチャの内容は保障しないよって事なのかなぁ・・・ 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 79249
https://you-can-program.hatenablog.jp NOTE: As of 29 Mar 2019, SharpDX is no longer being under development or maintenance
終わってしまった DX11勉強中で定数バッファの扱いがよくわからないので教えて欲しいです
これは別々に複数個用意しておいて、シェーダと同様にその都度セットし直すものなのでしょうか?
ネットに落ちてるサンプルを色々と見ているのですが、カメラ行列だけを入れている物もあれば、併せて材質色やライティング用のパラメータを入れている物もあって混乱しています 必要なものをその都度送ればいいよ
セットしたシェーダが変わらない上に定数バッファの内容も変わらないなら送り直す必要は無いはず
変えたいときに送る >>312
回答ありがとうございます
土日の内に最低限の描画パイプラインを用意しておきたかったので助かります vs2019ほんとに軽くなってて驚いたんだけど
ここ数年中の人らは何やってんだってレベル この板にはMSを持ち上げる記事が多いな。
まるでMS社員が書いているかのようだ。 >>317
初心者スレなどにふらりと現れてスレとは無関係の稚拙な演説を垂れ流し
「MSには潰れて欲しい」などと呪詛を吐いて去っていく怨霊みたいな輩はよく見かける 【高感度が高い会社】
https://toyokeizai.net/articles/-/273471
1位セブンイレブン、2位トヨタ、3位無印良品、4位イオン、5位ニトリ、
27位ソニー、35位任天堂、
71位アップル ***
167位タカラトミー、169位セガ、
181位マイクロソフト ***
194位バンダイナムコゲームス、
197位コナミ、234位スクウェア・エニックス、251位カプコン、293位レベルファイブ 39位、東急ハンズ
40位、アマゾンジャパン ***
41位、楽天
42位、セイコー
43位、雪印メグミルク
44位、Google ***
45位、伊藤園 トヨタ>SONY>任天堂>amazon>楽天>セイコー>Google>アップル>
タカラトミー>セガ>マイクロソフト>バンダイナムコゲームス>
コナミ>スクウェア・エニックス>カプコン 感度が高いことを高感度という
高感度が高いとか危険が危ないとか
変な言葉遣いやめれ 実は漢字が間違っていただけで、「高感度」ではなくて、正しくは、
「好感度が高い会社」 すみませんつかぬことをお聞きしますが、
テクスチャをピクセル毎に分解して自由に動かしたいんです。
要はピクセル数分の?ゾリューションをもった板ポリに一ピクセルづつ
テキスチャを割り当てればいいんじゃないかと思ってるんですが、
shader内で書く際にどういった書き方をすればいいかどなたかご指南ただけませんか。
あと考え方が間違ってたら指摘して頂けると助かります。 何がしたいかわからんけどポイントスプライト使ってみるとか >>328
テクスチャは一枚です。
>>329
要はテクスチャを一ピクセル毎に分解して、それをパーティクル状に自由に動かしたいのです。
その前段階として、板ポリにテクスチャのピクセルを一つ一つ割り当てたいのです。 別に1ピクセルだろうが板ポリにUV座標していする一般的なスプライトと同じ実装で良いと思うが ポインスプライト実装でできました。
有難うございました! 行列計算ってのがよくわからないんですが、簡単にどういうことをするのか教えてください
((0,0,0)(0,0,0)(0,0,0))
こういう行列があったとしたら
vector3(10,10,10) += gyouretsu[1]
などとすることで、2番目の列にvector3が代入されるかと思います
これってなんの意味があるんですか?
3dにおいてどういうシチュエーションで必要7日イメージがワキません
godot使用です >>333
> 代入されるかと思います
されない
> なんの意味があるんですか?
自分からなんの意味もないコードを見せておいて何言ってんだ?
ここはDirectXスレだ
他のスレをあたれ
どのスレが適切かは自分で考えろ ブレンドステートオブジェクトのRenderTagetって
RenderTarget[0]以外使うにはどうすればいいですか。 すみません
よく考えたらいらなさそうなのでやっぱりいいです。
時間を取らせてしまったのなら申し訳ありません。 PIX for Windowsを使ってみたのですが、以下のようなエラーが出てしまいました。
・・・・
Frame 000001 ........POST: <S_OK><this=0x04f731e0> IDXGISwapChain::GetBuffer(0, IID_ID3D11Texture2D, 0x005EF60C)
Frame 000001 ........PRE: <this=0x04f2de08>ID3D10Texture2D::Map(6223320, Unknown D3D10_MAP, 6223436, 0xCCCCCCCC)
D3D11 CORRUPTION: ID3D10Texture2D::Map: Fourth parameter is corrupt or NULL. [ MISCELLANEOUS CORRUPTION #16: CORRUPTED_PARAMETER4]
An unhandled exception occurred.
Closing Run File
どうすれば改善できますか。
GetBufferのあたりはこんな感じです。
HRESULT hr;
// スワップ・チェインから最初のバック・バッファを取得する
ID3D11Texture2D* pBackBuffer; //バッファのアクセスに使うインターフェイス
hr = pSwapChain->GetBuffer(
0, // バック・バッファの番号
__uuidof(ID3D11Texture2D), // バッファにアクセスするインターフェイス
(LPVOID*)&pBackBuffer); // バッファを受け取る変数 ちなみに
ID3D10Texture2D::Mapを呼び出した覚えはないです
GetBufferなら使いました。 >>340
回答ありがとうございます。
ID3D10Texture2D::Mapの4つ目の引数がおかしいとエラーで出てきているのはわかるのですが、
引数が4つのMap関数が見当たらないのですが
引数が5つの奴ならあります。
HRESULT hr;
D3D11_MAPPED_SUBRESOURCE MappedResource;
hr = pImmediateContext->Map(
pCBuffer[ID], // マップするリソース
0, // サブリソースのインデックス番号
D3D11_MAP_WRITE_DISCARD, // 書き込みアクセス
0, //
&MappedResource); // データの書き込み先ポインタ
↑の内部でID3D10Texture2D::Mapが呼び出されていたりするのでしょうか。 しょーもないゲームを自分で作って周りに見せて喜んでるだけなので
バージョン8を使い続けてるけどヤバイ?急に動かなくなることある? >>343 今んとこはWin10でも元気に動いてる。マイクロソフトも非推奨? DirectX8だとSDKも8のSDKで作ってるの?あとVisual Studioのバージョンは?
まあVC6+DirectX SDKの7で作ったやつがソース変更ナシかほぼナシで
VS2008+DX11でビルドできた覚えがあるから大して意味のある質問ではないかもしれないけど パーティクルトレイルってやっぱ見てるだけでかっけーってなるんですけど、
実装するにはどういう考え方たしたらいいですか? >>347
有難う
ただパーティクルシステムを基にUnityの機能じゃなくてジオメトリシェーダかなんかで
プログラマブルにやりたいんです。
環境はvvvv、windows10 >実装するにはどういう考え方
が描いてあるから貼った >>344
もう11以降使ってない奴はマイクロソフトとかじゃなくAMDとか普通にバグあっても
直さない宣言してるからな 12でそれなりの描画が実装できたけど、やはり複雑。
ルートシグネチャ、シェーダ、ディスクリプタで器を決めて、頂点、索引、定数、テクスチャをGPUにロード。
ディスクリプタにテクスチャ、定数を入力にbind、描画ターゲットと深度ステンシルを出力にbind。
頂点と索引、シェーダを専用スロットに繋いで、コマンドリストに描画命令をいれる。
リストはあロケータから取り出して、 コマンドキューに入れる。
コマンドキューにシグナルいれて、フェンスで完了を確認する。
コマンドキューはスレッドに一つづつのインスタンスを持たせて、コマンドリストはコマンドキューに複数突っ込んでもよいが、複数のコマンドキューに容れてはならない。
描画ターゲットと深度ステンシルは、たんなるメモリだが、テクスチャとして扱うので、参照保護のためにアクセス前にはバリアを遷移させて状態を明示的に制御する。
マルチレイヤの合成、オフラインサーフェスへの描画、スワップチェインから取り出したバックバッファへの描画、present。
一枚書くだけでもしんどいな 字形は字形でFT使っているから、プロセッサメモリにレンダリングしてGPU上のテクスチャと宣言したメモリをマップしてアップロード。
それをパイプラインで扱うからテクスチャを参照する頂点バッファにテクスチャマップさせたポリゴンを容れる。
ウィンドウ処理(2d処理)を3dで扱うためひUV座標も手前で計算。
欲を出して、ウィジェットのパーツを1メッシュで扱えるようにして、1ウィジェットをジオメトリ扱いで管理し始めたら
吐きそうほどの複雑な実装になりました。
行数で30万ステップぐらいか?
セミコロンは、そろそろ100万いけそう それだけの苦労をして得られるパフォーマンスは、
DX11に比べて如何ほどなのだろうか・・・? 一概には言えない。
よく言われる通り、コマンドキューとコマンドリストを複数持って並列に実行させられるから、GPUを無駄なく使うようにしやすい。
200の入力を3回するには、600の計算量となるが、それをシーケンシャルにやれば600時間単位係り、それを並列に計算できるなら3並列で200時間単位にまで落とせるかも知れない。
描画バス、遅延レンダリング(深度バッファシャドウ)なんかは前段の計算が完了する要件があるから並列できない。
ジオメトリやメッシュを描画する部分が適用しやすい。
つまりフレームレートに影響するのは、ポリゴン数と描画ターゲットの解像度。APIセットが計算性能に与える影響は大きくない。
APIセットは、ドライバとハードウェア設計を楽にした上で、オープン規格でプログラムをコーディングしやすくするもの。
12の良いところは、GPUを直接触るような気持ちよさだと思う oggファイルをSlimDXのXAudio2で演奏しようとして、Ogg Vorbisを使って見たのですが、
ov_readで取得したchar *bufferをMultimedia::WaveStreamに入れこむ方法がわかりません
かなりスレ違いな質問だと思いましたが、適当なスレが見つからなかったので >>355
なにも考えずに、そのまま複写する。
オッグぽルヴィスから取り出した時点でPCMチャンクになるはず。
気にするべきはチャネル数、量子化ビット数、サンプリングレート、フレーム(チャンクのデータ量、バイト数)を合わせること。
なお、詰まりやすいのは、サンプリングレート。
単純にデバイスが対応していれば良いが、非対応なら自力でリサンプリングする必要。
基本は、デバイスが対応しているサンプリングレートのデータをなんからのコンバータで変換した音源を用意する。
ちなオーディオプレーヤーなんかを書く場合は、入力音源のサンプリングレートを絞ると使えないツールになるから、リサンプリングが必須。
リサンプリング機能は、インストールされたCODECに依存するが、ウィンドウず標準のコーデックは使いにくい。
商用ゲームがセガ?のAMのファームを使うのは、このあたりに関係してんのかも。
ちらうら WaveStreamを作成するときにヘッダー情報を入れてないだけでした。すんません
SlimDXのサンプルコードでは、AudioBufferにWaveStreamをそのまま入れているけど、ヘッダー情報を除いたStreamが正解ですよね?
ov_readで取得したデータでMemoryStreamを作成してAudioBufferに入れたら演奏できました おま環
前半のような勘違いをしてる知能だと後半でも勘違いしてる可能性大 >>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
繰り返しの質問になってしまい申し訳ないですがよろしくお願いします >>457
同じ質問を繰り返しても同じ答えにしかならないだろう。具体的に何が分からないか絞られるならそれについての答えが得られるかもしれないけど、全部分かりませんというなら前提となる知識が足りない。
今の君には無理なことだから諦めるか、理解できるようになるために頑張りな。 >>457
てかModdingが目当てなのに間違えてプログラム板で聞いたパターンじゃないの?
ddsからbmpとかに変換するツールならそこいらに転がってるから自作する必要ない >>459
アドバイスありがとうございます!
そうですよね。まずは前提知識の勉強から始めてみます。 >>460
Gimpで変換はできたのですがパーツごとに分ける方法が分からず。
境界線が曖昧で色域選択ではうまく切り取れませんでした。 完璧に切り分けるにはモデルのUV座標調べないといけないから難易度一気に上がるぞ
ある程度余分なとこも残して保存すればええやん
ていうかここはプログラミングの板だからスレチ
gimpのスレとかそのゲームのスレ池 >>456
そのうちチンチン勃たなくなる
射精しても気持ちよくならない >>457
blender 使って python で加工すると良いことがあるぞ >>465
もう3日もシコってない
もう終わりや、、 現在ゲーム用の画面分割に挑戦しているのですが、
ビューポートの座標をウィンドウの左上の端(0,0)から動かすと、ポリゴンが三角形に欠けてしまいます
常にそうなる訳ではなく特定の位置特定の角度からそのポリゴンを見るとそうなるといった状態です
原因解る方いらっしゃいましたら、教えていただけないでしょうか
1ループの中で二個のビューポートでそれぞれ一回ずつ描画しているので
一つ目のポート用の描画の際のレンダーステートの変更が二つ目の描画の際にリセットされておらず影響しているのかとも思ったのですが、
試しに一つのビューポートだけ描画してみた所やはり同じ問題が発生してしまいました
逆にどちらのビューポートの座標も左上の端に合わせた状態であれば
二回描画しても問題は発生しませんでした
少々解りにくくて申し訳ありませんが動画にしてみました
赤と青の平面を二枚前後に表示している状態で
https://dotup.org/uploda/dotup.org2056189.mp4.html
ビューポートを実行中に移動させてみる実験をしてみました
ビューポートの座標を(0,0)に近付ければ近づけるほど欠損する部分は減っていきます
https://dotup.org/uploda/dotup.org2056191.mp4.html ああT字の頂点が画面から消えるのと同じタイミングで三角形が発生してるな ありがとうございます
>>470
画角を広くしてみた所欠けにくくはなったのですが
やはり同じような問題が起きます
https://dotup.org/uploda/dotup.org2056348.mp4.html
>>470
制作環境はDirectX9を使用したものなのですが、
友人にアドバイスを求めた所、
DirectX9の決まった範囲以外の頂点やポリゴンを描画しない仕組みの予期しない動きが原因の可能性があると教えてくれました
>>471様のおっしゃられているように特定の頂点(?)が画面範囲外に行く事により
描画されなくなっているのかもしれません
一番下に緑色の地面は小さな四角形ポリゴンの集合で出来ており、
その上に大きく頂点を4つ置いて作った赤と青の四角形ポリゴンを置いている状態なのですが、
緑色の地面には問題が起きていない所からしても頂点が特定の範囲から外れる事が原因な気がします
根本的な解決が図れない様であれば、
上の赤と青の平面も細かい四角形の組み合わせで作る事で解決しようと思います シェーダーにバグがあるか
なんかミスしてると思うよ
ソース無いとコメントしようがない ポリゴン数が少ないからでは?
デバイス正規化座標から頂点の一つでも外にあれば、ラスタライズ対象から取り除いているような気がする。
この部分の実装に規格がどう定義しているのかは知らないけど。
問題となるあたりに1個の三角形を置くと切り分けできそう。 魔導書読んだらUnityやUnrealに対抗できますかね 日本の書籍に頼ってる時点で足の小指の爪の先のカス程にも及ばんよ Direct2DやDirectWriteに興味があるのですが、DirectX12とは異なるバージョン体系で、
1.3とかになるんでしょうか…… direct x ってどのくらい難しいですか?
例えば四角ポリゴンを表示するまでに1年かかるというレベルの難しさなんでしょうか
普段はblenderを使っています >>483
>>484
ありがとうございます
blenderのアドオンの場合、blenderの更新によって使えなくなる事が多いので、vs c++などで作っておけば後が楽かなと思ったことが動機です。
少しずつやっていきます。 あとblenderとDirectXはZ軸の方向が逆だったかも知れない ↑ありがとうございます。
調べたところ、モデリングツールはopenglが多いみたいですね。 描画コストの計算ってどのようにして行うのでしょうか?
GPUの性能から計算できるとか言われたのですが、
調べても検索にヒットしなくてよくわかりません。
バス数・SP数・動作Hz等からできるらしいのですが……
どなたかご教授願えないでしょうか? あっちゃんあんまり好きじゃなかったけど、プレゼン能力高いよね directx11のシェーダリフレクションについて質問です。
シェーダーの定数バッファのスロット番号情報ってシェーダーリフレクションで
取得できますか? すみません、自己解決しました!
普通に取得できました マイクロソフトのDirectX エンドユーザーランタイムWebインストーラのダウンロードダウンロードしたいのですが、どうしてもWEBページが開きません
当方windows10環境で広告ブロック機能をオフにしても、Chrome、Edgeで開くことが出来ませんでした >>496
丁度今MSのダウンロードセンター落ちてるっぽいぞ
あとここはプログラム板なので関係ない質問はWindows板でな >>497
ご丁寧にありがとうございました
スレチして申し訳ないですm(_ _)m IT掲示板群 ttp://x0000.net/forum.aspx?id=15
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
PS malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip JavaでdirectX使うには何から始めたら良いですか >>503
なるほどCでライブラリーを書くのかな?
作ったCのライブラリーで
VisualBASICからDirectXを呼び出して
C#のネットワーク経由でJavaを使うのかな
いろいろと大変そうです Java で DirectX は誰かが相当な労力かけてライブラリ作らないと無理
JNI、JNA とかあるけど、少なくともこの辺はあんまり良いライブラリじゃない
JNA はちゃんと管理されてないのか表記ブレすごい
やるなら JavaCPP だけど、どちらにせよ フル で DirectX の API 移植するなんて正気の沙汰じゃない glslでfractal treeは描けますか?
processingとの違いがいまいちわかりません >>508
すみませんありがとうございました。
マルチプラットフォーム 3DはUnityでJavaScript言語という結論にいたりました。 すみません、3Dゲームの背景に2D画像を表示させたいのですが
SpriteBatchを使った2D描画、の上から
ピクセルシェーダーを使った3DのDrawを重ねる方法はありますか? >>512に追記で、そもそも
SpriteBatchの Begin をした段階で
3DでDrawしたものが消えてしまうのですが
2Dと3D描画の両立は出来ないのでしょうか ん?
2Dの上に3Dを描画したいのか3Dの上に2Dを描画したいのかどっちや
あとSpriteBatchってDirectXTKのSpriteBatch? 2Dで描いたものをtextureにloadして3Dに貼るのが楽 >>514
そうですDirectXTKのSpriteBatchです
背景にSpriteの2Dの一枚絵、その手前に3Dモデルを表示したいと考えたのですが
SpriteのBeginをすると3Dモデルが表示されなくなる現象が発生して困っています 自己解決しました
SpriteBatchのBeginをすると
そこまでにデバイスコンテキストにセットした情報がリセットされるようです
コンテキスト初期化⇒Sprite描画⇒コンテキスト初期化⇒3D描画で対処できました
ありがとうございました すいません、このスレの本旨とは違う質問かもしれませんが、自分で調べても解決できなかったので教えてください。
自分のプレイしているゲームがdxいくつで動いているものなのか知るにはどうしたらいいのでしょうか?
今までは一々ゲーム毎にググっていたのですが、出来れば自力で解決できるようになりたいです。
自分なりに調べてはみたのですが、PCにインストールされているdxのバージョンを確認する方法ばかりで見付けられませんでした。 DXをアンインストールすれば良いよ
動かなくなったら使ってるってわかるさ 新しいバージョンのランタイムで古いバージョンのAPIを動かしてたりとか
ひとつのゲームで混在してることもあるので
このゲームはこのバージョン!と決めつける情報ってのは割と難しいのよね
Process Explolerとかで読み込まれているモジュール見て
d3d**.dllの一番新しいのが該当とか雑に調べることはできるけど >>520
なるほど!
ありがとうございます
そういうツールを探していたのですが、どういう調べ方をしたらいいのか分からなかったので助かりました dx9とdx11とdx12のモジュールが全部ロードされてても
dx9しか使ってなかったりする可能性もある DirectX9.0cって32bitのみ?64bitバージョンって作れたっけ? >>526
どうも
>DirectX 9の定期的な32ビット/ 64ビットハイブリッドアップデートは、2004年10月に4.09.00.0904(DX 9.0cのRC0)から始まり、
>2007年8月まで隔月で、その後は四半期ごとにリリースされました。最後の定期的な更新は2010年6月にリリースされました Directx12初心者です
テクスチャを貼った四角形を表示出来るところまで出来ました
ここから、他にもポイントリスト等、テクスチャを使わない物も同時に表示したいです
その場合、ポイントリスト用のシェーダーファイルを新規に作らなければいけないのでしょうか? D3D11は極めるまで行ったが
12はやる気が起きない >>528
シェーダ別けたくなかったら白の1x1テクスチャでも作ってそれを割り当てればよろし >>532
ありがとうございます
頂点情報が違う場合は、基本的にシェーダーファイルを分ける必要があるということですね すみません質問なのですが
仮にDirectX11 を使ってローカル座標がそれぞれ異なる
100個のオブジェクトを描画する時
1.頂点バッファを100個生成、オブジェクト事に頂点バッファを切り替えて描画
2.頂点バッファを1個生成、オブジェクト事に頂点バッファの値を MAP,UNMAP で書き換えて描画
1、2でどちらが早いのでしょうか、
また複数のモデルを描画する時は1、2のどちらを使うのが定石とかはありますか? 定石が知りたいです
だいたいこうするのが普通、とかそういう指標があれば やはり頂点バッファを沢山生成すると
何かあるのでしょうか?
map,unmapも気にするほどじゃないって事ですかね 理解しました、2ですね
1だと同じオブジェを複数描画して、それぞれのローカル座標とUVが変わる時に
ダメになりますね
有難うございました ダメになるってのはおかしい気がする
やりたい事がハッキリ分からないからなんともいえないけど
1はメモリを使う方法で、残メモリが許す限り普通は1じゃね
2はCPUパワー使う方法で、ロックのコストも馬鹿にならない
処理速度が許容範囲に収まるならいいけど、今の時代無駄な気が
オブジェクトより、マテリアルやシェーダ毎に処理をまとめてDrawの発行数抑えた方が良いよ
固定パイプラインの時代じゃないし、ローカル変換もまとめてGPUにやらせるんや そういう最適化で最も気にしなきゃならんことは
GPUコアを止めちゃならんということ。
コアの運転が滞りなく連続で動いていることを最適と考えろ。
お前の例の1はVBの構築は初回のみの為コアの運転を妨げることはない。
逆に例の2は、ロックしている最中にコアの運転と衝突しストールさせる可能性がある。
よって2は1よりも悪手と言える。
ただしロックのそういった問題は、すでに対策が考えられていて
実際は表面化しにくいだろう。 >>540-541
偉そうに振舞いたいのは解るんですが
一般論を述べられてるだけで何の参考にもならないです
>>541
あと初対面の人間にお前は無いだろ、クソが >>540
ローカル変換を、まとめてGPUにやらすってどういうこと
そこだけ教えてくれね? 定石が知りたいとか言っといて
一般論は駄目って、大丈夫かお前 >>545
俺が例として1と2を分けた時点で
メモリを多く確保するか、CPUの処理を増やすかなんて事が
解らねーとでも思ったのか?
ガタガタ何を書いてんのかと思えば、何の答えも出してねーだろ
定石があるなら、どっちがそうだと答えればいいだろ
どっちも違うなら、その方法を教えろよと、ただそれだけでいいだろ
下手に出たからって舐めてんじゃねーよ >>545
テメーが何で絡んできたのか知らねーけど
定石について誰か答えてんのかよ
役にたたねーゴミだな お前のキレ芸のおかげで
このスレが盛り上がる効果は
良いと思うが
俺はだるくて付き合えんわ
他のデュエリスト参加しろボケ 盛り上がるわけねーだろ…
人が寄り付かなくなるだけ ジャンケンするつもりなんてハナからねーよ
つーかなんで誰かと争うって話になってんだよ
質問して、まともな答えが出れば何も文句はねーよ
スレ見てる時間までに、答えが出なかったから、自己解決ありがとうございました
で話題を閉めたのに、答えも書かずに上から目線で因縁だけ付けてきたヤツが居たから
指摘してやっただけだよ それでも良いけど
回答を引き出せないのも実力だな
逆のことしてるって気付け >>544
ここまで言われて教える気にはならんなw 役に立たないゴミしか居ないんだな
先に仕掛けてきたのはどっちなのかレスみれば解るだろ 者 レ 同 争
同 ベ じ い
士 ル _ は
で の _/ | `
し _/・ (⌒) _
か ∠((⌒/ノ_/ |⌒)
発 /  ̄/\_丿・ヽ~
生 /  ̄ノニ\_ V、>
し / | / /
な |⌒Y ∧ | ヽ
い 人 |ノ |/⌒ |
!!|∧ /ヽ /( _ノ|
/ |||く<、\ヽ\ヽ
/ ノヽ二)\(二_ノ_ノ\\
 ̄  ̄
仕掛けたゴミがうんこマンなら乗ったゴミもうんこマン解るだろ >>558
レスの流れをみてみると、最初に攻撃的、感情的な物言いを始めたのは>>543だな。
何かスイッチ入って豹変しちゃったのか? SIer業界がブラックな理由を解説する。エンジニアは自社開発をしているWeb業界がオススメ!
https://www.youtube.com/watch?v=iy4nnAI9og4
エンジニアの仕事が稼げる理由とは?プログラミングスキルと
仕事の需要は比例しないので、実は技術力が低くても稼ぐことができる!
https://www.youtube.com/watch?v=82Bs-NH8jAM
通勤時間が長い人ほど無能説。家賃節約とか言っている暇があったら、
会社の近くに引っ越して浮いた時間に副業したほうがお金も貯まるし強くなれる。
https://www.youtube.com/watch?v=mt6K1RJnk6I
プログラミングに英語は必要か?に対する明確な答え
https://www.youtube.com/watch?v=WWULJbVECKU
私がヤフーを辞めた理由
https://www.youtube.com/watch?v=-G-7Hc3rJw8
【業界研究】IT業界でひと括りにするのは危険。SIer、Web制作、
アプリ開発で仕事内容が全く違います。【就活・転職】
https://www.youtube.com/watch?v=_IJQ2iBkf4w Unity で ミクさんとかキズナアイとかと遊ぶスレはどこ? >>562
こっちへおいで
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 [無断転載禁止]©2ch.net
http://itest.5ch.net/mevius/test/read.cgi/tech/1478142101/l50 拡大縮小をしないスキニング処理は問題なくできるのですが、
拡大縮小を入れると途端にうまくいきません。
原因はどういったことでうまく行かないのか教えていただけないでしょうか?
以下はスキニング行列の計算を行っているコードになります。
void UpdateTransformMatrix(){
m_mCurrentLocalMatrix = Math::Matrix::Transform( m_vCurrentScale, m_vCurrentRotation, m_vCurrentPosition );
m_mCurrentGlobalMatrix = m_mCurrentLocalMatrix * InitMatrix;
if( !IsRootBone() )
m_mCurrentGlobalMatrix *= ParentBone->GlobalMatrix;
m_mCurrentPoseMatrix = OffsetMatrix * m_mCurrentGlobalMatrix;
// 子を更新
for( auto& it : Children )
it->UpdateTransformMatrix();
} 答えてやりたいけどこの間の奴っぽくてヤダな
質問内容の段階が似てるw まーまず動かそうとしてるモデルの
ファイル形式は何?
それによって違ってくるので >566
MMD用のモデルのPMXで実装しています。
挙動を調べていたのですが、
例えば肩のボーンのZのサイズだけを変えたら
その子供のボーンに連動しているメッシュがグチャグチャになり、
しかしXYZのサイズを一緒の数値にすればグチャグチャにならず、
ちゃんと子供のボーンに連動しているメッシュも正しく拡大されて大きくなります。 >>565
+1
答えようと思ったけどそう思ってスルーしてた >>568
私はやった事ないのでわかりませんが推測として書きます、
おそらく拡大縮小はオブジェクト原点を基点として行われていると感じます。
拡大縮小の操作によってローカル座標原点が変換されて移動してしまう事に起因するのではないかと考えました。
何かのヒントになれば幸いです。 動的シェーダーリンクっていうのを使って頂点カラーを使う関数とテクスチャから色を取得する関数を切り替えているんだが、
頂点カラーを使う方の関数を設定した状態で描画すると以下の警告が出る。
D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: The Pixel Shader unit expects a Sampler to be set at Slot 0, but none is bound. This is perfectly valid, as a NULL Sampler maps to default Sampler state. However, the developer may not want to rely on the defaults. [ EXECUTION WARNING #352: DEVICE_DRAW_SAMPLER_NOT_SET]
使用する関数を切り替えていてもサンプラーを使っているなら必ず設定しなければならんのかコレ?
誰か教えて下しあ(´・ω・`) 動的シェーダリンクであるかに関わらずシェーダ内でサンプラステートが宣言されてると判定されれば出る警告
まあ書いてあるとおりスロットに割り当てなくてもいいけど本当に忘れてない?大丈夫?おっ揉?
というただのお節介なのでデバッグランタイム以外ではまったく影響はない
デバッグ出力が汚染されるほど出てくるなら素直にダミーのサンプラ設定しときゃいいんじゃね まじかよ(´・ω・`)
素直にダミーのサンプラー入れておくか・・・・・・
ありがとう。 この警告を消そうと思うと、
テクスチャとか使う時にセットして
使い終わったらNULLをセットする
いわゆる真っ当な組み方になってしまうんだが
Direct3Dのステートマシンって仕組みには
合わなくなってしまうんだよな
違和感を感じながらオレも組んでる 11までのコマンド即時実行ならワールド行列用のバッファが一個でいいけどコマンドバッファ方式だとどうしたらいいと思う?モデルごとにバッファ持たせる? Eric Engstrom氏が崩御されましたね(´・ω・`)合掌。 昔 C で DX9 で書いて Win10 上で動いていたプログラムが
久しぶりに実行しようとしたら動かなくなっていた
dll が見つかりませんとかのエラーも出ずに突然死する
exe の日付は 2016年8月 (たぶん最後にコンパイルした日) なのだが
当時は確かに Win10 上で動いていた記憶がある
何かアプデとかで仕様変わったとか情報ありますか? d3dx9_**.dllうんちゃらってエラーなら単にそのPCにDirectXランタイムがインストールされてないだけ 同じ PC ですよ
あと
>dll が見つかりませんとかのエラーも出ずに
は「dll が見つかりません」状態ではないですし すまんこ全然質問読んでなかったわ
D3D9はWin10でも依然として動くけど微妙な互換性の問題も少なくないのでそれだけじゃなんとも Texture に使ってた画像のサイズを変えたら
途中まで動いてから死ぬようになりましたω
2 の n乗の制限があった頃なので
多分ぬるぽで死んでるのだと思います
なんとか解決の糸口は判りました
ほんとうにありがとうございました 参照している d3d9.dll を SysWOW64/System32 にある物に変えたら
2 の n乗以外の Texture でも正常に動作するようになりました
ついでに動作中に死ぬことも無くなりました
本当にありがとうございました >>586
自力解決の報告ありがとうございます!
俺も頭のどこかにとどめておきます。わずかながら手持ちにDX9世代のソースもあるので 本来は試せばすぐわかることだと思うんですが
ちょっと数日ほど自分で試せないので質問させて下さい
D3D12_RESOURCE_DESCで指定したDimensionがtextureのものに対してconstant buffer viewを作ったり、
shader resource viewで異なるDimensionを指定することは可能なのでしょうか? 古いバージョンの話が出てるので便乗で質問。
version7,8,9くらいのゲームをフルスピードで動かすと
古いビデオカードでも新しいビデオカードでも速度殆ど変わらないんだよね。
どっちもFps300前後でしか動かない。倍くらい行きそうだけど全然変わらない。
まるで制限がかかってるような感じ。古いversionだと動作に制限でもあるの? 無いよ
CPU律速になっててGPU関係ないとかそんなオチでそ >>590
そうなのかもしれない。もうちょっと調べてみる。ありがとう。 低レベルな質問でごめんだけど
D3DXMATRIX a,b;
a *= b;
この中身はどうなってるんでしょうか?
a.m[4][4]とb.m[4][4]をどう乗算してるんでしょうか? >>594
展開したらこうなることがわかりました
この部分が遅いのでもっと速くする方法ないかなと思いまして
void MatrixMultiply(MATRIX *pOut, MATRIX *pM1, MATRIX *pM2)
{
int x, y;
float mx0, mx1, mx2, mx3;
float *p1, *p2;
MATRIX mat;
MATRIX *pRetOut;
pRetOut = &mat;
for(y = 0; y < 4; y++) {
p1 = pM1->m[y];
mx0 = *p1;
mx1 = *(p1+1);
mx2 = *(p1+2);
mx3 = *(p1+3);
p2 = pRetOut->m[y];
for(x = 0; x < 4; x++) {
*p2 = mx0 * (pM2->m[0][x]) + mx1 * (pM2->m[1][x]) +
mx2 * (pM2->m[2][x]) + mx3 * (pM2->m[3][x]);
p2++;
}
}
*pOut = mat;
} >>597
ゲームのプログラム自体あまりやった事なく
人が書いたコードを弄って速くならないかなと思ってまして Ruby のNArray みたいなベクトル演算すれば、Octave 並みに速くなる >>594
MSの実装が見たいならd3dx9mathの後継にあたるDirectXMathのXMMatrixMultiplyを参照
DirectX SDKならxnamathmatrix.inl、Windows SDKならDirectXMathMatrix.inlの中にある 4x4乗算関数の処理時間なんて微々たるもんだと思うが
これが遅いと判断した理由ってなんだろう?
速い遅いなんて相対的なもんだし基準がなければ判断出来ないと思うが
何とくらべたんだ? 計算に時間が掛かってるんじゃなくて
データ移動に時間が掛かってると予想 DirectX懐かしいな
最近はunityとかあるから 昔作ったゲームのコード触ってるんだけど(Ver7.0)
ウィンドウモードでもディスプレイの解像度変更するとテクスチャバッファがロストするの困る。
なんとかならないものか。 >>611
ロストが面倒なのでウィンドウモードで動かしてたはずだったが
ウィンドウモードでも起こる事があるんだね。
仕方ないのでロストが発生したら座標とかフラグとか一部のデータだけ残して
初期化処理をまるっとやる事にしたよ。 DirectXの機能レベルがよくわかりません。
例えば 11_0 までの機能を使う場合に
DX11とDX12で何か違いはあるんですか? >>613
D3D11とD3D12は別モノのAPI
機能レベルが異なると同じAPI上でも一部の機能に差異がある
低い機能レベルを指定してデバイスを作成すれば古いハードウェアで動かせる可能性がある 機能レベルは、どの機能までサポートできてるかの指標に過ぎない。
DX11とDX12はAPIが違うから、記述方法や実行時のパフォーマンス等も異なる。
という認識であってますか? 最近古いプログラムの手入れをしてるのだが
ver7.0だと2048x1280以上の解像度で初期化しようとすると必ず失敗する
これはもうどうしようもないのかな
殆ど仲間内だけで使うものなので、裏技的な解決でもいいので
分かる人がいたらおしえて Direct3D9なんだけどCreateDeviceのD3DPRESENT_PARAMETERSのPresentationIntervalの値で
Vsyncするかどうか切り替えられるのは分かったんだけど、デバイス作成後に切り替えたい場合はどうすればいいんでしょうか?
デバイスに変更出来るようなメソッドが見当たらないので困ってます。いちいち再初期化しないといけないんでしょうか? >>623
デバイスの再作成ってかResetは必要
ウィンドウモードならCreateAddtionalSwapChainの方で作って
切り替える時にスワップチェインだけ再作成って手もあるけど
D3D10.x以降ならPresent時にvsync待つか指定するだけ >>624
そうなんだー面倒だな。
フルスクリーンは使わないのでスワップチェインの方法でやってみます。
ありがとう。 スワップチェインで切り替えようとしたんだけど、このコードでは上手くいかない… 真っ暗…
lpSwapChain[1]をlpSwapChain[0]に変えると正しく描画される。これじゃダメなんでしょうか?
D3DPresentParam.BackBufferWidth = Width;
D3DPresentParam.BackBufferHeight = Height;
D3DPresentParam.BackBufferFormat = D3DFMT_A8R8G8B8;
D3DPresentParam.BackBufferCount = BackCount;
D3DPresentParam.MultiSampleType = D3DMULTISAMPLE_NONE
D3DPresentParam.MultiSampleQuality = 0;
D3DPresentParam.SwapEffect = D3DSWAPEFFECT_DISCARD;
D3DPresentParam.hDeviceWindow = hWnd;
D3DPresentParam.Windowed = TRUE;
D3DPresentParam.EnableAutoDepthStencil = FALSE;
D3DPresentParam.AutoDepthStencilFormat = D3DFMT_D24S8;
D3DPresentParam.Flags = 0;
D3DPresentParam.FullScreen_RefreshRateInHz = 0;
D3DPresentParam.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &D3DPresentParam, &lpD3DDev);
lpD3DDev->GetSwapChain(0, &lpSwapChain[0]);
D3DPresentParam.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
lpD3DDev->CreateAdditionalSwapChain(&D3DPresentParam, &lpSwapChain[1]);
lpSwapChain[1]->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &lpBackBuffer);
lpD3DDev->SetRenderTarget(0, lpBackBuffer);
lpBackBuffer->Release();
lpD3DDev->BeginScene();
ここで色々描画
lpD3DDev->EndScene();
lpD3DDev->Present(NULL, NULL, NULL, NULL); >>626
デバイスの暗黙のスワップチェインと追加のスワップチェインに同じウィンドウ指定してるからかな?
CreateDeviceに渡すウィンドウハンドルを
CreateWindowEx(WS_EX_NOACTIVATE, "STATIC", windowName, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, HWND_MESSAGE, NULL, GetModuleHandle(NULL), NULL);
とかで作ったダミーウィンドウを指定してCreateAddtionalSwapChainに渡すのだけ実際のウィンドウハンドルを指定してみて >>627
やってみましたが、真っ暗で表示出来ませんでした。
これやっぱ、それぞれ違うウィンドウハンドル指定して
そのウィンドウが表示されてないと無理なんでしょうかね… >>626
わかった… 最後スワップチェインからPresentしてないのが原因だった
>>627さん、ありがとうございました。 >>619
7がなにかはわからんが、dx9時代だとテクスチャの辺の長さは2の正数乗がマスト、最大テクスチャ寸法にもデバイスドライバが定める制限があるはず。
今だとテクスチャは、単純なメモリ配列だが、その頃は固定機能パイプラインの設計したメタファに縛られたはず。 自作プログラム、Discordで画面共有した後、ウィンドウサイズを変更すると上手く動かなくなる
画面共有しなければ普通に動くし、共有してもウィンドウサイズ変更しなければ普通に動く。
変更して動かなくなる時はこんなの吐いてた↓
[09:38:37.302][PID36260] Hooked D3D9
'test.exe' (Win32): 'C:\Windows\SysWOW64\D3DCompiler_47.dll' が読み込まれました。
[09:38:37.375][PID36260] Hooked DXGI
[09:38:37.956][PID36260] PresentHandler(D3D9) created
[09:38:38.012][PID36260] HookReset: hooked reset
[09:38:38.012][PID36260] Attempting to use shared textures
[09:38:38.012][PID36260] CreateTexture succeeded! sharedTextureHandle: C00086C2
[09:38:38.012][PID36260] CreateTexture succeeded! sharedTextureHandle: 80001682
[09:38:38.013][PID36260] CreateTexture succeeded! sharedTextureHandle: 80008B02
[09:38:38.013][PID36260] D3D9State::InitOverlay: initialized to 05F9CE20 (window 00113BA8: 1920x1080)
[09:38:48.227][PID36260] D3D9State::ResetDevice: releasing resources
[09:38:48.228][PID36260] Attempting to use shared textures
[09:38:48.228][PID36260] CreateTexture succeeded! sharedTextureHandle: C0006B82
[09:38:48.228][PID36260] CreateTexture succeeded! sharedTextureHandle: 80000B42
[09:38:48.228][PID36260] CreateTexture succeeded! sharedTextureHandle: C0002102
[09:38:48.229][PID36260] InitOverlay::CheckDevice: failed to create texture: 0x8876086c
[09:38:48.229][PID36260] D3D9State::ResetDevice: releasing resources
ResetDeviceとあるのでデバイスロストが起こってるっぽい?
エラーチェックしてもプロセスからは特に普通。誰か分かる人教えて! >>635
以前はこんなことなかったので最近何か変わったのかなと。
困るなー あと9より古いバージョンのDirectXでも大丈夫みたい。 >>635
どこで止まってるのかわかった。
特にデバイスロストは起こってないようだった。
初期化し直しても特に変わらず。
画面共有後、ウィンドウを最大化した後に以下のコードが実行されるとそこで止まる。
特にエラーを返すわけでもなくここから戻って来なくなる。
lpD3DDev->CreateTexture(Width, Height, 0, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, &lpTexture, NULL)
とにかく画面共有した後にウィンドウサイズを弄るともうダメ。
共有前に最大化して共有してその後いじらなかったら大丈夫。
だれか解決策教えて! Hooked D3D9とかsharedTextureHandleとかそれDiscord側のログか?
Discord側がゲームプロセスの共有テクスチャ掴んだままゲーム側のスワップチェイン変更でReset誘発→
Discord側が検出して共有テクスチャ作り直そうとするがなんらかの理由で失敗
みたいな流れに見えるんで単にDiscordに聞け案件としか思えんが >>638
やっぱこれはDiscord側の問題なんですかね。
今のところこちらからはどうしようもないので、今度問い合わせてみます。 ミップマップを自動生成して使おうと思ってるんですが
これってテクスチャは32bitじゃないと動かないんですかね?
16bitで作るとミップマップが作動しないので。 >>640
どのバージョンの話か知らんがCheckDeviceFormatやCheckFormatSupportでダメ出しされてるならそーなんじゃねえの
例えばハードウェアが9_x世代だとそれなりにフォーマットの制限がある
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-generatemips >>640
そんなの知るか!ばーーーーーーーーーーーーーーーーーか >>641
制限のせいなんでしょうね。
ありがとうございます。 VisualStudioでソース更新してビルドかけると
時々FXファイルもリコンパイルかかる時があるんだけど何で?
当然FXファイルは更新してないんで無意味なんだが
何で?
何で?
何で? テクスチャ座標で1を0に、0を1にする計算式教えて!
教えて!
教えて!
教えて!
早くしろぉオラァッ!! ( t - 1 ) * -1 これでいけるんかなぁ?
試してみるわ >>648
お前はまあまあ頭いいやんけ
俺の精子ぐらいあるわ
>>649
お前はクルパーやな
精進せえや 深度バッファ回りでデバイスで変化する事象が出ています。
amdだと自然なのがnvだと手前のオブジェクトが後ろと判定される。
一定距離まで近づくと手前のオブジェクトのサーフェ〜すの一部がラスタライズされず、遠くなると
ああそうか。浮動小数点精度問題か、これ 今現在DirectSoundのIDirectSoundNotify8を使って、
もしWAVファイルが最後まで再生されたら再生位置を任意の位置に持ってくるというプログラムを作っています。
そのためにIDirectSoundNotify8を使えば便利そうなんですが、使い方がわかりません。
というよりもイベントの処理の仕方がわかりません。
オブジェクトの取得まではできたんですがね...
↓ソースファイル
https://drive.google.com/file/d/1LgJn_dY7nFoWGx1NiyC4kXxXZ8O5mBTq/view?usp=sharing 球を平面に押し付けると、その境界は円になるよね
この円の半径がわかってる時、球の半径ってどう求めれば良い? 境界は点だし、その半径は0だし、ちょっと何言ってるか分からない。
なによりなぜ上から目線なのか。 球を平面でカットした場合ってこと
どうカットしても断面は円になるでしょ?
つーかここまで説明されなきゃわからんとか
レベル低っ!! 上から目線って何?
私は上から目線で生意気に質問されてるから
答えないから!
わからないんじゃなくて答えないだけだから!ってこと?
ダサww その球の中心か、断面の円の中心とそこから突き抜けた距離とかが分かればいけそうだけど
円の半径だけじゃ無理そう >>654
それに加えて球の中心と平面との距離が分かれば、中学生の数学で解けるぞ 球を平面に押し付けると → 球を平面でカット
一言も説明してない自分の妄想が相手に伝わらないと相手のせいにする。
かなりのキチガイだから相手にしないほうがいい。
すげー馬鹿なのに上から目線だし。 >>659
ユーが正解だな
円の半径じゃ足りなくて
もう1つ値が必要だったな
みんな俺の為に頑張って調べて大変だったな!
ありがとな!でも次からはもっと早く調べてこいよな! とんとん
とんとん
ごめんください。布教に来ました。
・mixamo(ボーンアニメーションのモーションデータがあるよ。あどべid登録必須。モーションデータは無料)
・BOMTH(pixivの露店さいと。モデルデータボーン入りが売ってる)
福音 質問です。
やりたいこととしては、GPUベースのパーティクルアルゴリズムにおいて(これは出来てます)、
あるパーティクルAの一フレーム前の座標と、パーティクルAの今のフレームの座標と、
バーティクルBの今のフレームの座標を取得して、ジオメトリシェーダでポリゴンを生成していくアルゴリズムを作ることです。
そのためには一フレーム前のパーティクルAの座標を取得しないといけないと思うのですが、
どうやったらいいでしょうか。つまり過去のフレームを格納しておくような方法はありますでしょうか。
どうぞよろしくお願いいたします。 DirectX11以前だと1フレーム前の情報を保存する為には、レンダリングターゲットテクスチャかストリームアウトプットぐらいしかないと思うが
他に何かあるかな? DirectXを馬鹿にするんじゃねぇぇぇ!!
俺が馬鹿みてえだろうが!! そうはいってもなあ
Unutyとかにかなり流出してるからなあ DXlib って DirectX の進化について行ってる? 円の半径 = cos( π * 球と平面の距離 / 球の半径 ) * 球の半径 かな? こういうのパソコンに聞いて答えてくれるようにならんかなぁ 10年前ならともかくUnityをを使わない理由が全く分からん
エンジン作ってるならまだしもゲーム作ってるんだよな? Unityは重いしプレイする側から相当嫌われてるから自作エンジン作る必要があるんだよ
なお俺には到底無理だからUnityつかう >>681
文句のひとつも言いたいとこだけど
アプリを起動する度にシャドウマップテクスチャに描かれたり描かれなかったりする
謎現象が起きてて、何時間デバッグしても得られるもん無くて
俺はゲームもろくに作らずなにやってんだろと思ってしまってる.. >>684
C++ じゃなくて C 用で便利なイマドキの 3D framework 教えてくれまいか >>686
sinder とか siv3d とか cocos2d とかあるけど
こいつらは c++ 大前提だからなぁ
C 用を欲しているってことはオブジェクト指向型じゃない方がいいんだよな?
それなら基本関数型の設計になってる DxLib がいいんじゃない? モダンを求めてレガシー言語のCを要求とはこれ如何に プリコネもウマ娘もunityですぜ親分方
優しい世界へ飛び出そうぜ >>692
DxLib 側はC++ で実装されてるだろうけどゲーム作る側は
ほぼ C だけの知識 ( クラスとか解らなくても ) 作れるようになってるよ
ただ、フレームワークかといわれると違うかと
名前通り『ライブラリ』でAPI群が提供されてる感じ
もちろん C++ でも作れるぜ!b >>685
やっとバグを特定した
4日かかった
表す価値もないしょーもない内容だった
アホやなあワイは、、 Cっぽい書き方で作るならほぼDxLib一択だと思うわ >>697
頑張ってる人にそういうこと言うなよ
>>694
プログラマならトライアンドエラーを繰り返して上達するんだから
あきらめずにバグ修正できたのは立派だとおもうよ
どういう理由でバグってたのか教えてもらえるとうれしい あるあるw
手こずったバグの原因がわかったときの自己嫌悪
ぶん殴ってやろうかコイツって 会社のすげえプログラマの人とか、バグで全然止まらないんだよな。
俺らとか下手したら2,3日悩んだりするじゃん?そういうのが全くない。バグあってもすぐ解決する。どんな頭の構造してんだろ。 俺「解決するまで寝ないから実質その日のうちに解決してる(キリッ」 バグコード描いてる時点で三流
プログラマとしては全然すごくない Direct3D11のキューブマップの仕様がわからんので教えてくだし
HLSLでキューブマップを読みだすには3次元ベクトルを使うが
キューブマップの配列から読み出すにはどう書けばいいの?
例えばキューブマップ配列の3番から読み出す場合は
以下をどう変えればいい?
v4_diffuse.rgb = g_tex_cube.Sample( g_sam_linear, v3_reflect_W).rgb; 後、CubeMapGSサンプルをみていると
キューブマップを作る際の方法が次の2パターンあるが
1,DrawIndexedInstanced()で同じメッシュを6回描画し、それぞれキューブマップの6面に書き出す
2,メッシュを1回描画し、ジオメトリシェーダでキューブマップの6面に書き出す
どっちも結局は一緒だと思うけど1をやるメリットって何かある?
2だけ考えれば良いのかな? 書いといてなんだけど708わかったわ
TextureCubeArrayってそれ用のオブジェクトがあって
4次元ベクトルでサンプリングするんやな
スレ汚ししちまって正直すまんこかったな 意味の違いを教えてください
1.ノルム
2.norm
3.法線
4.normal
5.normalize 登録されているビューポートの数はID3D11DeviceContext::RSGetViewports()で取得できるけど
登録されているレンダーターゲットビューの数はID3D11DeviceContext::OMGetRenderTargets()では
取得できない
ビューの数はどうやって取得するのか? dx12での2Dオーバーレイについて訊きたい
公式見るとD3D11On12使うみたいだけどうまくいかない
2Dが描画された直後に一瞬アニメーションが止まるし、
2D描画後に生成した3Dオブジェクトが描画されない(オブジェクト分のメモリはちゃんと増えてる)
うまくいってる人どうやってるか教えてくれD3D11On12じゃなくてもいいから glVertex3dとglTexCoord3dって毎回一対一で使わないとだめ?
多対多みたいに
glTexCoord3d
glTexCoord3d
glTexCoord3d
してから
glVertex3d
glVertex3d
glVertex3d
ってやっても大丈夫?
あとglTexCoord3d省略したときのUVって何が設定されるの?ランダム?最後の値を維持? >>714
D3D11On12 は使わないかな
2D を 3D の後ろに描画する際
2D 描画後に Zバッファクリアしてる?
2D 描画するなら板ポリ作って正射影行列でワールド行列作るのが
一般的だと思うよ >>720
あ、やっぱり使わないんだ
いろいろ試したけど挙動的にZバッファは関係なさそう
まあ俺が正しく使えてないだけだろう
どっちにしても素直に板ポリ使うわありがとう >>723
同じネタ思い付いたがあまりにも馬鹿っぽいのとスレ消費無駄なのでやめておいた >>726
あ、やっぱり使わないんだ
いろいろ試したけど挙動的にZバッファは関係なさそう
まあ俺が正しく使えてないだけだろう
どっちにしても素直にポリ袋使うわありがとう 馬鹿が書評描くと評価下がる例
https://www.あまzon.co.jp/dp/4863543549 ゲームインストールするときに、 directXって毎回入れたほうがいいの? Zバッファをテクスチャにしたいんだけど簡単な方法ないでしょうか? IDirect3DDevice9::GetRenderTargetDataを使って
別のテクスチャの領域にコピーとかできるんですかね?
帰ったらやってみます。 D3DFMT_D24S8で深度バッファ作成して
SetTextureで設定してレンダリングしても
シェーダーからZ値が取れないの? >>738
ここのサンプルみながら一旦テクスチャ用に確保した領域にZ値を書き込んでからやる事にしました。
http://marupeke296.com/DXGSmp_No_43_ZValueRendering.html
ただ色々やってるんですけどイマイチ上手く行きません…
今のプログラムはもっと単純なので、サンプルのワールドビュー射影行列は削除して行っています。
どうもピクセルシェーダーでZ値が取れてない感じがします。
このシェーダーの全体の処理を削除し、単にバッファのコピーをすると
別のシェーダーからはRGB値は取れるので、別のシェーダーの記述は正しい気がします。 こんな形で処理してます。シェーダー部分を丸ごと削除すると別のシェーダーからはRGB値は取得出来るので別のシェーダーは正しく動いてる気がします。
//コード本体部分
lpD3DDev->SetRenderTarget(0, lpRenderSurface);
lpD3DDev->SetDepthStencilSurface(lpZBufferSurface); //レンダリングバッファとZバッファには既に色々と書き込まれている
lpD3DDev->SetTexture(0, lpRenderBuffer1);
UINT nPasses; //四角い板にテクスチャ設定してZ値を取得する用のサーフェスに描画
lpEffect->Begin(&nPasses, 0);
lpEffect->BeginPass(0);
lpD3DDev->SetFVF(D3DFVF_TLVERTEX);
lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, tlvtex, sizeof(D3DTLVERTEX));
lpEffect->EndPass();
lpEffect->End();
//シェーダー部分
struct VS_OUTPUT{
float4 Pos : POSITION; // 射影変換座標
float4 ShadowMapTex : TEXCOORD0; // Zバッファテクスチャ
};
VS_OUTPUT VS( float4 Pos : POSITION, float4 ShadowMapTex : TEXCOORD0 ){
VS_OUTPUT Out;
Out.Pos = Pos;
Out.ShadowMapTex = ShadowMapTex;
return Out;
}
float4 ZBufferPlot_PS( float4 ShadowMapTex : TEXCOORD0 ) : COLOR{
return ShadowMapTex.z / ShadowMapTex.w; // Z値算出
}
technique ZValuePlotTec{
pass P0{
VertexShader = compile vs_1_1 VS();
PixelShader = compile ps_2_0 ZBufferPlot_PS();
}
} これもしかして、まとめて取得出来るのではなくて
オブジェクトごとに、一つ一つ別に保存してないとダメなんでしょうか。 Shadowmapのサンプルが深度バッファをテクスチャにしてるだろうからそれを参考にしたら? >>742
ありがとう。
よく見てくとやっぱり別に用意した書き込み用の
Z値を保持するバッファに一つ一つ書き込んでそれを使ってるみたい。
とりあえずその方法でやったら上手く行きました。 以下を実行すると画面が白くなります。出来ればlpSurface0の内容にはシェーダーが影響せず
lpSurface1だけにfloat4(1.0f,1.0f,1.0f,1.0f)の内容が描画される様にしたいです。
//細かい部分は端折ってます。
lpD3DDev->SetRenderTarget(0, lpSurface0);
lpD3DDev->SetRenderTarget(1, lpSurface1);
lpEffect->Begin( &nPasses, 0 );
lpEffect->BeginPass( 0 );
lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vtex, sizeof(D3DVERTEX));
lpEffect->EndPass();
lpEffect->End();
その後lpSurface0の内容を画面に描画
//シェーダー
struct PS_OUTPUT {
float4 target1 : SV_TARGET1;
};
PS_OUTPUT PS(float2 input : TEXCOORD0) : COLOR0
{
PS_OUTPUT output;
output.target1 = float4(1.0f, 1.0f, 1.0f, 1.0f);
return output;
} 今気づいたけどSV_TARGETはDirect3D9では使えないみたいですね…
エラーが出なかったので気付きませんでした。
それではlpSurface1に出力するにはどうすればいいんでしょうか? >>746
ピクセルシェーダーの出力セマンティックス「COLOR1」を使う
以下を参照
http://neareal.net/index.php?ComputerGraphics%2FHLSL%2FCommon%2FMultipleRenderTarget
ただし、
>複数の色を書き込む場合は、すべての出力色を連続して使用する必要があります。
>つまり 、COLOR0 が既 に記述されていない限り 、COLOR1 を出力にすることはできません。
こういう制約があるようなのでもう一工夫しないとダメだろうな >>747
横からだが、こんないいページあったんだな
教えてくれてありがとう >>747
お礼遅くなりました!ありがとうございます。
もう少し調べながら頑張ってみます。 ここはrustでdirectxをいじる場合の話を聞いてもいいのか?
マイクロソフトがサポートするようだけど Rustありきの質問ならRustスレでやればいいだけだが windows-rsはまだ出来たばかりで言語感の差が初心者に結構きついんですよ
directx12の魔道書を移植しようにもc++にあったものが対応しているかどうかも分からない 転職して前の会社で作っていたライブラリを再開発したいと思っています。
前職のライブラリはDirectX9で作成していたのですが、
DirectX9は古くてサポートが切れる可能性があるので、DirectX12かOpenGLのどちらかにしようかと悩んでいます。
ちなみに、使いたい機能は2D表示のみです。
将来性を考えると2D表示のみならマルチプラットフォームで使えるOpenGLの方がやはり良いのでしょうか。 将来性とか言い出したら既にOpenGLは終わってVulkanだが
無理せずDirect2Dでもやっとけ >>756
Vulkanって3Dに特化したAPIだから
OpenGLは2D用に将来継続するんじゃないんですか? OpenGLは3D用だし将来継続するって根拠も不明
Macじゃ数年前から名指しで非推奨にされていつ廃止になってもおかしくない
ふわっとマルチプラットフォーム見据えてるならメジャーなゲームエンジンに学習割いた方がマシ
そもそも2Dで扱うバックエンドのAPIなんて大したことやらねえんだからどれ使っても誤差
好きなの使いたまへ 将来のために3Dの板に2Dデータをテクスチャして
その3Dの板を画面に表示すればいいw Intelのネイティブサポート止める話聞くまで存在すら知らなかった
tps://github.com/microsoft/D3D9On12 DirectShowの質問です。
実行ファイルと同じディレクトリに置いたコーデックDLLが使われ
pGraph->RenderFile(FileName);
が実行されています。しかし他のPCでやると失敗します。
恐らくレジストリに値が無く動かないと思うのですが(コーデック登録がなく)
自力でプログラムからレジストリ登録をやるか、レジストリ登録なしで動かしたいです。
どなたか力を貸してください。 >>766
ちょっと話が変わりますが、今だとmp4ファイルは再生できないのですが
これに対応すにはどうすればいいんでしょうか?
外部からインストールファイルを使ってコーデックをインストールするとかではなく
プログラムの中だけで完結したい場合です。
DirectShowのフィルターを自作するとかそういう方法になるんでしょうか? そのコーデックdllがCOM形式なら↓こんな感じ
typedef HRESULT(WINAPI* DllRegFncType)(void);
int WINAPI WinMain(…
{
// レジストリに登録されるので1回のみでOK。登録済みかどうかを設定ファイルにでも保存しておく。
HMODULE hModule = LoadLibrary("mp4codec.dll");
DllRegFncType DllRegisterServer = (FncType)GetProcAddress(hModule, "DllRegisterServer");
FreeLibrary(hModule);
DllRegisterServer(); // レジストリに登録
// 上の4行はsystem("regsvr32.exe /s mp4codec.dll")でも代用できる
// アプリをアンインストールするときはregsvr32.exe /u mp4codec.dllする
// 以下アプリのメインが続く
COM形式でないならdllの作者に聞かないとわからない
(COM形式かどうかはregsvr32.exe mp4codec.dllで表示されます) (FncType)GetProcAddress → (DllRegFncType)GetProcAddress >>768
ありがとうございます!やってみますね! 逆だった
DllRegisterServer(); // レジストリに登録
FreeLibrary(hModule); はじめましてVC++におけるDirectXの設定についてお尋ねします
DirectX SDK Jun 10 というSDKを公式からダウンロードできたのですが
ここにあるSDKをインストールし、VC++のincludeとlibフォルダにコピペし
コンパイルしたのちにsal.hがありませんと怒られれました
sal.hってなんですか???