123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /////////////
- // 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<KameraBuffer2> Kamera2 : register( b0 );
- ConstantBuffer<MatrixBuffer> Skelett : register( b1 );
- ConstantBuffer<KameraBuffer> Kamera : register( b2 );
- ConstantBuffer<Material> Object : register( b3 );
- ConstantBuffer<LightCount> 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;
- }
|