mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-13 14:47:23 +02:00
float specular = max(0.0, dot(normalize(gl_LightSource[0].position + vec4(0.0, 0.0, 1.0, 0.0)), normalizedNormal)); to float specular = max(0.0, dot(gl_LightSource[0].position, normalizedNormal)); Calculation for specular value has to be done like in all other shaders with the unmodified unnormalized lightsource position. Otherwise the specular effect will have weird behaviour.
32 lines
1.1 KiB
GLSL
32 lines
1.1 KiB
GLSL
#version 120
|
|
|
|
//
|
|
// model.frag
|
|
// fragment shader
|
|
//
|
|
// Created by Andrzej Kapolka on 10/14/13.
|
|
// Copyright 2013 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
// the diffuse texture
|
|
uniform sampler2D diffuseMap;
|
|
|
|
// the interpolated normal
|
|
varying vec4 normal;
|
|
|
|
void main(void) {
|
|
// compute the base color based on OpenGL lighting model
|
|
vec4 normalizedNormal = normalize(normal);
|
|
vec4 base = gl_Color * (gl_FrontLightModelProduct.sceneColor + gl_FrontLightProduct[0].ambient +
|
|
gl_FrontLightProduct[0].diffuse * max(0.0, dot(normalizedNormal, gl_LightSource[0].position)));
|
|
|
|
// compute the specular component (sans exponent)
|
|
float specular = max(0.0, dot(gl_LightSource[0].position, normalizedNormal));
|
|
|
|
// modulate texture by base color and add specular contribution
|
|
gl_FragColor = base * texture2D(diffuseMap, gl_TexCoord[0].st) +
|
|
vec4(pow(specular, gl_FrontMaterial.shininess) * gl_FrontLightProduct[0].specular.rgb, 0.0);
|
|
}
|