【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/02(水) 16:41:38.58ID:db1quxwb
やねうざお
2016/11/02(水) 16:44:52.97ID:ttxNZg5R
>>135
http://project-asura.com/blog/?p=3509
138デフォルトの名無しさん
垢版 |
2016/11/03(木) 10:53:04.55ID:6FeMk1RE
おまけ
http://www.neogaf.com/forum/showthread.php?t=1021024
http://gamingbolt.com/ps4-should-support-vulkan-ps4s-api-not-completely-native-for-current-gen-yet-brad-wardell
2016/11/03(木) 15:05:54.24ID:M9JiIIXY

コンソールの低レベルAPI直接使った方が遥かに使いやすいから
完全に放置
140デフォルトの名無しさん
垢版 |
2016/11/03(木) 16:18:44.88ID:KRq5Cur1
ほんとうざい
2016/11/03(木) 16:25:53.19ID:Z790Jh1Y
Vulkan始まる前にオワタw
142デフォルトの名無しさん
垢版 |
2016/11/04(金) 05:07:40.36ID:gpXDTSEe
ガングリオン
2016/11/04(金) 10:05:45.78ID:gMmbEg2H
UnityのせいでDirectXで開発する人が明らかに減ったな
2016/11/04(金) 13:10:33.36ID:Mgu1HfTZ
時代の流れとはいえ、つまんねーよな。
2016/11/04(金) 15:56:27.85ID:kQ8VEtHk
グラボの新機能触る時に必要とかなんかあるの?
2016/11/04(金) 16:10:45.35ID:RkTzmEFz
新しい機能使いたいならOpenGLの方がよくね?
2016/11/04(金) 19:51:57.44ID:S7YCyC79
そもそもいまのグラボの新機能って何?
2016/11/04(金) 21:46:23.16ID:wTo+5XZe
asynchronous shaders
149デフォルトの名無しさん
垢版 |
2016/11/15(火) 18:08:00.21ID:ECJZyl3v
質問させてください。
visualC++2010、DirectXでプログラムを作っているのですが
セカンダリバッファをLockするところでエラーが起きてしまいます。
デバッグの際に自動変数ウインドウのセカンダリバッファのポインタの値に0x000000000と表示されているのですが
これはポインタにアドレスが与えられていないということでしょうか。

宜しくお願いします。
2016/11/15(火) 18:18:17.06ID:sduqxbjA
DX以前の問題だなw
2016/11/15(火) 18:24:18.30ID:pC8wN0mq
Lockに失敗したならバッファのポインタには0が入るでしょう
2016/11/15(火) 19:31:33.84ID:9dJvVkWw
そりゃそうだw
2016/11/15(火) 23:59:47.44ID:GJKNXmm3
セカンダリバッファってDirectSoundだよね
再生カーソル付近をロックしようとするとセカンダリバッファでもエラーになる時があるよ
CAPSで厳密な再生位置を取得できるようにするとかでロックする位置を変えられないかなぁ
2016/11/16(水) 00:15:41.70ID:H80Ju/wE
>>153
新たなる馬鹿登場
155デフォルトの名無しさん
垢版 |
2016/11/16(水) 02:49:32.68ID:fzskfnoe
>>154
+1
156デフォルトの名無しさん
垢版 |
2016/11/17(木) 00:31:58.84ID:LL3TqbgU
やっぱDirectXじゃないとコンピューターを操っている感じがしない。
2016/11/17(木) 01:05:01.79ID:cH0vE1/X
おれもDirectXじゃないと
コンピュータに操られている感じがしない
2016/11/17(木) 01:07:40.19ID:PCj1aSoT
ShaderResourceViewってなんでViewってつけたんだろう
用途がViewぽくないしShaderResourceで良かったと思う
2016/11/17(木) 01:17:56.92ID:cH0vE1/X
ShaderResourceだったら
まるで実体そのものであるかのようだろ
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しようしております
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況