2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

【C++】 DirectX初心者質問スレ Part41 【C】

1 :デフォルトの名無しさん:2018/03/23(金) 15:24:12.95 ID:1IsbON+l.net
回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
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リンク

727 :デフォルトの名無しさん:2021/08/28(土) 18:36:06.11 ID:AGFWPDrr.net
お札はいるよ

728 :デフォルトの名無しさん:2021/08/28(土) 20:39:47.61 ID:eZEiHpg+.net
>>725
>>727
どっちだよw

729 :デフォルトの名無しさん:2021/08/29(日) 01:52:57.04 ID:TPHdi4yb.net
>>726
同じネタ思い付いたがあまりにも馬鹿っぽいのとスレ消費無駄なのでやめておいた

730 :デフォルトの名無しさん:2021/08/29(日) 08:09:58.30 ID:z+CvjRY2.net
>>729
あ、やっぱり使わないんだ
いろいろ試したけど挙動的にZバッファは関係なさそう
まあ俺が正しく使えてないだけだろう
どっちにしても素直にポリ袋使うわありがとう

731 :デフォルトの名無しさん:2021/08/29(日) 13:14:12.73 ID:z1k369XY.net
>>730
お礼はいらないよ

732 :デフォルトの名無しさん:2021/08/29(日) 14:13:34.97 ID:k+02Ofrq.net
礼よか札束ぞ

733 :デフォルトの名無しさん:2021/08/30(月) 06:40:41.94 ID:Mv4wvbyh.net
お札はいるよ

734 :デフォルトの名無しさん:2021/08/30(月) 17:51:05.56 ID:RiczHxxv.net
>>731
>>733
どっちやねんw

735 :デフォルトの名無しさん:2021/09/13(月) 19:48:47.39 ID:LTFifztG.net
馬鹿が書評描くと評価下がる例
https://www.あまzon.co.jp/dp/4863543549

736 :デフォルトの名無しさん:2021/09/18(土) 08:36:50.03 ID:bA/qQPAi.net
https://www.youtube.com/watch?v=iYi2EODfp5A

737 :デフォルトの名無しさん:2021/10/01(金) 00:50:39.40 ID:H+nLrgEB.net
ゲームインストールするときに、 directXって毎回入れたほうがいいの?

738 :デフォルトの名無しさん:2021/10/12(火) 11:47:15.86 ID:JETpbgo0.net
Zバッファをテクスチャにしたいんだけど簡単な方法ないでしょうか?

739 :735:2021/10/12(火) 13:31:42.53 ID:JETpbgo0.net
IDirect3DDevice9::GetRenderTargetDataを使って
別のテクスチャの領域にコピーとかできるんですかね?
帰ったらやってみます。

740 :デフォルトの名無しさん:2021/10/12(火) 15:15:46.73 ID:JETpbgo0.net
D3DFMT_D24S8で深度バッファ作成して
SetTextureで設定してレンダリングしても
シェーダーからZ値が取れないの?

741 :デフォルトの名無しさん:2021/10/13(水) 18:22:43.52 ID:Jar6uE+V.net
取れないよ

742 :デフォルトの名無しさん:2021/10/13(水) 20:17:35.12 ID:FoQ7p5uh.net
>>741
ここのサンプルみながら一旦テクスチャ用に確保した領域にZ値を書き込んでからやる事にしました。
http://marupeke296.com/DXGSmp_No_43_ZValueRendering.html

ただ色々やってるんですけどイマイチ上手く行きません…
今のプログラムはもっと単純なので、サンプルのワールドビュー射影行列は削除して行っています。
どうもピクセルシェーダーでZ値が取れてない感じがします。
このシェーダーの全体の処理を削除し、単にバッファのコピーをすると
別のシェーダーからはRGB値は取れるので、別のシェーダーの記述は正しい気がします。

743 :デフォルトの名無しさん:2021/10/13(水) 20:35:17.08 ID:FoQ7p5uh.net
こんな形で処理してます。シェーダー部分を丸ごと削除すると別のシェーダーからは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();
}
}

744 :デフォルトの名無しさん:2021/10/14(木) 07:29:06.96 ID:sdRsWYAw.net
これもしかして、まとめて取得出来るのではなくて
オブジェクトごとに、一つ一つ別に保存してないとダメなんでしょうか。

