11 catalog->register_file_string
25 catalog->register_file_string
31 "ambient": "uMaterial.ambient",
32 "diffuse": "uMaterial.diffuse",
33 "specular": "uMaterial.specular",
34 "shininess": "uMaterial.shininess",
39 "uniform": "uDiffuseMap"
42 "texture": "Specular",
43 "uniform": "uSpecularMap"
50 "path": "img-plain/white"
53 "texture": "Specular",
54 "path": "img-plain/white"
60 catalog->register_file_string
71 out vec3 fragPositionWorld;
73 uniform mat4 uProjection;
76 uniform mat3 uNormalMatrix;
80 gl_Position = uProjection * uView * uModel * vec4(aPosition, 1.0);
81 fragPositionWorld = vec3(uModel * vec4(aPosition, 1.0));
83 normal = uNormalMatrix * aNormal;
87 catalog->register_file_string
110 float cosCutoffAngleInner;
111 float cosCutoffAngleOuter;
121 in vec3 fragPositionWorld;
123 uniform sampler2D uDiffuseMap;
124 uniform sampler2D uSpecularMap;
126 uniform Light uLight;
127 uniform vec3 uViewPosition;
128 uniform Material uMaterial;
132 vec3 ambient = uMaterial.ambient * uLight.ambient;
134 vec3 norm = normalize(normal);
135 vec3 lightDir = uLight.type==0 ? normalize(-uLight.direction) : normalize(uLight.position - fragPositionWorld);
136 float diffuse_factor = max(0.0, dot(norm, lightDir));
137 vec3 diffuse = diffuse_factor * uMaterial.diffuse * uLight.diffuse;
139 float specularStrength = 0.5;
140 vec3 viewDir = normalize(uViewPosition - fragPositionWorld);
141 vec3 reflectDir = reflect(-lightDir, norm);
142 float spec = pow(max(0, dot(viewDir, reflectDir)), uMaterial.shininess);
143 vec3 specular = specularStrength * uMaterial.specular * spec * uLight.specular;
147 float theta = dot(lightDir, normalize(-uLight.direction));
148 if(theta > uLight.cosCutoffAngleOuter)
150 float epsilon = uLight.cosCutoffAngleInner - uLight.cosCutoffAngleOuter;
151 float intensity = clamp((theta - uLight.cosCutoffAngleOuter) / epsilon, 0.0, 1.0);
152 diffuse *= intensity;
153 specular *= intensity;
157 // outside of spotlight
158 diffuse = vec3(0,0,0);
159 specular = vec3(0,0,0);
165 float dist = length(uLight.position - fragPositionWorld);
166 float att = 1.0 / (uLight.attConst + dist*uLight.attLin + dist*dist*uLight.attQuad);
172 vec3 object_color = texture(uDiffuseMap, texCoord).rgb;
173 vec3 specular_map = texture(uSpecularMap, texCoord).rgb;
175 vec3 result = (ambient + diffuse) * object_color + specular * specular_map;
177 FragColor = vec4(result, 1.0);
185 catalog->register_file_string
190 "diffuse": "uDiffuse",
193 "default_textures": []
197 catalog->register_file_string
204 uniform mat4 uProjection;
210 gl_Position = uProjection * uView * uModel * vec4(aPosition, 1.0);
214 catalog->register_file_string
220 uniform vec3 uDiffuse;
226 FragColor = vec4(uDiffuse, 1.0);
233 catalog->register_file_string
240 "default_textures": []
244 catalog->register_file_string
252 uniform mat4 uProjection;
260 gl_Position = uProjection * uView * uModel * vec4(aPosition, 1.0);
265 catalog->register_file_string
277 FragColor = vec4(color, 1.0);
void setup_default_files(std::shared_ptr< io::ReadRootCatalog > catalog)