0

hlsl で拡散反射を実行しようとしています。現在、私は頂点シェーダーに取り組んでいます。残念ながら、でコンパイルしようとすると、次のエラーが発生しますfxc.exe

C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c1'
C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c2'
C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c3'

頂点シェーダー コード:

    float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c1);
float4 LightAmbient;
float4 LightPosition;


struct VertexData
{
    float4 Position : POSITION;
    float4 Normal : NORMAL;
    float3 UV : TEXCOORD;
};

struct VertexShaderOutput
{
    float4 Position : POSITION;
    float3 Color: COLOR;
};

VertexShaderOutput main(VertexData vertex)
{
    VertexShaderOutput output;


    vertex.Normal = normalize(vertex.Normal);

    float4 newColor = LightAmbient;

    vector obj_light = mul(LightPosition, inv_world_matrix);
    vector LightDir = normalize(obj_light - vertex.Position);
    float DiffuseAttn = max(0, dot(vertex.Normal, LightDir));
    vector light = { 0.8, 0.8, 0.8, 1 };
    newColor += light * DiffuseAttn;

    output.Position = mul(vertex.Position, WorldViewProj);
    output.Color = float3(newColor.r, newColor.g, newColor.b);
    return output;
}

そして、コンパイルを実行するために使用するコマンド:

fxc /T vs_2_0 /O3 /Zpr /Fo VertexShader.vs VertexShader.vs.hlsl

このエラーが発生するのはなぜですか? これを防ぐにはどうすればよいですか?

4

1 に答える 1

2

見つけた - 誰かが役に立つと思うかもしれないので、私はこの質問を削除していません。

やるべきことは変わること

float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c1);

float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c4);

何が問題なのかはわかりませんが、float4x4 はそのバッファーでより多くのスペースを使用すると想定しています (4x4 - 4 か所必要です)。その説明は少しばかげていると思いますが、うまくいきます。

于 2015-09-09T12:40:32.503 に答える