[ glorius @ 29.01.2006. 17:43 ] @
Poceo sam da radim sa GLSL. Uzeo sam primer sa neta koji kombinuje difuznu i specular boju sa bojom teksture. Code: //////////////// *** VERTEX SHADER PART *** /////////////////// varying float LightIntensity; const float specularContribution = 0.1; const float diffuseContribution = 1.0 - specularContribution; void main(void) { vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex); vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal); vec3 lightVec = normalize((gl_LightSource[0].position.xyz) - ecPosition); vec3 reflectVec = reflect(-lightVec, tnorm); vec3 viewVec = normalize(-ecPosition); float spec = clamp(dot(reflectVec, viewVec), 0.0, 1.0); spec = pow(spec, 16.0); LightIntensity = diffuseContribution * max(dot(lightVec, tnorm), 0.0) + specularContribution * spec; gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = ftransform(); } Code: //////////////// *** FRAGMENT SHADER PART *** /////////////////// varying float LightIntensity; uniform sampler2D myTexture; void main (void) { vec3 lightColor = vec3 (texture2D(myTexture, gl_TexCoord[0].st)); // kada ne koristim ovu funkciju sve radi OK gl_FragColor = vec4 (lightColor * LightIntensity, 1.0); } Problem je sto je aplikacija neverovatno spora. Primer koji koristi ovaj kod radi super ali sam napravio svoju aplikaciju i sve ide sporo ( bez koriscenja texture, znaci samo difuzna, specular i ambient color, framerate je > 1000 ). Ukljucivao sam i slozenije primere ( Bump + Reflection ) i sve ide glatko. Problem u OpenGL kodu? Verovatno, ali koji? |