1
0
Fork 0

Update random vegetation for project Rembrandt. Unfortunately due to a possible bug in the techniques code, the previous tree transparency handling has been disabled for the moment.

This commit is contained in:
Stuart Buchanan 2012-04-04 22:39:46 +01:00
parent fba49c56a3
commit b09e37fefd
3 changed files with 94 additions and 4 deletions

View file

@ -37,6 +37,44 @@
</fogtype> </fogtype>
<!-- END fog include --> <!-- END fog include -->
</parameters> </parameters>
<technique n="10">
<predicate>
<and>
<property>/sim/rendering/rembrandt</property>
<property>/sim/rendering/random-vegetation</property>
</and>
</predicate>
<pass n="0">
<lighting>true</lighting>
<material>
<ambient type="vec4d">1.0 1.0 1.0 1.0</ambient>
<diffuse type="vec4d">1.0 1.0 1.0 1.0</diffuse>
<color-mode>off</color-mode>
</material>
<alpha-test>
<comparison>gequal</comparison>
<reference type="float">0.1</reference>
</alpha-test>
<texture-unit>
<unit>0</unit>
<type>2d</type>
<image>
<use>texture[0]/image</use>
</image>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
</texture-unit>
<program>
<vertex-shader>Shaders/deferred-tree.vert</vertex-shader>
<fragment-shader>Shaders/deferred-tree.frag</fragment-shader>
</program>
<uniform>
<name>texture</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
<technique n="10"> <technique n="10">
<predicate> <predicate>
<and> <and>
@ -123,7 +161,9 @@
</uniform> </uniform>
<!-- END fog include --> <!-- END fog include -->
</pass> </pass>
<pass n="1">
<!--
<pass n="1">
<lighting>true</lighting> <lighting>true</lighting>
<material> <material>
<ambient type="vec4d">1.0 1.0 1.0 1.0</ambient> <ambient type="vec4d">1.0 1.0 1.0 1.0</ambient>
@ -132,7 +172,6 @@
</material> </material>
<render-bin> <render-bin>
<bin-number>2</bin-number> <bin-number>2</bin-number>
<!-- RANDOM_OBJECTS_BIN -->
<bin-name>RenderBin</bin-name> <bin-name>RenderBin</bin-name>
</render-bin> </render-bin>
<alpha-test> <alpha-test>
@ -166,7 +205,6 @@
<type>sampler-2d</type> <type>sampler-2d</type>
<value type="int">0</value> <value type="int">0</value>
</uniform> </uniform>
<!-- BEGIN fog include -->
<uniform> <uniform>
<name>visibility</name> <name>visibility</name>
<type>float</type> <type>float</type>
@ -209,7 +247,7 @@
<use>fogtype</use> <use>fogtype</use>
</value> </value>
</uniform> </uniform>
<!-- END fog include -->
</pass> </pass>
-->
</technique> </technique>
</PropertyList> </PropertyList>

View file

@ -0,0 +1,22 @@
#extension GL_EXT_gpu_shader4 : enable
//
// attachment 0: normal.x | normal.x | normal.y | normal.y
// attachment 1: diffuse.r | diffuse.g | diffuse.b | material Id
// attachment 2: specular.l | shininess | emission.l | unused
//
uniform int materialID;
uniform sampler2D texture;
void main() {
vec4 texel = texture2D(texture, gl_TexCoord[0].st);
if (texel.a < 0.1)
discard;
float specular = 0.0;
float shininess = 0.1;
float emission = 0.0;
// Normal is straight towards the viewer.
vec3 normal2 = (0.0, 0.0, 0.0);
gl_FragData[0] = vec4( 0.5, 0.5, 0.0, 1.0 );
gl_FragData[1] = vec4( gl_Color.rgb * texel.rgb, float( materialID ) / 255.0 );
gl_FragData[2] = vec4( specular, shininess / 255.0, emission, 1.0 );
}

View file

@ -0,0 +1,30 @@
// Tree instance scheme:
// vertex - local position of quad vertex.
// normal - x y scaling, z number of varieties
// fog coord - rotation
// color - xyz of tree quad origin, replicated 4 times.
#version 120
void main() {
// Texture coordinates
float numVarieties = gl_Normal.z;
float texFract = floor(fract(gl_MultiTexCoord0.x) * numVarieties) / numVarieties;
texFract += floor(gl_MultiTexCoord0.x) / numVarieties;
gl_TexCoord[0] = vec4(texFract, gl_MultiTexCoord0.y, 0.0, 0.0);
// Position and scaling
vec3 position = gl_Vertex.xyz * gl_Normal.xxy;
float sr = sin(gl_FogCoord);
float cr = cos(gl_FogCoord);
// Rotation of the generic quad to specific one for the tree.
position.xy = vec2(dot(position.xy, vec2(cr, sr)), dot(position.xy, vec2(-sr, cr)));
position = position + gl_Color.xyz;
gl_Position = gl_ModelViewProjectionMatrix * vec4(position,1.0);
// Color - white.
gl_FrontColor = vec4(1.0, 1.0, 1.0,1.0);
gl_BackColor = vec4(1.0, 1.0, 1.0,1.0);
}