2 :copyright: 2011 by Florian Boesch <pyalot@gmail.com>.
3 :license: GNU AGPL3, see LICENSE for more details.
6 var canvas = $('canvas')[0];
8 error: function(glee, description, info){
10 $(canvas).replaceWith($('<div class="error"></div>').append(description));
11 census.error(glee, 'irradiance', info);
13 capabilities: function(glee, description, webgl){
15 census.capabilities(glee, 'irradiance');
18 $(canvas).replaceWith($('<div class="error"></div>').append(description));
19 census.nowebgl('irradiance');
23 var glee = new Glee(canvas, handlers).requestExt('texture_float').load({
25 scattering : 'scattering.shader',
26 cubemap_convolve : 'cubemap_convolve.shader',
27 downsample : 'downsample.shader',
31 var type = glee.texture_float ? glee.gl.FLOAT : glee.gl.UNSIGNED_BYTE;
33 this.fbo = new glee.FBO();
34 this.lightdir = new glee.Vec3();
35 this.lightMat = new glee.Mat3();
36 this.scattering = new glee.CubeProcessor({
41 shader: this.scattering,
43 lightdir: this.lightdir,
46 this.level1 = new glee.CubeProcessor({
51 shader: this.downsample,
52 filter: glee.gl.NEAREST,
54 source: this.scattering.result
57 this.level2 = new glee.CubeProcessor({
62 shader: this.downsample,
63 filter: glee.gl.NEAREST,
65 source: this.level1.result
68 this.level3 = new glee.CubeProcessor({
73 shader: this.downsample,
74 filter: glee.gl.NEAREST,
76 source: this.level2.result
79 this.diffuse = new glee.CubeProcessor({
84 shader: this.cubemap_convolve,
89 source: this.level3.result
92 this.specular = new glee.CubeProcessor({
97 shader: this.cubemap_convolve,
102 source: this.level3.result
107 this.lightMat.ident().rotatex(this.elevation).rotatey(this.orientation);
108 this.lightdir.set(0, 1, 0).mul(this.lightMat);
110 this.scattering.render();
111 this.level1.render();
112 this.level2.render();
113 this.level3.render();
114 this.diffuse.render();
115 this.specular.render();
118 cube_pass: 'cube_pass.shader',
119 cube_lighting: 'cube_lighting.shader',
121 dragon: 'dragon.vbo',
122 onload: function(gl){
123 glee.resize(500, 500);
127 var picker = $.farbtastic('#color', function(color){
128 var r = parseInt(color.substr(1,2), 16)/255;
129 var g = parseInt(color.substr(3,2), 16)/255;
130 var b = parseInt(color.substr(5,2), 16)/255;
131 sky.scattering.uniforms.Kr = [r, g, b];
134 picker.setColor('#307fa9');
137 var update_sky = function(){
138 sky.elevation = $('#elevation').val();
139 sky.orientation = $('#orientation').val();
140 sky.scattering.uniforms.rayleigh_brightness = $('#rayleigh').val()/10;
141 sky.scattering.uniforms.mie_brightness = $('#mie').val()/1000;
142 sky.scattering.uniforms.spot_brightness = Number($('#spot').val());
143 sky.scattering.uniforms.scatter_strength = $('#scatter_strength').val()/1000;
144 sky.scattering.uniforms.rayleigh_strength = $('#rayleigh_strength').val()/1000;
145 sky.scattering.uniforms.mie_strength = $('#mie_strength').val()/10000;
146 sky.scattering.uniforms.rayleigh_collection_power = $('#rayleigh_collected').val()/100;
147 sky.scattering.uniforms.mie_collection_power = $('#mie_collected').val()/100;
148 sky.scattering.uniforms.mie_distribution = $('#mie_distribution').val()/100;
149 sky.specular.uniforms.specularity = $('#specularity').val()/10;
153 $('.sky').change(update_sky);
156 $('#shading_mix').change(function(){
157 scene.uniforms.shading_mix = $(this).val()/100;
160 $('#reflectivity').change(function(){
161 scene.uniforms.reflectivity = $(this).val()/10;
164 $('#drawing').change(function(){
165 drawable = models[$(this).val()];
168 $('button').click(function(){
170 $.each(presets['earth'], function(name){
172 data[name] = picker.color;
175 data[name] = Number($('#' + name).val());
178 console.log(JSON.stringify(data));
181 $('#preset').change(function(){
182 var preset = presets[$(this).val()];
183 $.each(preset, function(name, value){
185 picker.setColor(value);
188 $('#' + name).val(value);
195 cube: new glee.Cube(0.15),
196 sphere: new glee.Sphere(0.2),
201 var view = new glee.Viewpoint({
202 offset: new glee.Vec3(0.0, 0.0, 1.0)
204 var proj = new glee.Perspective({
212 var blit_sky = new glee.Processor({
213 shader: this.cube_pass,
215 inv_view_rot: view.inv_rot,
216 inv_proj: proj.inverse,
219 source: this.sky.scattering.result,
223 var drawable = this.bunny;
225 var scene = new glee.Processor({
229 shader: this.cube_lighting,
233 inv_view_rot: view.inv_rot,
235 inv_proj: proj.inverse,
239 diffuse: this.sky.diffuse.result,
240 specular: this.sky.specular.result
251 glee.schedule(60, function(delta){