///////////// // GLOBALS // ///////////// Texture2D shaderTexture : register( t0 ); SamplerState SampleType : register( s0 ); // Matrizen für die einzelnen Knochen des Modells struct MatrixBuffer { matrix knochenMatrix[ 128 ]; }; // The projection and view matrix struct KameraBuffer2 { matrix view; matrix projection; }; // The position of the kamera struct KameraBuffer { float4 kPosition; }; // these values should sum up to 1 struct Material { float ambientFactor; float diffusFactor; float specularFactor; }; struct LightCount { int diffuseLightCount; int pointLightCount; }; ConstantBuffer Kamera2 : register( b0 ); ConstantBuffer Skelett : register( b1 ); ConstantBuffer Kamera : register( b2 ); ConstantBuffer Object : register( b3 ); ConstantBuffer Light : register( b4 ); // lights struct DiffuseLight { float3 direction; float3 color; }; struct PointLight { float3 position; float3 color; float radius; }; //StructuredBuffer< DiffuseLight > difuseLights : register( t1 ); //StructuredBuffer< PointLight > pointLights : register( t2 ); ////////////// // TYPEDEFS // ////////////// struct PixelInputType { float4 worldPos : POSITION; float4 position : SV_POSITION; float2 tex : TEXCOORD; float3 normal : NORMAL; }; //////////////////////////////////////////////////////////////////////////////// // Pixel Shader //////////////////////////////////////////////////////////////////////////////// float4 main( PixelInputType input ) : SV_TARGET { float3 diffuseLight = float3( 0, 0, 0 ); float3 specularLight = float3( 0, 0, 0 ); /* for( int j = 0; j < Light.diffuseLightCount; j++ ) { if( dot( input.normal, -difuseLights[ j ].direction ) < 0 ) continue; diffuseLight += difuseLights[ j ].color * dot( input.normal, -difuseLights[ j ].direction ); } for( int i = 0; i < Light.pointLightCount; i++ ) { float3 lightDir = pointLights[ i ].position - input.worldPos.xyz; float factor = pointLights[ i ].radius / length( lightDir ); float f = dot( input.normal, normalize( lightDir ) ); if( f > 0 ) { diffuseLight += pointLights[ i ].color * f * factor; f = dot( normalize( reflect( normalize( -lightDir ), input.normal ) ), normalize( Kamera.kPosition.xyz - input.worldPos.xyz ) ); if( f > 0 ) specularLight += pointLights[ i ].color * f * factor; } }*/ float4 materialColor = shaderTexture.Sample( SampleType, input.tex ); float4 textureColor = saturate( materialColor * Object.ambientFactor + float4( diffuseLight.x, diffuseLight.y, diffuseLight.z, 0 ) * Object.diffusFactor + float4( specularLight.x, specularLight.y, specularLight.z, 0 ) * Object.specularFactor ); textureColor.a = materialColor.a; return textureColor; }