Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into dev
Browse files Browse the repository at this point in the history
Conflicts:
	pb/RayTriangleKernel.pbj
	pb/RayTriangleKernel.pbk
	src/away3d/Away3D.as
	src/away3d/bounds/AxisAlignedBoundingBox.as
	src/away3d/containers/View3D.as
	src/away3d/core/base/SubGeometry.as
	src/away3d/core/pick/AS3PickingCollider.as
	src/away3d/core/pick/PBPickingCollider.as
	src/away3d/entities/Entity.as
	src/away3d/entities/Sprite3D.as
	src/away3d/filters/tasks/Filter3DTaskBase.as
	src/com/adobe/utils/AGALMiniAssembler.as
  • Loading branch information
rob-bateman committed Jan 25, 2013
2 parents 2dcf520 + 92f1f95 commit 3e9ac0c
Show file tree
Hide file tree
Showing 30 changed files with 781 additions and 285 deletions.
Binary file modified pb/RayTriangleKernel.pbj
Binary file not shown.
8 changes: 4 additions & 4 deletions pb/RayTriangleKernel.pbk
Expand Up @@ -26,9 +26,9 @@ kernel RayTriangleKernel
defaultValue : 0.0;
>;

parameter float ignoreFacesLookingAway
parameter float bothSides
<
defaultValue : 1.0;
defaultValue : 0.0;
>;

void evaluatePixel()
Expand Down Expand Up @@ -62,7 +62,7 @@ kernel RayTriangleKernel
normal = normalize( normal );
// evaluate ray-plane intersection
float nDotV = dot( normal, rayDirection );
if( ( ignoreFacesLookingAway == 1.0 && nDotV < 0.0 ) || ( ignoreFacesLookingAway == 0.0 && nDotV != 0.0 ) ) {
if( ( bothSides == 0.0 && nDotV < 0.0 ) || ( bothSides == 1.0 && nDotV != 0.0 ) ) {
float D = -dot( normal, p0 );
float distanceToPlane = -( dot( normal, rayStartPoint ) + D );
t = distanceToPlane / nDotV;
Expand All @@ -87,4 +87,4 @@ kernel RayTriangleKernel
// }
intersectionBuffer = float3( t, v, w );
}
}
}
2 changes: 1 addition & 1 deletion src/away3d/Away3D.as
Expand Up @@ -13,4 +13,4 @@ package away3d

public static const REVISION:uint = 0;
}
}
}
1 change: 1 addition & 0 deletions src/away3d/bounds/AxisAlignedBoundingBox.as
Expand Up @@ -128,6 +128,7 @@ package away3d.bounds

