/*
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