745 :デフォルトの名無しさん:2021/10/14(木) 23:40:17.85 ID:zUpXI/dI.net
Shadowmapのサンプルが深度バッファをテクスチャにしてるだろうからそれを参考にしたら?

746 :デフォルトの名無しさん:2021/10/15(金) 08:01:34.77 ID:s5eU50Mv.net
>>745
ありがとう。
よく見てくとやっぱり別に用意した書き込み用の
Z値を保持するバッファに一つ一つ書き込んでそれを使ってるみたい。
とりあえずその方法でやったら上手く行きました。

747 :デフォルトの名無しさん:2021/10/15(金) 22:23:06.54 ID:h6XcTt5d.net
>>746
お礼はいらないよ

748 :デフォルトの名無しさん:2021/10/15(金) 22:51:03.11 ID:s5eU50Mv.net
以下を実行すると画面が白くなります。出来れば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;
}

749 :745:2021/10/15(金) 23:15:01.24 ID:s5eU50Mv.net
今気づいたけどSV_TARGETはDirect3D9では使えないみたいですね…
エラーが出なかったので気付きませんでした。
それではlpSurface1に出力するにはどうすればいいんでしょうか?

750 :デフォルトの名無しさん:2021/10/17(日) 11:26:11.17 ID:oNTBMRTn.net
>>749
ピクセルシェーダーの出力セマンティックス「COLOR1」を使う
以下を参照
http://neareal.net/index.php?ComputerGraphics%2FHLSL%2FCommon%2FMultipleRenderTarget

ただし、
>複数の色を書き込む場合は、すべての出力色を連続して使用する必要があります。
>つまり 、COLOR0 が既 に記述されていない限り 、COLOR1 を出力にすることはできません。
こういう制約があるようなのでもう一工夫しないとダメだろうな

751 :デフォルトの名無しさん:2021/10/18(月) 13:00:51.98 ID:1GH669SN.net
>>750
横からだが、こんないいページあったんだな
教えてくれてありがとう

752 :デフォルトの名無しさん:2021/10/18(月) 19:03:47.61 ID:j2NOB+RR.net
>>751
気にしないで

753 :デフォルトの名無しさん:2021/10/19(火) 20:57:07.57 ID:PuFf5apM.net
>>750
お礼遅くなりました!ありがとうございます。
もう少し調べながら頑張ってみます。

754 :デフォルトの名無しさん:2021/10/24(日) 09:16:59.40 ID:IF6Ria+p.net
ここはrustでdirectxをいじる場合の話を聞いてもいいのか?
マイクロソフトがサポートするようだけど

755 :デフォルトの名無しさん:2021/10/24(日) 10:19:25.91 ID:kgNtN3Fd.net
Rustありきの質問ならRustスレでやればいいだけだが

756 :デフォルトの名無しさん:2021/10/24(日) 12:53:39.98 ID:IF6Ria+p.net
windows-rsはまだ出来たばかりで言語感の差が初心者に結構きついんですよ
directx12の魔道書を移植しようにもc++にあったものが対応しているかどうかも分からない

757 :デフォルトの名無しさん:2021/10/30(土) 19:46:22.95 ID:hf7ly00R.net
windows-rsってまだ続いてたんだな

758 :デフォルトの名無しさん:2022/05/04(水) 22:39:43.82 ID:Yin5yPj8.net
転職して前の会社で作っていたライブラリを再開発したいと思っています。
前職のライブラリはDirectX9で作成していたのですが、
DirectX9は古くてサポートが切れる可能性があるので、DirectX12かOpenGLのどちらかにしようかと悩んでいます。
ちなみに、使いたい機能は2D表示のみです。
将来性を考えると2D表示のみならマルチプラットフォームで使えるOpenGLの方がやはり良いのでしょうか。

759 :デフォルトの名無しさん:2022/05/05(木) 02:00:55 ID:8yVljjyt.net
将来性とか言い出したら既にOpenGLは終わってVulkanだが
無理せずDirect2Dでもやっとけ

760 :デフォルトの名無しさん:2022/05/05(木) 09:39:05.65 ID:h8Hug1ue.net
>>759
Vulkanって3Dに特化したAPIだから
OpenGLは2D用に将来継続するんじゃないんですか?

761 :デフォルトの名無しさん:2022/05/05(木) 13:56:42.61 ID:zknXQMI1.net
OpenGLは3D用だし将来継続するって根拠も不明
Macじゃ数年前から名指しで非推奨にされていつ廃止になってもおかしくない
ふわっとマルチプラットフォーム見据えてるならメジャーなゲームエンジンに学習割いた方がマシ
そもそも2Dで扱うバックエンドのAPIなんて大したことやらねえんだからどれ使っても誤差
好きなの使いたまへ

762 :デフォルトの名無しさん:2022/05/06(金) 15:46:00.86 ID:cW5+23bf.net
将来のために3Dの板に2Dデータをテクスチャして
その3Dの板を画面に表示すればいいw

763 :デフォルトの名無しさん:2022/05/08(日) 00:54:37 ID:re+7Vz2R.net
前職で書いたコードって権利的にヤバそうだな

764 :デフォルトの名無しさん:2022/07/23(土) 01:16:08.84 ID:aNAH5reX.net
DirectStorageです
https://github.com/microsoft/DirectStorage

765 :デフォルトの名無しさん:2022/07/23(土) 14:09:19.84 ID:LtVYlCK3.net
なんすかこれ

766 :デフォルトの名無しさん:2022/07/30(土) 16:27:10.10 ID:paa5jUiA.net
DX22まであります

767 :デフォルトの名無しさん:2022/08/15(月) 16:50:09.07 ID:c0/Fknp3.net
Intelのネイティブサポート止める話聞くまで存在すら知らなかった

tps://github.com/microsoft/D3D9On12

768 :デフォルトの名無しさん:2023/01/20(金) 23:22:28.95 ID:qiUCEM6N.net
DirectShowの質問です。
実行ファイルと同じディレクトリに置いたコーデックDLLが使われ
pGraph->RenderFile(FileName);
が実行されています。しかし他のPCでやると失敗します。
恐らくレジストリに値が無く動かないと思うのですが(コーデック登録がなく)
自力でプログラムからレジストリ登録をやるか、レジストリ登録なしで動かしたいです。
どなたか力を貸してください。

769 :デフォルトの名無しさん:2023/01/21(土) 02:33:55.87 ID:aLDqxzMz.net
regsvr32.exe 呼ぶだけじゃないん?

770 :765:2023/01/21(土) 11:13:10.20 ID:IpxCL/07.net
>>769
ちょっと話が変わりますが、今だとmp4ファイルは再生できないのですが
これに対応すにはどうすればいいんでしょうか?
外部からインストールファイルを使ってコーデックをインストールするとかではなく
プログラムの中だけで完結したい場合です。
DirectShowのフィルターを自作するとかそういう方法になるんでしょうか?

771 :デフォルトの名無しさん:2023/01/21(土) 12:55:06.70 ID:aLDqxzMz.net
そのコーデック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で表示されます)

772 :デフォルトの名無しさん:2023/01/21(土) 12:59:50.62 ID:aLDqxzMz.net
(FncType)GetProcAddress → (DllRegFncType)GetProcAddress

773 :765:2023/01/21(土) 13:29:58.89 ID:IpxCL/07.net
>>771
ありがとうございます!やってみますね!

774 :デフォルトの名無しさん:2023/01/21(土) 15:51:38.30 ID:aLDqxzMz.net
逆だった

DllRegisterServer(); // レジストリに登録
FreeLibrary(hModule);

775 :デフォルトの名無しさん:2023/04/21(金) 00:08:24.31 ID:Ey1irbU3.net
レガシーなHDDでも効果出るかもしれない
https://devblogs.microsoft.com/directx/directstorage-1-2-available-now/

776 :デフォルトの名無しさん:2023/05/08(月) 23:01:35.22 ID:fjpXov5M.net
はじめましてVC++におけるDirectXの設定についてお尋ねします
DirectX SDK Jun 10 というSDKを公式からダウンロードできたのですが
ここにあるSDKをインストールし、VC++のincludeとlibフォルダにコピペし
コンパイルしたのちにsal.hがありませんと怒られれました
sal.hってなんですか???

210 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★