- Timestamp:
- Oct 31, 2012, 6:02:05 PM (12 years ago)
- Location:
- data/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
data/trunk/materials/glow.material
r9424 r9425 1 1 vertex_program glow_vs cg 2 2 { 3 4 5 3 source vs_glow.cg 4 entry_point main 5 profiles vs_1_1 arbvp1 6 6 } 7 7 8 8 fragment_program glow_ps cg 9 9 { 10 11 12 profiles ps_2_0 arbfp1 10 source ps_glow.cg 11 entry_point main 12 profiles ps_2_0 arbfp1 13 13 } 14 15 14 16 15 material glow 17 16 { 18 technique 19 { 20 pass 21 { 22 scene_blend alpha_blend 23 depth_check on 24 lighting off 25 emissive 0.5 0.9 1.0 0.0 26 27 vertex_program_ref glow_vs 28 { 29 param_named_auto worldViewProjMatrix worldviewproj_matrix 30 param_named size_value float 0.3 31 param_named_auto time time_0_x 50 32 } 33 34 fragment_program_ref glow_ps 35 { 36 param_named alpha_value float 0.4 37 param_named_auto time time_0_x 50 38 param_named_auto color surface_emissive_colour 39 } 40 } 41 42 } 17 technique 18 { 19 pass 20 { 21 scene_blend alpha_blend 22 depth_check on 23 depth_func less_equal 24 lighting off 25 emissive 0.5 0.9 1.0 0.0 //what color should the glow be, emissive light can be changed through ogre as well 26 27 vertex_program_ref glow_vs 28 { 29 param_named_auto iWorldTMatrix inverse_transpose_world_matrix //don't worry about auto parameters here, they are given 30 param_named_auto iViewMatrix inverse_view_matrix 31 param_named_auto worldMatrix world_matrix 32 param_named_auto viewProjMatrix viewproj_matrix 33 param_named inflate float 0.05 //how much should the glow expand from the model, usually a small value 34 } 35 36 fragment_program_ref glow_ps 37 { 38 param_named alphaValue float 0.5 //base alpha value of glow 39 param_named cutoffAngle float 70.0 //from which view to surface normal angle on should the intensity of the glow decrease 40 param_named exponent float 2.5 //by which exponent should the intensity decrease 41 param_named_auto time time_0_x 50 //how fast should the light pulsate 42 param_named_auto color surface_emissive_colour //don't worry about this one, it makes sure we use the emissive color value 43 } 44 } 45 46 } 43 47 } 44 48 … … 67 71 vertex_program_ref glow_vs 68 72 { 69 param_named_auto worldViewProjMatrix worldviewproj_matrix 70 param_named size_value float 0.2 71 param_named_auto time time_0_x 50 73 param_named_auto iWorldTMatrix inverse_transpose_world_matrix 74 param_named_auto iViewMatrix inverse_view_matrix 75 param_named_auto worldMatrix world_matrix 76 param_named_auto viewProjMatrix viewproj_matrix 77 param_named inflate float 0.2 72 78 } 73 79 74 80 fragment_program_ref glow_ps 75 81 { 76 param_named alpha_value float 0.4 82 param_named alphaValue float 0.4 83 param_named cutoffAngle float 70.0 84 param_named exponent float 2.5 77 85 param_named_auto time time_0_x 50 78 86 param_named_auto color surface_emissive_colour -
data/trunk/programs/ps_glow.cg
r9408 r9425 1 float4 main(uniform float alpha_value, uniform float time, uniform float4 color) : COLOR 1 struct vertexOut 2 2 { 3 color.w = alpha_value * ((sin(time * 5.0) / 3.14 + 1.0) / 2.0 ); 3 float4 position : POSITION; 4 float2 uv : TEXCOORD0; 5 float3 worldNormal : TEXCOORD1; 6 float3 worldView : TEXCOORD2; 7 }; 8 9 float4 main(vertexOut input, uniform float alphaValue, uniform float cutoffAngle, uniform float exponent, uniform float time, uniform float4 color) : COLOR 10 { 11 float3 Nn = normalize(input.worldNormal); 12 float3 Vn = normalize(input.worldView); 13 float alphaMod = dot(Nn, Vn);//this is a measure for how close we are to the edge of a model according to our view 14 float cutoff=cos(cutoffAngle * 3.14 / 180.0);//pi divided by 180 15 if(alphaMod<cutoff)//transform output range so it only affects angles close to 90 degrees 16 { 17 alphaMod/=cutoff; 18 } 19 else 20 { 21 alphaMod=1.0; 22 } 23 alphaMod = pow(alphaMod,exponent); //how fast should the intensity of the glow decrease 24 color.w = alphaMod * alphaValue * ((sin(time)/3.14 + 1.0) / 2.0 + 0.1); 4 25 return color; 5 26 } -
data/trunk/programs/vs_glow.cg
r9408 r9425 1 void main(float4 position : POSITION, float3 normal : NORMAL, float2 uv : TEXCOORD0, out float4 oPosition : POSITION, out float2 oUv : TEXCOORD0, out float4 colour : COLOR, 2 uniform float4x4 worldViewProjMatrix, uniform float size_value, uniform float time ) 1 struct vertexIn 3 2 { 4 float4 myPosition = position; 5 myPosition.xyz += size_value * (1.0 + (sin(time * 5.0) + 1.0) / 5.0 ) * normal; 6 oPosition = mul(worldViewProjMatrix, myPosition); 3 float4 position : POSITION; 4 float4 normal : NORMAL; 5 float2 uv : TEXCOORD0; 6 }; 7 8 struct vertexOut 9 { 10 float4 position : POSITION; //<! transformed position 11 float2 uv : TEXCOORD0; //<! passing on uv information 12 float3 worldNormal : TEXCOORD1; //<! surface normal transformed into world 13 float3 worldView : TEXCOORD2; //<! view direction transformed into world 14 }; 15 16 vertexOut main(vertexIn input, uniform float4x4 iWorldTMatrix, uniform float4x4 iViewMatrix, uniform float4x4 worldMatrix, uniform float4x4 viewProjMatrix, uniform float inflate ) 17 { 18 vertexOut output; 19 float4 myPosition = input.position; 20 output.worldNormal=mul(iWorldTMatrix, input.normal).xyz; //transforming the normal 21 input.normal = normalize(float4(input.normal.xyz,0)); //normalizing the normal according to the three relevant parts 22 myPosition.xyz += inflate * input.normal; //inflating the model into a bigger shape 23 myPosition = mul(worldMatrix, myPosition); //transforming position into world 24 output.worldView = normalize(float3(iViewMatrix[0].w, iViewMatrix[1].w, iViewMatrix[2].w) - myPosition.xyz);//view direction according to world 25 output.position = mul(viewProjMatrix, myPosition); //finish transformation of the position into the projection space 26 output.uv = input.uv; //passing on uv information 27 return output; 7 28 } 8
Note: See TracChangeset
for help on using the changeset viewer.