8. 例
は平面に垂直なベクトル
で両辺を割って正規化
p
22 + 32 + 42 =
p
29
a b cx + y + z+ = 0d
2x + y + z+ = 03 4 5
( , , )a b c
p
2 + 2 + 2a b c
x + y + z+ = 0
2
p
29
3
p
29
4
p
29
5
p
29
87. for (int x = 0; x < 8; ++x) {
for (int y = 0; y < 8; ++y) {
for (int z = 0; z < 8; ++z) {
// 処理
}
}
}
そもそも、同じ処理の繰り返しを並列化したい
この処理中、x, y, zが使われる「だろう」
88. [numthreads(8, 8, 8)]
void exec(uint3 id : SV_DispatchThreadID)
{
// 処理
}
登録した関数は並列実行される
x, y, z に相当する情報を引数idから取得できる
89. [numthreads(512, 1, 1)]
void exec(uint3 id : SV_DispatchThreadID)
{
// id から実行中のスレッドがわかる
}
やりたいことが一重ループなら2番目3番目を1に
並列上限はデバイスによる(iPhoneは512が多い)