View Single Post
  #1  
Old 05-06-2009, 08:23 AM
shivanangel shivanangel is offline
Member
 
Join Date: Feb 2006
Location: New Jersey
Posts: 182
Specular Shader Issue

Hello,

I was wondering if I could get a help with a Specular Shader problem.

I made a shader in the program AMD RenderMonkey, which if you are not familiar with is a 'sandbox' for making shaders and testing them out.

Everything works fine in RenderMonkey, but I run into the issue of nothing
rendering when I move into Vizard.

My Vertex Shader is:

Code:
//Uniform 

uniform vec3 LightPosition;
uniform vec3 EyePosition;
//Varying

varying vec3 ViewDirection;
varying vec3 LightDirection;
varying vec3 Normal;
varying vec2 Texcoord;
//Attributes

void main(void)
{
   gl_Position = ftransform();
   
   Texcoord = gl_MultiTexCoord0.xy;
   
   vec4 objectPosition = gl_ModelViewMatrix * gl_Vertex;
   
   LightDirection = (gl_ModelViewMatrix * vec4(LightPosition, 1)).xyz - objectPosition.xyz;
   ViewDirection = EyePosition - objectPosition.xyz;
   Normal = gl_NormalMatrix * gl_Normal;
}

My Fragment Shader:

Code:
uniform vec4 Diffuse;
uniform vec4 Ambient;
uniform vec4 Specular;
uniform vec3 LightPosition;
uniform vec3 EyePosition;
uniform float SpecularPower;

uniform sampler2D TexMap;
uniform sampler2D SpecMap;

varying vec3 LightDirection;
varying vec3 ViewDirection;
varying vec3 Normal;

varying vec2 Texcoord;

void main(void)
{
   vec3 nLightDirection = normalize(LightDirection);
   vec3 nNormal = normalize(Normal);
   
   float NDotL = dot(nNormal, nLightDirection);
  
   vec3 Reflection = normalize(((2.0 * nNormal) * NDotL) - nLightDirection); 
   vec3 nViewDirection = normalize(ViewDirection);
   float RDotV = max(0.0,dot(Reflection, nViewDirection));
   
   
   vec4 diffColor = texture2D(TexMap,Texcoord);
   vec4 specColor = texture2D(SpecMap, Texcoord);
   
   vec4 DiffuseColor = diffColor * Diffuse * NDotL;
   vec4 AmbientColor = Ambient * diffColor;
   vec4 SpecularColor = (Specular * (pow(RDotV, SpecularPower))) * specColor;
   
   gl_FragColor = DiffuseColor + AmbientColor + SpecularColor;
}

And my Vizard code for bringing in the shader and attaching it to the model:

Code:
import viz

viz.go()

shader = viz.addShader(flag = 0, vert = "SpecMap.vp", frag = "SpecMap.fp")

viz.MainView.eyeheight(0.0)

#Load model
trex = viz.add("TREX//TRex.CFG")

trex2 = viz.add('sphere.obj')
trex2.setPosition(15,0,0)
#Load Textures
TexMap = viz.addTexture('TRexTex_10_TexMap.bmp')
SpecMap = viz.addTexture('TRexTex_10_SpecMap.bmp')

#Attach textures
trex.texture(TexMap, '', 0)
trex.texture(SpecMap, '', 1)

trex2.texture(TexMap, '', 0)
trex2.texture(SpecMap, '', 1)

#Vertex Uniforms
EyePosition = viz.addUniformFloat('EyePosition', [0.0,0.0,0.0])
LightPosition = viz.addUniformFloat('fvLightPosition', [100,200,100])

#Fragment Uniforms
Diffuse = viz.addUniformFloat('Diffuse',[1.0,1.0,1.0,1.0])
Ambient = viz.addUniformFloat('Ambient',[1.0,1.0,1.0,1.0])
Specular = viz.addUniformFloat('Specular', [1.0,1.0,1.0,1.0])
SpecularPower = viz.addUniformFloat('SpecularPower', 3)

Texture =  viz.addUniformInt( 'TexMap', 0 )
SpecularMap = viz.addUniformInt( 'SpecMap', 1 )

shader.attach(Texture)
shader.attach(SpecularMap)

trex.apply(shader)
trex2.apply(shader)
Reply With Quote