【C++】 DirectX初心者質問スレ Part40 【C】©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/09/25(日) 14:43:57.34ID:3wiQalb8
回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。


【C++】 DirectX初心者質問スレ Part39 【C】
http://echo.2ch.net/test/read.cgi/tech/1418438785/

>>2リンク
2016/11/17(木) 01:51:52.57ID:s7ooRVio
【急募】Viewより適切な英単語
2016/11/17(木) 01:56:37.59ID:cH0vE1/X
まぁAdapterとかなら、われわれ日本人英語にはマッチしているように感じるが
ネイディブのそれは我々とは違うだろうから・・・
Viewというのは割と幾何学的で、外人さんはそういうの好きそうだから
似たような言葉だとWindowかな
でもWindowだと何か一部だけを覗くって意味合いが強くなるから
やっぱViewで良いんじゃね?かっこいいし
2016/11/17(木) 07:13:27.83ID:nlqUeh0b
>>156
分かる

>>158
たしかデータベースで馴染みのある概念なんだっけ?
自分も最初は違和感あったけど、
データの塊をどう見なすか、という意味で、悪くないと思った
2016/11/17(木) 19:41:28.20ID:oFnldSkp
ネイティブの人だと、俺らのソース読みづらいらしいなぁ
オレ割とTOEIC良いだけに、ちとショックだったわ
2016/11/17(木) 22:26:56.21ID:PCj1aSoT
>>159-162
デバイスに入力としてセットするものVertexBufferとかConstantBufferとかSamplerStateとかはViewがつかないで
出力先としてセットするものRenderTargetViewとかDepthStencilViewとかはViewがつくからShaderResourceViewにはなんとなく違和感があったんだ
2016/11/18(金) 07:48:55.09ID:RViIbSs4
>>164
入力か出力かではなくて、テクスチャかそうでないか、だね。
166デフォルトの名無しさん
垢版 |
2016/11/19(土) 11:37:14.04ID:qaK6UPFI
今自作ゲームにFBX取りいれようとしてFBX_SDK覚えようとしてるんだが
DirectXで鍛えられたおかげで思ったよりすんなり行けそうだわ
2016/11/19(土) 17:26:12.75ID:qO2vK92E
日記
2016/11/19(土) 18:04:22.17ID:wPIFS+WC
チラッ
169デフォルトの名無しさん
垢版 |
2016/11/20(日) 18:37:34.98ID:lnWwPKI5
外人が書いたコードは難しく見えるな。
とりあえず何とかGURUとかって本見てるけどグルとか聞くと尊師思い出すわ・・
2016/11/23(水) 14:02:56.28ID:I8fNm7Sk
ID3D11DeviceのCreateBufferの第二引数でD3D11_SUBRESOURCE_DATA構造体を渡すとブレークポイントが発生してしまいます
NULLだと発生しません
171ぬるぽ
垢版 |
2016/11/23(水) 14:31:00.04ID:XEgR0M7V
memset(0 汁
2016/11/23(水) 14:34:07.37ID:Ft8Tup8s
>>170
第一引数で指定したサイズ等の情報と実際に渡した構造体のサイズとで齟齬があったりするんじゃないの?
173デフォルトの名無しさん
垢版 |
2016/11/23(水) 14:35:49.97ID:I8fNm7Sk
>>171
memsetを使ってもZeroMemoryを使っても発生します
2016/11/23(水) 14:42:40.08ID:I8fNm7Sk
>>172
初心者なのでよくわからないんですけど
D3D11_BUFFER_DESCのByteWidthと頂点構造体を動的確保するときもおなじ変数を使っています
2016/11/23(水) 14:42:53.64ID:3ZWnAcYx
それ俺もなったけどnullptrで動くMapしてデータ入れられるし仕様だと思ってた
2016/11/23(水) 14:46:03.83ID:I8fNm7Sk
頂点数が24とか少ないと問題なく動くのですが
70000などと多すぎると発生するみたいです
2016/11/23(水) 14:47:24.26ID:bwyLhk6b
その周辺のコードうpした方が早くないか
2016/11/23(水) 14:55:55.71ID:I8fNm7Sk
vertexCount = 79987;
VertexType* vertex = new VertexType[79987];
for(int i = 0; i < vertexCount; i++)
{
vertex[i].pos = XMFLOAT3(0.0f, 0.0f, 0.0f);
vertex[i].nor = XMFLOAT3(0.0f, 0.0f, 0.0f);
vertex[i].uv = XMFLOAT2(0.0f, 0.0f);
vertex[i].boneIdx[0] = 0;
vertex[i].boneIdx[1] = 0;
vertex[i].boneIdx[2] = 0;
vertex[i].boneIdx[3] = 0;
vertex[i].weight = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f);
}
bufferDesc.Usage = D3D11_USAGE_DEFAULT;
bufferDesc.ByteWidth = sizeof(VertexType) * vertexCount;
bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bufferDesc.CPUAccessFlags = 0;
bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;

initData.pSysMem = vertex;
initData.SysMemPitch = 0;
initData.SysMemSlicePitch = 0;

hr = device->CreateBuffer(&bufferDesc, &initData, &m_vertexBuffer);
if (FAILED(hr))
throw L"CreateVertexBuffer";
こんな感じです
2016/11/23(水) 15:34:12.97ID:bwyLhk6b
問題があるようには見えない
2016/11/23(水) 16:26:36.73ID:Ft8Tup8s
ハードウェアの頂点数制限に引っかかってるのかな?
点数を色々変えてみて、クラッシュするしないの境界が2のべき乗とかだったら、たぶんそれ。
2016/11/23(水) 16:33:18.13ID:I8fNm7Sk
>>180
調査してみたところ
5350までは問題なくて、それ以降は安定しないのでそれでもなさそうです
2016/11/23(水) 16:45:35.35ID:XEgR0M7V
vertexがぬるぽ
2016/11/23(水) 16:50:26.00ID:3ZWnAcYx
勝手にコンスタントバッファだと思ってた

>>181
5000ちょっとなら2万のモデル出したりしたことあるから違う気がするな
そしてMSDNのResource Limitも128MBって書いてるしfeature level 9_1でもプリミティブ数で65535って書いてるし容量的な問題ではなさそう
2016/11/23(水) 16:54:02.81ID:XEgR0M7V
同じサイズでコンスタントバッファを渡してみたら?
2016/11/23(水) 17:04:49.61ID:I8fNm7Sk
>>183
>>184
すみません、自己解決しました
クラスを丸ごと書き直したら動くようになりました
何が駄目だったのかは分かりませんが・・・
2016/11/23(水) 17:06:43.34ID:wddBimUU
俺がコンスタントバッファ作ろうとしたときは
16バイトのアライメントにあってないサイズだと
エラーになって何じゃそりゃ?って感じだったんだが
それとは違いそうだな
2016/11/23(水) 17:12:09.61ID:nzUXR/ks
アラインメントってXMVECTORとかを迂闊に使ったんだろ
2016/11/23(水) 18:33:00.00ID:wddBimUU
アライメントという言葉が非常に良くなかった
シェーダーに渡す定数がintが3つ分だったので
12バイトのコンスタントバッファを作ろうとしたら失敗した
??????だったが16バイトにしたら成功した
その時は、よーわからん、と思ったものが、実は今もよーわからん
2016/11/23(水) 18:35:22.98ID:bwyLhk6b
コンスタントバッファ作成時のByteWidthは16の倍数にしろとリファレンスに記述されてるぞい
2016/11/23(水) 18:39:15.65ID:Ft8Tup8s
コンスタントバッファの要件はめちゃくちゃ厳しいぞ。
よ〜く調べてみ。
2016/11/23(水) 21:06:23.13ID:fCj7qIPS
テクスチャを2のべき乗にするの忘れるのは今でもよくやる
2016/11/23(水) 21:31:09.84ID:wddBimUU
20年ぐらい前のGPUはそうだったね
193デフォルトの名無しさん
垢版 |
2016/11/24(木) 10:21:20.20ID:G9zv+9s3
間違ってても中途半端に動いてしまうのが一番困る
間違ってたらきっちりエラー出して教えてください
2016/11/24(木) 11:01:04.10ID:lUYGSN4n
コンスタントバッファはエラーが出なくても変数の配置がズレることもあるからやっかいだよね

