Skip to content

Instantly share code, notes, and snippets.

@andr3wmac
Created February 10, 2015 01:40
Show Gist options
  • Save andr3wmac/d909ce316aa99ac82d95 to your computer and use it in GitHub Desktop.
Save andr3wmac/d909ce316aa99ac82d95 to your computer and use it in GitHub Desktop.
// Settings
var encode_color = new THREE.Vector3(1, 0, 0);
var encode_dir = new THREE.Vector3(0, 1, 0);
var decode_dir = new THREE.Vector3(0, 1, 0);
// SH Constants
var fConst00 = Math.sqrt( 1/4 * Math.PI );
var fConst01 = Math.sqrt( 2/4 * Math.PI );
var fConst02 = Math.sqrt( 3/4 * Math.PI );
var fConst03 = Math.sqrt( 4/4 * Math.PI );
function Encode( dir, color )
{
var sh = new Array(4);
// sh[0] += colour * fConst00;
var first = new THREE.Vector3(color.x, color.y, color.z);
first.multiplyScalar(fConst00);
sh[0] = first;
// sh[1] += colour * fConst01 * dir.x;
var second = new THREE.Vector3(color.x, color.y, color.z);
second.multiplyScalar(fConst01);
second.multiplyScalar(dir.x);
sh[1] = second;
// sh[2] += colour * fConst02 * dir.y;
var third = new THREE.Vector3(color.x, color.y, color.z);
third.multiplyScalar(fConst02);
third.multiplyScalar(dir.y);
sh[2] = third;
// sh[3] += colour * fConst03 * dir.z;
var fourth = new THREE.Vector3(color.x, color.y, color.z);
fourth.multiplyScalar(fConst03);
fourth.multiplyScalar(dir.z);
sh[3] = fourth;
return sh;
}
function Decode( dir, sh )
{
var color = new THREE.Vector3( 0, 0, 0 );
// color += sh[0];
color.add(color, sh[0]);
// color += sh[1] * dir.x;
sh[1].multiplyScalar(dir.x);
color.add(color, sh[1]);
// color += sh[2] * dir.y;
sh[2].multiplyScalar(dir.y);
color.add(color, sh[2]);
// color += sh[3] * dir.z;
sh[3].multiplyScalar(dir.z);
color.add(color, sh[3]);
return color;
}
// Encode, Decode
var output_sh = Encode(encode_dir, encode_color);
var output_color = Decode(decode_dir, output_sh);
// Output Result
alert("Decoded Color: \n[" + output_color.x + "," + output_color.y + "," + output_color.z + "]");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment