Hallo jotha,
hier das müsste bei Dir normalerweise funktionieren.
//////////////////////////////////////////////////////////////////////////
//WDL-Script
/*WADTEX durch die Materialnamen der Wadtexturen ersetzen
NORMALTEX durch die Namen der Normal-Maps ersetzen
WICHTIG: die Normal - Maps und die bump_diffuse.fx Datei müssen sich im
Levelordner befinden*/
var d3d_automaterial = 1;
var d3d_lightres = on;
// Normal-Maps laden
bmap NORMALTEX = <NORMALTEX.tga>;
// Matrial für Levelblocks
material WADTEX
{
skin1=NORMALTEX;
flags=tangent;
}
starter load_fx
{
bmap_to_mipmap(WADTEX.skin1);
effect_load(WADTEX,"bump_specular.fx";
}
////////////////////////////
//////////////////////////////
// Dyna-Licht
//////////////////////////////
Action dynalicht
{
vec_set(my.x, nullvector);
while(1)
{
my.red = 200;
my.green = 185;
my.blue = random(30)+150;
my.lightrange = random(50)+ 150;
my.x = fcos(my.skill1,120);
my.y = fsin(my.skill1,120);
my.z = fsin(my.skill1,120);
my.skill1 += time;
wait(1);
}
}
//////////////////////////////////////////////////////////////////////////
// FX-Datei (bump_diffuse.fx)
/*****************************************************************************
Secular Bumpmapping (auf Levelblocks)
******************************************************************************/
float4x4 matWorldViewProj : WorldViewProjection;
float4x4 matWorld : World;
float4x4 matViewInv : ViewInverse;
float4 vecLightPos[8];
float4 vecLightColor[8];
float4 AmbiColor : Ambient = {0.07f, 0.07f, 0.07f, 1.0f};
float4 SurfColor : DIFFUSE = {1.5f, 1.5f, 1.5f, 1.0f};
float SpecExpon : SpecularPower = 64.0;
float Bumpy = 3.0;
//////////
texture entSkin1 : DIFFUSE;
texture mtlSkin1 : NORMAL;
sampler2D colorSampler = sampler_state
{
Texture = <entSkin1>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
};
sampler2D normalSampler = sampler_state
{
Texture = <mtlSkin1>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
};
struct appdata {
float3 Position : POSITION;
float4 UV : TEXCOORD1;
float4 Normal : NORMAL;
float4 Tangent : TEXCOORD3;
float4 Binormal : TEXCOORD2;
};
struct vertexOutput {
float4 HPosition : POSITION;
float4 TexCoord : TEXCOORD1;
float3 LightVec : TEXCOORD0;
float3 WorldNormal : TEXCOORD2;
float3 WorldEyeVec : TEXCOORD3;
float3 WorldTangent : TEXCOORD4;
float3 WorldBinorm : TEXCOORD5;
};
vertexOutput mainVS(appdata IN)
{
vertexOutput OUT;
OUT.WorldNormal = mul(IN.Normal, matWorld).xyz;
OUT.WorldTangent = mul(IN.Tangent, matWorld).xyz;
OUT.WorldBinorm = mul(IN.Binormal, matWorld).xyz;
float4 tempPos = float4(IN.Position.x,IN.Position.y,IN.Position.z,1.0);
float3 worldSpacePos = mul(tempPos, matWorld).xyz;
OUT.LightVec = vecLightPos[1] - worldSpacePos;
OUT.TexCoord = IN.UV;
OUT.WorldEyeVec = normalize(matViewInv[3].xyz - worldSpacePos);
OUT.HPosition = mul(tempPos, matWorldViewProj);
return OUT;
}
float4 mainPS(vertexOutput IN) : COLOR
{
float4 map = tex2D(colorSampler,IN.TexCoord.xy);
float3 bumps = Bumpy * (tex2D(normalSampler,IN.TexCoord.xy).xyz-(0.5).xxx);
float3 Ln = normalize(IN.LightVec);
float3 Nn = normalize(IN.WorldNormal);
float3 Tn = normalize(IN.WorldTangent);
float3 Bn = normalize(IN.WorldBinorm);
float3 Nb = Nn + (bumps.x * Tn + bumps.y * Bn);
Nb = normalize(Nb);
float3 Vn = normalize(IN.WorldEyeVec);
float3 Hn = normalize(Vn + Ln);
float4 lighting = lit(dot(Ln,Nb),dot(Hn,Nb),SpecExpon);
float hdn = lighting.z;
float ldn = lighting.y;
float diffComp = ldn;
float4 diffContrib = SurfColor * map * (diffComp*vecLightColor[1] + AmbiColor);
float4 specContrib = hdn * vecLightColor[1];
float4 result = AmbiColor + diffContrib + specContrib;
return result;
}
technique dx9textured
{
pass p0
{
VertexShader = compile vs_2_0 mainVS();
ZEnable = true;
ZWriteEnable = true;
PixelShader = compile ps_2_0 mainPS();
}
}
mfg
mpde