定数変数のパッキング規則
https://msdn.microsoft.com/ja-jp/library/bb509632(v=vs.85).aspx
195デフォルトの名無しさん
垢版 |
2016/11/25(金) 00:41:10.54ID:OH28PHra
1年半くらい前から9,11,12の順に使ってるけど
いまだに理解し切れてないまま使ってるわ・・
趣味レベルだけども・・
2016/11/25(金) 01:27:49.80ID:KQ2ueA3Z
いや、ほんっと、複雑怪奇だから
全貌を理解しかけたあたりで次のバージョンになっちゃうしな!
2016/11/25(金) 04:30:16.40ID:zIB8Tv/6
SIMD命令には、8byteの倍数しかない

64, 128, 256, 512bit
8, 16, 32, 64byte
2016/11/25(金) 21:36:27.47ID:+fWvC7U1
WindowsSDKを使って作ったDirectX11のアプリケーションはwindows7でも動きますか?
2016/11/25(金) 23:13:53.79ID:q3OCSzNP
>>198
Visual Studio 2012以降に付属のWindows SDKと仮定すると
Direct3D11/DirectSound/DirectInputを使うならそのままWin7上でも動作可能
XInput/XAudio2を使うならWin7上での動作にはDirectX SDKの導入が必要

このへんのややこしさについてはこのスレの>>30前後からも長めに話題に上がってる
2016/11/27(日) 03:56:51.15ID:heIG8JcR
>>199
遅くなりましたがありがとうございます
201デフォルトの名無しさん
垢版 |
2016/11/27(日) 17:01:58.60ID:Q/59TbJy
文字列 buf を入力とし、buf を空白で分割する。
空白で分割した場合の数を返り値に、
分割した文字列のそれぞれのポインタを,charへの
ポインタの配列へ代入して返す関数を作成せよ。

int split(char buf[], char *out[]);

これ作れる神いませんか?
2016/11/27(日) 17:05:46.20ID:CC34oqbC
なぜここできく
2016/11/27(日) 17:06:07.94ID:5qBhLNsq
>>201
istringstreamやstrtokを使えば比較的容易に作れるんじゃまいか?
2016/11/27(日) 17:09:04.47ID:ngTSc2Wz
int split(char buf[], char *out[])
{
int c = 0;
for(char *p=strtok(buf,' '); p; p=strtok(p+1,' '))
out[c++]=p;
return c;
}
試してないけど
205デフォルトの名無しさん
垢版 |
2016/11/27(日) 17:12:09.38ID:Q/59TbJy
>>202
ごめんなさいよく見たらスレチでした
206デフォルトの名無しさん
垢版 |
2016/11/27(日) 17:13:19.77ID:Q/59TbJy
連投すいません&返答くださった方ありがとうございました
2016/11/28(月) 14:41:51.80ID:TfUhzTaG
DirectXMath.hをインクルードしているのですが
識別子XMFLOAT3が定義されていませんと出ます
なにか別にインクルードすべきものがあるのでしょうか?
visual studio 2015 communityです
208デフォルトの名無しさん
垢版 |
2016/11/28(月) 14:43:29.94ID:TfUhzTaG
DirectX12です
209デフォルトの名無しさん
垢版 |
2016/11/28(月) 15:30:57.06ID:msYXnjQ5
#ifndef XMFLOAT3
struct XMFLOAT3 {
float x;
float y;
float z;
};
#endif
2016/11/28(月) 15:34:31.41ID:qOUBWjRD
Windows.hはインクルードした?
2016/11/28(月) 16:01:26.18ID:TfUhzTaG
>>209
それでもできました。ありがとうございます。
しかし、できればDirectXMath.hをインクルードする方法でやりたいです。
参考にしているサイトがその方法なので
>>210
してあります
2016/11/28(月) 16:06:56.12ID:qOUBWjRD
足りないんじゃなくて余計なものを入れてるんじゃないか?
2016/11/28(月) 16:38:27.37ID:TfUhzTaG
えー、何回かリビルドを繰り返していたら治りました
大変ご迷惑をおかけしました
2016/11/28(月) 16:57:19.54ID:C9tEXsrv
あるあるw
2016/11/28(月) 16:59:31.45ID:kmgUcgPq
.pchを消すのは常識
2016/11/28(月) 22:20:21.19ID:QcR2IcGy
>>209
その#ifndef意味ないだろ
217デフォルトの名無しさん
垢版 |
2016/11/30(水) 02:18:16.55ID:WhaKofQb
ある
218デフォルトの名無しさん
垢版 |
2016/11/30(水) 02:33:40.01ID:PeC/aWZc
http://imgur.com/a/XVI2u.jpg
2016/11/30(水) 02:47:33.50ID:favm3NhS
>>217
あると言うなら説明してみろよ
2016/11/30(水) 19:59:59.63ID:nzjQqOB4
DirectX11で動的リンクを使うように変えるとうまく表示できなかったので出力を見てみると頂点シェーダのコンスタントバッファスロット1が96byteなのに64byteしか入ってないという警告が出てました
サイズがおかしいだけならいいのですが同じシェーダーしか使ってないのにも関わらず96byteが160byteになったり96byteになったりします
Visual Studio Graphic Analyzerでシェーダーファイルを確認しても96や160という数字がありませんでした
SM5.0や動的リンクを使うと必要な量が変動したりするのでしょうか?
221220
垢版 |
2016/12/01(木) 02:44:19.68ID:fJf0Drwy
いろいろ試した結果動的リンクの設定がうまくいっておらず処理がおかしくなっていたようです
222デフォルトの名無しさん
垢版 |
2016/12/02(金) 04:06:19.85ID:iaQwEbwm
プリミティブの法線を変更して両面に照明効果がでるようにしたいんですが
どう値を設定すればいいんでしょうか?
v[0].nz = -1.0f;
v[1].nz = -1.0f;
v[2].nz = -1.0f;
v[3].nz = -1.0f;
223222
垢版 |
2016/12/02(金) 04:17:37.07ID:iaQwEbwm
要するにこれは該当プリミティブが今どの方向を向いているかを算出して
そこから法線を(照明効果を有効にする面を)求める必要があるという事ですかね?
2016/12/02(金) 10:47:19.70ID:0IfQ/0op
test
2016/12/02(金) 10:50:54.56ID:8KVLBNXW
シェーダ上で絶対値取るのではだめなん?
法線をどうこうするのでは無理な気が
2016/12/02(金) 10:51:30.78ID:0IfQ/0op
照明の計算では
光源への方向とほうせんの内積をとるが箇所があるが
そこにabsかませばいーんじゃないかな
2016/12/02(金) 12:56:03.88ID:KtN9vVHB
カリングに引っかかって計算されないような?
普通に片面2枚書いたほうが楽?
2016/12/02(金) 14:03:38.77ID:0IfQ/0op
まあカリングoffは当たり前
2016/12/02(金) 14:05:43.45ID:LG3SGwVv
いやカリングは関係ないでしょ
あれは画面との角度だから別問題でしょ
今言ってるのは光源との角度でしょ
2016/12/02(金) 14:08:45.44ID:LG3SGwVv
つまり、裏側から光が当たっているのに
まるで手前に光源があるかのようにレンダリングするという
気持ちの悪いことがしたいんでしょ
なんでそんなことがしたいのかは謎だが
2016/12/03(土) 01:12:55.59ID:xAW6Jx/O
>>230
両面ポリは指定できるくせに光源があると破綻するってほうが感覚的にはおかしい気もする
232222
垢版 |
2016/12/03(土) 10:43:34.87ID:TV4EJMVW
すいません。質問者です。
両面を単に表示したいなら二枚描画するのが簡単だとは思ったのですが
一枚のみでもむりやり照明効果つける事は可能なのかなと疑問に思いまして。
ただ何か作る時は単純に表と裏、二枚表示するのが簡潔でいいですね。
2016/12/03(土) 15:54:14.55ID:iU+ignEA
>>231
カリングなんてただのフェイクですし
2016/12/03(土) 15:55:13.55ID:iU+ignEA
>>232
一枚だけ前後でカリングon/offじゃいかんの
235デフォルトの名無しさん
垢版 |
2016/12/03(土) 17:20:48.29ID:I8LztAU2
質問なんですけども
複数メッシュが有る場合ってメッシュ毎に描画が一般的?
ちなみにFBXSDKしようしております
2016/12/03(土) 17:22:09.50ID:TtP1/9i/
俺もカリングoffで良いと思ったが、法線は向こう向きなのでライティングはどうなるんだろって思った
237デフォルトの名無しさん
垢版 |
2016/12/03(土) 18:19:44.49ID:iU+ignEA
とりあえずやってみろ
2016/12/03(土) 18:37:44.64ID:m/bMJWUU
カリングオフにして
ピクセルシェーダーで法線にVFACEかけてる

