質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

1回答

857閲覧

DirectX11でソリッドテクスチャを実装したい

isimasa

総合スコア295

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2022/06/01 13:24

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/06/01 13:40

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
isimasa

2022/06/01 13:48

発生しているエラーメッセージに書いてある通りです。HLSLなのでVisualStudioの標準機能のリファレンスが検索しても出てこず、質問した次第です。
guest

回答1

0

自己解決

hlsli

1float SoridTexture(float3 vec,float block) 2{ 3 vec *= block; 4 // 左上の座標を取得 5 float3 i_uv = floor(vec); 6 // ピクセル位置を取得 7 float3 f_uv = frac(vec); 8 9 float3 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 float3 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[0], f_uv + offset[1]); 30 float left_u_b = dot(edge[1], f_uv + offset[2]); 31 float left_u_f = dot(edge[1], f_uv + offset[3]); 32 float right_d_b = dot(edge[2], f_uv + offset[4]); 33 float right_d_f = dot(edge[2], f_uv + offset[5]); 34 float right_u_b = dot(edge[3], f_uv + offset[6]); 35 float right_u_f = dot(edge[3], f_uv + offset[7]); 36 37 float3 face[2] = { lerp(edge[0],edge[1],f_uv.y),lerp(edge[2],edge[3],f_uv.y) }; 38 39 float3 noize = lerp(face[0], face[1], f_uv.z); 40 41 return noize; 42}

このように修正しました。合ってますかね。
ソリッドテクスチャ

投稿2022/06/01 14:19

isimasa

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問