float4x4 World; float4x4 View; float4x4 Projection; float4 Amb; float4 Diff0; float4 Diff1; float4 Diff2; float4 Dir0; float4 Dir1; float4 Dir2; // グローバル変数のテスト // int counter; // static int counter; // extern int counter; // uniform int counter; // shared int counter; // static int counter = 0; // extern int counter = 0; // uniform int counter = 0; // shared int counter = 0; // static int counter : register(vs, c10); // extern int counter : register(vs, c10); // uniform int counter : register(vs, c10); shared int counter : register(vs, c10); texture MyTexture; sampler mySampler = sampler_state{ Texture = ; MagFilter = Linear; MinFilter = Linear; }; struct VertexShaderInput { float4 Position : POSITION0; float3 Normal: NORMAL0; float4 TextureCoordinate0 : TEXCOORD0; float4 TextureCoordinate1 : TEXCOORD1; float4 TextureCoordinate2 : TEXCOORD2; float4 TextureCoordinate3 : TEXCOORD3; half4 patternNumber : TEXCOORD4; }; struct VertexShaderOutput { float4 Position : POSITION0; float4 TextureCoordinate : TEXCOORD; float4 Color: COLOR0; // half4 patternNumber : TEXCOORD4; }; VertexShaderOutput VertexShaderFunction(VertexShaderInput input) { VertexShaderOutput output; float4 worldPosition = mul(input.Position, World); float4 viewPosition = mul(worldPosition, View); output.Position = mul(viewPosition, Projection); // output.TextureCoordinate = input.TextureCoordinate1; counter++; // if (counter > 5) // counter = 0; // counterの値をチェックしてテクスチャ座標を設定する if (counter == 0 || counter == 3) output.TextureCoordinate = input.TextureCoordinate0; else if (counter == 1) output.TextureCoordinate = input.TextureCoordinate1; else if (counter == 2 || counter == 4) output.TextureCoordinate = input.TextureCoordinate3; else output.TextureCoordinate = input.TextureCoordinate2; float4 worldNormal = mul(input.Normal, World); float4 viewNormal = mul(worldNormal, View); float3 N = mul(viewNormal, Projection); float4 col0 = Diff0 * max(dot(N,Dir0),0) + Diff0 * Amb; float4 col1 = Diff1 * max(dot(N,Dir1),0) + Diff1 * Amb; float4 col2 = Diff2 * max(dot(N,Dir2),0) + Diff2 * Amb; output.Color = col0 + col1 + col2; // output.patternNumber = input.patternNumber; return output; } float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0 { return tex2D(mySampler, input.TextureCoordinate) * input.Color; } technique Technique1 { pass Pass1 { VertexShader = compile vs_1_1 VertexShaderFunction(); // VertexShader = compile vs_2_0 VertexShaderFunction(); // PixelShader = compile ps_1_1 PixelShaderFunction(); PixelShader = compile ps_2_0 PixelShaderFunction(); } }