https://msdn.microsoft.com/ja-jp/library/bb509647(v=vs.85).aspx
2016/12/03(土) 18:45:20.76ID:gsIq6P2V
やっぱり片面2枚だなって想う
ディフューズのuvひっくり返して表示してます面倒なのではデザイナも多分頂けない
2016/12/03(土) 20:39:24.18ID:n4qAjcrC
>>235
一般的なのは多分マテリアル毎
2016/12/03(土) 21:32:39.17ID:TtP1/9i/
ステートの切り替えにコストがかかるから、マテリアル毎が普通だね
2016/12/03(土) 21:38:38.09ID:7Y/68QXj
マテリアルが増えてくると結局オーバーヘッドが嵩んでくるから、
ディファードレンダリングのほうがお得になってくるのかね?
2016/12/03(土) 22:31:34.72ID:r47XRuJ6
lines描画で、頂点位置のピクセルであることを、ピクセルシェーダに伝える方法あります?1passで。
2016/12/03(土) 22:52:15.08ID:7Y/68QXj
1パスは厳しいなぁ・・・
2016/12/04(日) 00:32:11.69ID:tP3D55j/
>>243
何がやりたいんだ?
2016/12/04(日) 03:50:02.59ID:eQT8AG3c
ベクタースキャンディスプレイみたいに頂点部分を明るくするとか?
2016/12/04(日) 07:47:06.30ID:w27m7Q2w
>>245
いくつかの頂点位置に2パス目でビルボードを描きたい。
そのためにpsからuavに位置を出力しようとしてます。
vsからuav出力できない環境です。
2016/12/04(日) 12:09:03.58ID:2oWP1KKC
結局半透明合成時のZソートの自動化はどうなったの?
Aバッファか何か知らないが、DirectX側が自動でピクセル単位で
Zソートをかけてくれるようにするだとかしないだとかの
話があったようななかったような
2016/12/04(日) 12:21:08.10ID:SxgHpTya
その話はもう終わってる
2016/12/04(日) 13:35:37.09ID:I0xulVQO
>>248
12でサポートって話だったけど、どうなったんだろうね?
まぁいずれにせよ、12自体が11世代とHWは変わらないことを考えると、
HWアクセラレートでリーズナブルにはできないだろうね。
2016/12/04(日) 14:11:10.07ID:pFGLCkvX
>>247
僕そういうの小手先で解決しない派
2016/12/04(日) 14:21:41.30ID:JMHjI5uO
>>248
そんな話あったのか
めっちゃ欲しいですぅ……
253デフォルトの名無しさん
垢版 |
2016/12/05(月) 00:02:25.15ID:zX+H7XFN
DirectX12を勉強しているのですが、
for (UINT i = 0; i < RTV_BUFFER_NUM; ++i) {
//スワップチェインからバッファを受け取る
hr = g_swapChain->GetBuffer(i, IID_PPV_ARGS(&g_renderTargets[i]));
//以下略
の所で、アクセス違反が発生したのですが、原因がわかりません。
iが配列の範囲を超えたのかと思いましたが、RTV_BUFFER_NUM = 2 で、g_renderTargets
の要素数も2なので範囲を超えることはないと思うのですが、
他に原因として何が考えられるでしょうか?
2016/12/05(月) 13:45:22.87ID:Y7gXLjvG
そんなもんVSのデバッグ機能で普通にわかるだろ
変数の中身くらいちゃんと調べろよw
255デフォルトの名無しさん
垢版 |
2016/12/05(月) 15:36:37.46ID:dF177W8B
>>253
ぬるぽ
256デフォルトの名無しさん
垢版 |
2016/12/05(月) 22:47:25.15ID:4IptZuBG
ちらほら12の話も出始めてきたね
257デフォルトの名無しさん
垢版 |
2016/12/05(月) 23:00:41.60ID:zX+H7XFN
>>254 >>255
g_renderTargets が原因でした
よく見ていませんでした。失礼しました
258デフォルトの名無しさん
垢版 |
2016/12/09(金) 00:26:54.45ID:WzSsU1Dc
DirectX11からチュートリアルがないから手も足も出ないんだけど、どうやって勉強すればいいの?
俺の作るゲームなんてDirectX9でも十分なんだが、DirectX12でブイブイ言わせたいんだ。
259デフォルトの名無しさん
垢版 |
2016/12/09(金) 00:28:02.18ID:WzSsU1Dc
やっぱ何でもない。
Windows7だったわ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。