第14回 HLSL入門
3 / 4 HLSLの基本的な書き方
HLSLの基本的な構文について解説します。
C言語に似た構文を持ちますが、まったく同じではないことに注意してください。
変数とベクトル
HLSLでは、変数やベクトルを用いてデータを扱います。
ここでは基本的な変数の宣言方法やベクトルの扱い方について解説します。
変数と数値型
HLSLの基本的な数値型には以下のようなものがあります。
float: 単精度浮動小数点数int: 整数bool: 真偽値
変数の宣言例は以下の通りです。
hlsl
float myFloat = 0.5;
int myInt = 10;
bool myBool = true;ベクトルの成分と演算
HLSLでは、ベクトル型を用いて複数の数値をまとめて扱うことができます。
例えば、float2は2次元ベクトル、float3は3次元ベクトル、float4は4次元ベクトルを表します。
hlsl
float2 myVec2 = float2(1.0, 2.0);
float3 myVec3 = float3(1.0, 2.0, 3.0);
float4 myVec4 = float4(1.0, 2.0, 3.0, 4.0);ベクトル同士の演算も可能です。
hlsl
float3 a = float3(1.0, 2.0, 3.0);
float3 b = float3(4.0, 5.0, 6.0);
float3 c = a + b; // c = float3(5.0, 7.0, 9.0)関数と構造体
関数と戻り値
HLSLでは、関数を用いて処理をまとめることができます。
関数は戻り値の型、関数名、引数リストを指定して定義します。
例えば、2つの浮動小数点数を加算する関数は以下のように定義できます。
hlsl
float Add(float a, float b)
{
return a + b;
}構造体とデータの受け渡し
HLSLでは、構造体を用いて複数のデータをまとめることができます。
構造体はstructキーワードを用いて定義します。
例えば、頂点の位置と色をまとめた構造体は以下のように定義できます。
hlsl
struct VertexInput
{
float3 position : POSITION;
float4 color : COLOR;
};構造体を用いることで、関数間で複数のデータをまとめて受け渡すことができます。
単色を表示する最小コード
以下に、単色を表示する最小限のHLSLコードの例を示します。
hlsl
struct VertexInput
{
float3 position : POSITION;
};
struct VertexOutput
{
float4 position : SV_POSITION;
};
VertexOutput vert(VertexInput input)
{
VertexOutput output;
output.position = float4(input.position, 1.0);
return output;
}
float4 frag() : SV_TARGET
{
return float4(1.0, 0.0, 0.0, 1.0); // 赤色
}