Created
February 10, 2015 01:40
-
-
Save andr3wmac/d909ce316aa99ac82d95 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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