shader diffuse bumpmapping(Cg)
Aus DGL Wiki
Version vom 31. Oktober 2008, 15:14 Uhr von Igel457 (Diskussion | Beiträge) (Die Seite wurde neu angelegt: =Shadername= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |Wendet diffuses Bumpmapping ...)
Inhaltsverzeichnis
Shadername
Zurück zur Shadersammlung
Beschreibung | Autor | Version |
---|---|---|
Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an. | Igel457 | 1.0 |
Bilder
Beschreibung
kommt noch...
Besondere Vorraussetzungen
kommt noch...
Code
struct fs_res { float4 color : COLOR; }; float3 expand(float3 v) { return (v - 0.5) * 2; // Expand a range-compressed vector } fs_res fragment_shader( float2 colortexcoords: TEXCOORD0, float3 lightdirection: TEXCOORD1, float4 color: COLOR, uniform sampler2D colormap, uniform sampler2D normalmap, uniform float lightintensity, uniform float4 ambientcolor ) { fs_res OUT; float3 light = expand(lightdirection); float3 normaltex = tex2D(normalmap, colortexcoords).xyz; float3 normal = expand(normaltex); OUT.color = (dot(-normal, light) * lightintensity * color + ambientcolor) * tex2D(colormap, colortexcoords); return OUT; } struct vs_res { float4 position : POSITION; float4 color : COLOR; float2 colortexcoords: TEXCOORD0; float3 lightdirection: TEXCOORD1; }; vs_res vertex_shader( float3 position : POSITION, float3 normal : NORMAL, float4 color : COLOR, float4 colortexcoords : TEXCOORD0, uniform float4x4 modelview, uniform float3 lightpos, uniform float4 lightcolor ) { vs_res OUT; //Transform the vertex position to the world position OUT.position = mul(modelview, float4(position, 1)); //Comment this line if you don't want the shader to transform the light position //to the world position float4 lp = mul(modelview, float4(lightpos, 1)); //Set the color texture coordinates OUT.colortexcoords = colortexcoords; //Set the color of the vertex OUT.color = color * lightcolor; //Stor the light direction in a second texture coordinate vector OUT.lightdirection = normalize(position.xyz - lightpos); return OUT; }