/* This file contains proprietary software owned by Motorola Mobility, Inc.
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
*/ // RDGE namespaces var RDGE = RDGE || {}; /* // Methods not currently used in Ninja RDGE.getRandColor = function () { var r = Math.random(); var g = Math.random(); var b =Math.random(); return [r, g, b, 1.0]; }; RDGE.unProject = function (winx, winy, winz, modelMatrix, projMatrix, viewport) { var inVal = [0,0,0,0]; var finalMatrix = RDGE.mat4.mul(modelMatrix, projMatrix); finalMatrix = RDGE.mat4.inverse(finalMatrix); if(!finalMatrix) return null; inVal[0]=winx; inVal[1]=winy; inVal[2]=winz; inVal[3]=1.0; // Map x and y from window coordinates inVal[0] = (inVal[0] - viewport[0]) / viewport[2]; inVal[1] = (inVal[1] - viewport[1]) / viewport[3]; // Map to range -1 to 1 inVal[0] = inVal[0] * 2 - 1; inVal[1] = inVal[1] * 2 - 1; inVal[2] = inVal[2] * 2 - 1; var v4Out = RDGE.mat4.transformPoint(finalMatrix, inVal); if (v4Out[3] <= 0.0001) return null; v4Out[0] /= v4Out[3]; v4Out[1] /= v4Out[3]; v4Out[2] /= v4Out[3]; return [ v4Out[0], v4Out[1], v4Out[2] ]; }; RDGE.AABB2LineSegment = function (box, startPoint, endPoint) { c = RDGE.vec3.scale(RDGE.vec3.add(box.min, box.max), 0.5); e = RDGE.vec3.sub(box.max, box.min); d = RDGE.vec3.sub(endPoint, startPoint); m = RDGE.vec3.sub(startPoint, endPoint); m = RDGE.vec3.sub(m, box.min), m = RDGE.vec3.sub(m, box.max); var adx = Math.abs(d[0]); if( Math.abs(m[0]) > e[0] + adx ) return false; var ady = Math.abs(d[1]); if( Math.abs(m[1]) > e[1] + ady ) return false; var adz = Math.abs(d[2]); if( Math.abs(m[2]) > e[2] + adz ) return false; adx += 1.192092896e-07; ady += 1.192092896e-07; adz += 1.192092896e-07; if( Math.abs(m[1] * d[2] - m[2] * d[1]) > e[1] * adz + e[2] * ady ) return false; if( Math.abs(m[2] * d[0] - m[0] * d[2]) > e[0] * adz + e[2] * adx ) return false; if( Math.abs(m[0] * d[1] - m[1] * d[0]) > e[0] * ady + e[1] * adx ) return false; return true; }; RDGE.hitTest = function (mesh, near, far) { // holds distance to the nearest BV var dist = null; var BV = null; for (var index = 0; index < mesh.BVL.length; index++) { if (AABB2LineSegment(mesh.BVL[index], near, far)) { var center = RDGE.vec3.scale(RDGE.vec3.add(mesh.BVL[index].min, mesh.BVL[index].max), 0.5); var newDist = RDGE.vec3.dot(RDGE.mat4.row(RDGE.globals.cam.world, 2), center); if (newDist < dist || dist == null) { dist = newDist; BV = mesh.BVL[index]; } } } return BV; }; */ // loadShader // 'shaderId' is the id of a