📄 simpvslighting.fx
字号:
//------------------------------------
float4x4 worldViewProj : WorldViewProjection;
float4x4 normalMat : worldView;
texture diffuseTexture : DIFFUSE;
//光线方向向量
float4 lightDir : Direction
<
string Object = "DirectionalLight";
string Space = "World";
> = {1.0f, -1.0f, 1.0f, 0.0f};
//灯光颜色
float4 lightColor : Diffuse
<
string UIName = "Diffuse Light Color";
string Object = "DirectionalLight";
> = {1.0f, 1.0f, 1.0f, 1.0f};
//灯光环境色
float4 lightAmbient : Ambient
<
string UIWidget = "Ambient Light Color";
string Space = "material";
> = {0.0f, 0.0f, 0.0f, 1.0f};
//材质漫反射色
float4 materialDiffuse : Diffuse
<
string UIWidget = "Surface Color";
string Space = "material";
> = {1.0f, 1.0f, 1.0f, 1.0f};
//材质高光色
float4 materialSpecular : Specular
<
string UIWidget = "Surface Specular";
string Space = "material";
> = {1.0f, 1.0f, 1.0f, 1.0f};
//材质高光亮度指数值
float shininess : SpecularPower
<
string UIWidget = "slider";
float UIMin = 1.0;
float UIMax = 128.0;
float UIStep = 1.0;
string UIName = "specular power";
> = 30.0;
//------------------------------------
//VertexShader输入结构体
struct vertexInput
{
float3 position : POSITION;
float3 normal : NORMAL;
float4 texCoordDiffuse : TEXCOORD0;
};
//VertexShader输出结构体
struct vertexOutput
{
float4 hPosition : POSITION;
float4 texCoordDiffuse : TEXCOORD0;
float4 diffAmbColor : COLOR0;
float4 specCol : COLOR1;
};
//------------------------------------
//VertexShader
vertexOutput vs_main(vertexInput IN)
{
vertexOutput OUT;
OUT.hPosition = mul( float4(IN.position.xyz , 1.0) , worldViewProj);
OUT.texCoordDiffuse = IN.texCoordDiffuse;
//calculate our vectors N, E, L, and H
float3 EyePos = (0.0f,0.0f,0.0f);
float4 N = mul(IN.normal, normalMat); //normal vector
float3 E = normalize(EyePos - OUT.hPosition); //eye vector
float3 L = normalize( mul( -lightDir.xyz , normalMat) ); //light vector
float3 H = normalize(E + L); //half angle vector
//calculate the diffuse and specular contributions
float diff = max(0 , dot(N,L));
float spec = pow( max(0 , dot(N,H) ) , shininess );
if( diff <= 0 )
{
spec = 0;
}
//output diffuse
float4 ambColor = materialDiffuse * lightAmbient;
float4 diffColor = materialDiffuse * diff * lightColor ;
OUT.diffAmbColor = diffColor + ambColor;
//output specular
float4 specColor = materialSpecular * lightColor * spec;
OUT.specCol = specColor;
return OUT;
}
//------------------------------------
//第0层的纹理样本
sampler TextureSampler = sampler_state
{
texture = <diffuseTexture>;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
MIPFILTER = LINEAR;
MINFILTER = LINEAR;
MAGFILTER = LINEAR;
};
//-----------------------------------
//PixelShader
float4 ps_main( vertexOutput IN): COLOR
{
float4 diffuseTexture = tex2D( TextureSampler, IN.texCoordDiffuse );
return IN.diffAmbColor * diffuseTexture + IN.specCol;
}
//-----------------------------------
technique textured
{
pass p0
{
VertexShader = compile vs_2_0 vs_main();
PixelShader = compile ps_2_0 ps_main();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -