diff options
Diffstat (limited to 'js/lib/geom/geom-obj.js')
-rwxr-xr-x | js/lib/geom/geom-obj.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/js/lib/geom/geom-obj.js b/js/lib/geom/geom-obj.js index f2991bdb..7cb9b80f 100755 --- a/js/lib/geom/geom-obj.js +++ b/js/lib/geom/geom-obj.js | |||
@@ -375,6 +375,65 @@ var GeomObj = function GLGeomObj() { | |||
375 | } | 375 | } |
376 | }; | 376 | }; |
377 | 377 | ||
378 | |||
379 | this.getGLCenter = function() | ||
380 | { | ||
381 | // get the normalized device coordinates (NDC) for | ||
382 | // all position and dimensions. | ||
383 | var world = this.getWorld(); | ||
384 | var vpw = world.getViewportWidth(), vph = world.getViewportHeight(); | ||
385 | var xNDC = 2*this._xOffset/vpw, yNDC = -2*this._yOffset/vph; | ||
386 | |||
387 | var aspect = world.getAspect(); | ||
388 | var zn = world.getZNear(), zf = world.getZFar(); | ||
389 | var t = zn * Math.tan(world.getFOV() * Math.PI / 360.0), | ||
390 | b = -t, | ||
391 | r = aspect*t, | ||
392 | l = -r; | ||
393 | |||
394 | // calculate the object coordinates from their NDC coordinates | ||
395 | var z = -world.getViewDistance(); | ||
396 | |||
397 | // unproject to get the position of the origin in GL | ||
398 | var x = -z*(r-l)/(2.0*zn)*xNDC, | ||
399 | y = -z*(t-b)/(2.0*zn)*yNDC; | ||
400 | z = 0.0; | ||
401 | |||
402 | // transform by the object's transformation matrix | ||
403 | var ctr = MathUtils.transformPoint( [x, y, z], this.getMatrix() ); | ||
404 | |||
405 | return ctr; | ||
406 | }; | ||
407 | |||
408 | this.preViewToGL = function( preViewPt ) | ||
409 | { | ||
410 | // get the normalized device coordinates (NDC) for | ||
411 | // all position and dimensions. | ||
412 | var world = this.getWorld(); | ||
413 | var vpw = world.getViewportWidth(), vph = world.getViewportHeight(); | ||
414 | var xNDC = 2*preViewPt[0]/vpw, yNDC = -2*preViewPt[1]/vph; | ||
415 | |||
416 | var aspect = world.getAspect(); | ||
417 | var zn = world.getZNear(), zf = world.getZFar(); | ||
418 | var t = zn * Math.tan(world.getFOV() * Math.PI / 360.0), | ||
419 | b = -t, | ||
420 | r = aspect*t, | ||
421 | l = -r; | ||
422 | |||
423 | // calculate the object coordinates from their NDC coordinates | ||
424 | var z = -world.getViewDistance(); | ||
425 | |||
426 | // unproject to get the position of the origin in GL | ||
427 | var x = -z*(r-l)/(2.0*zn)*xNDC, | ||
428 | y = -z*(t-b)/(2.0*zn)*yNDC; | ||
429 | z = 0.0; | ||
430 | |||
431 | // transform by the object's transformation matrix | ||
432 | var glPt = MathUtils.transformPoint( [x, y, z], this.getMatrix() ); | ||
433 | |||
434 | return glPt; | ||
435 | }; | ||
436 | |||
378 | this.buildBuffers = function () { | 437 | this.buildBuffers = function () { |
379 | // this function must be overridden by the base class | 438 | // this function must be overridden by the base class |
380 | alert("GLGeomObj.buildBuffers must be overridden by base class"); | 439 | alert("GLGeomObj.buildBuffers must be overridden by base class"); |