XNA 多光源镜面反射
每盏灯都可以有镜面反射,最多支持三盏灯,再多就不能使用ps2_0,附上HLSL代码和执行文件,自己玩吧^_^
1
float4x4 World;
2
float4x4 View;
3
float4x4 Projection;
4
float4x4 WorldViewProjection;
5
float3 EyePosition;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
#define MaxLights 3
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
float3 LightDirs[MaxLights];
10
float4 LightColors[MaxLights];
11
int LightCount;
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
float4 AmbientColor = float4(0.05,0.05,0.05,1);
14
float SpecularPower = 16;
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
texture Texture;
17
sampler TextureSampler = sampler_state
18
{
19
Texture = (Texture);
20
AddressU = Wrap;
21
AddressV = Wrap;
22
AddressW = Wrap;
23
MinFilter = Linear;
24
MagFilter = Linear;
25
MipFilter = Linear;
26
};
27![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
struct VertexShaderInput
29
{
30
float4 pos : POSITION0;
31
float2 texCoord : TEXCOORD0;
32
float3 normal : NORMAL;
33
float3 tangent : TANGENT;
34
};
35![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
struct VertexShaderOutput
37
{
38
float4 pos : POSITION0;
39
float2 texCoord : TEXCOORD0;
40
float3 normal : TEXCOORD1;
41
float3 view : TEXCOORD2;
42
};
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
45
{
46
VertexShaderOutput output;
47![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
WorldViewProjection = mul(mul(World, View), Projection);
49
output.pos = mul(input.pos, WorldViewProjection);
50
output.texCoord = input.texCoord;
51
output.normal = mul(input.normal, (float3x3)World);
52
output.view = EyePosition - mul(input.pos, World);
53
54
return output;
55
}
56![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
58
{
59
float4 diffuseSum = 0;
60
float4 specularSum = 0;
61
for(int i = 0; i < LightCount; i++)
62
{
63
float3 L = normalize(-LightDirs[i]);
64
float3 N = normalize(input.normal);
65
float3 R = normalize(reflect(LightDirs[i], N));
66
float3 V = normalize(input.view);
67![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
diffuseSum += saturate(dot(N, L)) * LightColors[i];
69
specularSum += pow(saturate(dot(R, V)), SpecularPower);
70
}
71
72
float4 textureColor = tex2D(TextureSampler, input.texCoord);
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
float4 final = AmbientColor + textureColor * diffuseSum + specularSum;
75![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
return final;
77
}
78![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
technique Technique1
80
{
81
pass Pass1
82
{
83
VertexShader = compile vs_2_0 VertexShaderFunction();
84
PixelShader = compile ps_2_0 PixelShaderFunction();
85
}
86
}
87![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
转载请注明出处:
作者:gogoplayer
E-mail : gogoplayer@163.com
QQ : 78939328
posted on 2008-11-13 16:09 gogoplayer 阅读(1855) 评论(6) 编辑 收藏 举报