前提
DirectX11でソリッドテクスチャを実装中エラーが発生しました。
実現したいこと
ソリッドテクスチャを実装して物体の中身までマッピングされたテクスチャを実装したい
立方体にソリッドテクスチャを実装する
発生している問題・エラーメッセージ
'offset':initializer does not match type
該当のソースコード
hlsli
1//3Dの座標から乱数を生成 2float GetRandomNumber(float3 vec, int Seed) 3{ 4 return frac(sin(dot(vec.xy, float3(12.9898, 78.233,47.2311f)) + Seed) * 43758.5453); 5} 6 7//3Dの座標から,3つの乱数を生成 8float3 MakeNoiseColor(float2 vec) 9{ 10 return frac(sin(float3( 11 dot(vec, float3(127.1f, 311.7f, 245.4f)), 12 dot(vec, float3(269.5f, 183.3f, 131.2f)), 13 dot(vec, float3(522.3f, 243.1f, 532.4f))))*43758.5453); 14}
hlsli
1float SoridTexture(float3 vec,float block) 2{ 3 vec *= block; 4 // 左上の座標を取得 5 float2 i_uv = floor(vec); 6 // ピクセル位置を取得 7 float2 f_uv = frac(vec); 8 9 float offset[8]= 10 { 11 {0,0,0}, 12 {1,0,0}, 13 {0,1,0}, 14 {1,1,0}, 15 {0,0,1}, 16 {1,0,1}, 17 {0,1,1}, 18 {1,1,1} 19 }; 20 21 float edge[4] = { 22 lerp(offset[0],offset[1],f_uv.x), 23 lerp(offset[2],offset[3],f_uv.x), 24 lerp(offset[4],offset[5],f_uv.x), 25 lerp(offset[6],offset[7],f_uv.x), 26 }; 27 28 float left_d_b = dot(edge[0], f_uv + offset[0]); 29 float left_d_f = dot(edge[1], f_uv + offset[1]); 30 float left_u_b = dot(edge[2], f_uv + offset[2]); 31 float left_u_f = dot(edge[3], f_uv + offset[3]); 32 float right_d_b = dot(edge[0], f_uv + offset[4]); 33 float right_d_f = dot(edge[1], f_uv + offset[5]); 34 float right_u_b = dot(edge[2], f_uv + offset[6]); 35 float right_u_f = dot(edge[3], f_uv + offset[7]); 36 37 float face[2] = { lerp(edge[0],edge[1],f_uv.y),lerp(edge[2],edge[3],f_uv.y) }; 38 39 float noize = lerp(face[0], face[1], f_uv.z); 40 41 return noize; 42}
試したこと
ある領域に含まれる頂点の数が8つに変化しているため、それぞれ補完しないといけないということは調べて分かったのですが、知識がないためエラーが発生して、エラーの意味が分かりません。
offset変数のタイプが違うとエラーが出てしまいます。
補足情報(FW/ツールのバージョンなど)
VisualStudio2017 VisualC++
DirectX11
回答1件
あなたの回答
tips
プレビュー