192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri/************************************************************************** 292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * 392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * Copyright 2010 Luca Barbieri 492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * 592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * Permission is hereby granted, free of charge, to any person obtaining 692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * a copy of this software and associated documentation files (the 792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * "Software"), to deal in the Software without restriction, including 892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * without limitation the rights to use, copy, modify, merge, publish, 992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * distribute, sublicense, and/or sell copies of the Software, and to 1092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * permit persons to whom the Software is furnished to do so, subject to 1192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * the following conditions: 1292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * 1392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * The above copyright notice and this permission notice (including the 1492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * next paragraph) shall be included in all copies or substantial 1592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * portions of the Software. 1692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * 1792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 2092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 2192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 2292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 2392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri * 2592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri **************************************************************************/ 2692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 2792617aeac109481258f0c3863d09c1b8903d438bLuca Barbiericbuffer cb 2892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri{ 2992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4x4 proj; 3092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4x4 modelview; 3192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4 light; 3292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4 diffuse; 3392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4 specular; 3492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float specular_power; 3592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri}; 3692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 3792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieristruct IA2VS 3892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri{ 3992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4 position : POSITION; 4092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 normal : NORMAL; 4192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri}; 4292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 4392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieristruct VS2PS 4492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri{ 4592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float4 position : SV_POSITION; 4692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 normal : NORMAL; 4792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 eye : EYE; 4892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 light : LIGHT; 4992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri}; 5092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 5192617aeac109481258f0c3863d09c1b8903d438bLuca BarbieriVS2PS vs(IA2VS input) 5292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri{ 5392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri VS2PS result; 5492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 5592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 view = mul((float3x4)modelview, input.position); 5692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri result.position = mul((float4x4)proj, float4(view, 1)); 5792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri result.light = light - view; 5892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri result.eye = -view; 5992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri result.normal = mul((float3x3)modelview, input.normal); 6092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 6192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri return result; 6292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri} 6392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 6492617aeac109481258f0c3863d09c1b8903d438bLuca Barbierifloat4 ps(VS2PS input) : SV_TARGET 6592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri{ 6692617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 nlight = normalize(input.light); 6792617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float3 nnormal = normalize(input.normal); 6892617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 6992617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float diffuse_c = saturate(dot(nnormal, nlight)); 7092617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri float specular_c = pow(saturate(dot(nnormal, normalize(normalize(input.eye) + nlight))), specular_power); 7192617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 7292617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri return diffuse * diffuse_c + specular * specular_c; 7392617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri} 7492617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 7592617aeac109481258f0c3863d09c1b8903d438bLuca Barbieri 76