override public function rayIntersection(position : Vector3D, direction : Vector3D, targetNormal : Vector3D) : Number
{

if (containsPoint(position)) return 0;

var px : Number = position.x - _centerX, py : Number = position.y - _centerY, pz : Number = position.z - _centerZ;
Expand Down
11 changes: 6 additions & 5 deletions src/away3d/cameras/Camera3D.as
@@ -1,5 +1,8 @@
package away3d.cameras
{
import flash.geom.Matrix3D;
import flash.geom.Vector3D;

import away3d.arcane;
import away3d.cameras.lenses.LensBase;
import away3d.cameras.lenses.PerspectiveLens;
Expand All @@ -8,11 +11,9 @@ package away3d.cameras
import away3d.core.partition.CameraNode;
import away3d.core.partition.EntityNode;
import away3d.entities.Entity;
import away3d.events.CameraEvent;
import away3d.events.LensEvent;

import flash.geom.Matrix3D;
import flash.geom.Vector3D;

use namespace arcane;

/**
Expand Down Expand Up @@ -187,8 +188,8 @@ package away3d.cameras
_lens = value;

_lens.addEventListener(LensEvent.MATRIX_CHANGED, onLensMatrixChanged);

dispatchEvent(new LensEvent(LensEvent.MATRIX_CHANGED, value));
dispatchEvent(new CameraEvent(CameraEvent.LENS_CHANGED, this));
}

/**
Expand Down
32 changes: 26 additions & 6 deletions src/away3d/cameras/lenses/LensBase.as
@@ -1,13 +1,13 @@
package away3d.cameras.lenses
{
import away3d.arcane;
import away3d.errors.AbstractMethodError;
import away3d.events.LensEvent;

import flash.events.EventDispatcher;

import flash.geom.Matrix3D;
import flash.geom.Rectangle;
import flash.geom.Vector3D;

import away3d.arcane;
import away3d.errors.AbstractMethodError;
import away3d.events.LensEvent;

use namespace arcane;

Expand All @@ -17,7 +17,8 @@ package away3d.cameras.lenses
public class LensBase extends EventDispatcher
{
protected var _matrix : Matrix3D;

protected var _scissorRect:Rectangle = new Rectangle();
protected var _viewPort:Rectangle = new Rectangle();
protected var _near : Number = 20;
protected var _far : Number = 3000;
protected var _aspectRatio : Number = 1;
Expand Down Expand Up @@ -187,5 +188,24 @@ package away3d.cameras.lenses
{
throw new AbstractMethodError();
}

arcane function updateScissorRect(x:Number, y:Number, width:Number, height:Number):void
{
_scissorRect.x = x;
_scissorRect.y = y;
_scissorRect.width = width;
_scissorRect.height = height;
invalidateMatrix();
}


arcane function updateViewport(x:Number, y:Number, width:Number, height:Number):void
{
_viewPort.x = x;
_viewPort.y = y;
_viewPort.width = width;
_viewPort.height = height;
invalidateMatrix();
}
}
}
62 changes: 47 additions & 15 deletions src/away3d/cameras/lenses/PerspectiveLens.as
@@ -1,5 +1,6 @@
package away3d.cameras.lenses
{
import away3d.containers.View3D;
import away3d.core.math.Matrix3DUtils;

/**
Expand Down Expand Up @@ -55,29 +56,60 @@ package away3d.cameras.lenses
override protected function updateMatrix() : void
{
var raw : Vector.<Number> = Matrix3DUtils.RAW_DATA_CONTAINER;

_yMax = _near*_focalLengthInv;
_xMax = _yMax*_aspectRatio;

// assume symmetric frustum
raw[uint(0)] = _near/_xMax;
raw[uint(5)] = _near/_yMax;
raw[uint(10)] = _far/(_far-_near);
raw[uint(11)] = 1;
raw[uint(1)] = raw[uint(2)] = raw[uint(3)] = raw[uint(4)] =
raw[uint(6)] = raw[uint(7)] = raw[uint(8)] = raw[uint(9)] =
raw[uint(12)] = raw[uint(13)] = raw[uint(15)] = 0;
raw[uint(14)] = -_near*raw[uint(10)];
var left:Number, right:Number, top:Number, bottom:Number;

if (_scissorRect.x == 0 && _scissorRect.y == 0 && _scissorRect.width == _viewPort.width && _scissorRect.height == _viewPort.height) {
// assume unscissored frustum
left = -_xMax;
right = _xMax;
top = -_yMax;
bottom = _yMax;

raw[uint(0)] = _near/_xMax;
raw[uint(5)] = _near/_yMax;
raw[uint(10)] = _far/(_far-_near);
raw[uint(11)] = 1;
raw[uint(1)] = raw[uint(2)] = raw[uint(3)] = raw[uint(4)] =
raw[uint(6)] = raw[uint(7)] = raw[uint(8)] = raw[uint(9)] =
raw[uint(12)] = raw[uint(13)] = raw[uint(15)] = 0;
raw[uint(14)] = -_near*raw[uint(10)];
} else {
// assume scissored frustum
var xWidth:Number = _xMax * (_viewPort.width / _scissorRect.width);
var yHgt:Number = _yMax * (_viewPort.height / _scissorRect.height);
var center:Number = _xMax * (_scissorRect.x * 2 - _viewPort.width) / _scissorRect.width + _xMax;
var middle:Number = -_yMax * (_scissorRect.y * 2 - _viewPort.height) / _scissorRect.height - _yMax;

left = center - xWidth;
right = center + xWidth;
top = middle - yHgt;
bottom = middle + yHgt;

raw[uint(0)] = 2 * _near / (right - left);
raw[uint(5)] = 2 * _near / (bottom - top);
raw[uint(8)] = (right + left) / (right - left);
raw[uint(9)] = (bottom + top) / (bottom - top);
raw[uint(10)] = (_far + _near) / (_far - _near);
raw[uint(11)] = 1;
raw[uint(1)] = raw[uint(2)] = raw[uint(3)] = raw[uint(4)] =
raw[uint(6)] = raw[uint(7)] = raw[uint(12)] = raw[uint(13)] = raw[uint(15)] = 0;
raw[uint(14)] = -2 * _far * _near / (_far - _near);
}


_matrix.copyRawDataFrom(raw);

var yMaxFar : Number = _far*_focalLengthInv;
var xMaxFar : Number = yMaxFar*_aspectRatio;

_frustumCorners[0] = _frustumCorners[9] = -_xMax;
_frustumCorners[3] = _frustumCorners[6] = _xMax;
_frustumCorners[1] = _frustumCorners[4] = -_yMax;
_frustumCorners[7] = _frustumCorners[10] = _yMax;
_frustumCorners[0] = _frustumCorners[9] = left;
_frustumCorners[3] = _frustumCorners[6] = right;
_frustumCorners[1] = _frustumCorners[4] = top;
_frustumCorners[7] = _frustumCorners[10] = bottom;

_frustumCorners[12] = _frustumCorners[21] = -xMaxFar;
_frustumCorners[15] = _frustumCorners[18] = xMaxFar;
Expand All @@ -90,4 +122,4 @@ package away3d.cameras.lenses
_matrixInvalid = false;
}
}
}
}

0 comments on commit 3e9ac0c

Please sign in to comment.