X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Frender-tasks%2Fscene-graph-camera.cpp;h=7aca9cbe66e19b31ca03e167fa37555897ae67aa;hb=6015fb49e97568a7c1c664d103527a61a484d58a;hp=d59ec486e15d874fa13c2d36d8fb2727da854cb9;hpb=cd0ce6e412df8961b1a5e28b496369fa49fd72d7;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/render-tasks/scene-graph-camera.cpp b/dali/internal/update/render-tasks/scene-graph-camera.cpp index d59ec48..7aca9cb 100644 --- a/dali/internal/update/render-tasks/scene-graph-camera.cpp +++ b/dali/internal/update/render-tasks/scene-graph-camera.cpp @@ -96,13 +96,12 @@ void Frustum(Matrix& result, float left, float right, float bottom, float top, f m[12] = m[13] = m[15] = 0.0f; } -void Perspective(Matrix& result, float fovy, float aspect, float near, float far, bool invertYAxis, const Vector2& stereoBias ) +void Perspective(Matrix& result, float fovy, float aspect, float near, float far, bool invertYAxis ) { float frustumH = tanf( fovy * 0.5f ) * near; float frustumW = frustumH * aspect; - Vector2 bias = stereoBias * 0.5f; - Frustum(result, -(frustumW + bias.x), frustumW - bias.x, -(frustumH + bias.y), frustumH - bias.y, near, far, invertYAxis); + Frustum(result, -frustumW, frustumW, -frustumH, frustumH, near, far, invertYAxis); } void Orthographic(Matrix& result, float left, float right, float bottom, float top, float near, float far, bool invertYAxis) @@ -152,13 +151,13 @@ const float Camera::DEFAULT_TOP_CLIPPING_PLANE(-400.0f); const float Camera::DEFAULT_BOTTOM_CLIPPING_PLANE(400.0f); const float Camera::DEFAULT_NEAR_CLIPPING_PLANE( 800.0f ); // default height of the screen const float Camera::DEFAULT_FAR_CLIPPING_PLANE( DEFAULT_NEAR_CLIPPING_PLANE + 2.f * DEFAULT_NEAR_CLIPPING_PLANE ); -const Vector2 Camera::DEFAULT_STEREO_BIAS( 0.0f, 0.0f ); const Vector3 Camera::DEFAULT_TARGET_POSITION( 0.0f, 0.0f, 0.0f ); Camera::Camera() : mUpdateViewFlag( UPDATE_COUNT ), mUpdateProjectionFlag( UPDATE_COUNT ), + mProjectionRotation( 0 ), mNode( NULL ), mType( DEFAULT_TYPE ), mProjectionMode( DEFAULT_MODE ), @@ -171,11 +170,11 @@ Camera::Camera() mBottomClippingPlane( DEFAULT_BOTTOM_CLIPPING_PLANE ), mNearClippingPlane( DEFAULT_NEAR_CLIPPING_PLANE ), mFarClippingPlane( DEFAULT_FAR_CLIPPING_PLANE ), - mStereoBias( DEFAULT_STEREO_BIAS ), mTargetPosition( DEFAULT_TARGET_POSITION ), mViewMatrix(), mProjectionMatrix(), - mInverseViewProjection( Matrix::IDENTITY ) + mInverseViewProjection( Matrix::IDENTITY ), + mFinalProjection( Matrix::IDENTITY ) { } @@ -222,12 +221,6 @@ void Camera::SetAspectRatio( float aspectRatio ) mUpdateProjectionFlag = UPDATE_COUNT; } -void Camera::SetStereoBias( const Vector2& stereoBias ) -{ - mStereoBias = stereoBias; - mUpdateProjectionFlag = UPDATE_COUNT; -} - void Camera::SetLeftClippingPlane( float leftClippingPlane ) { mLeftClippingPlane = leftClippingPlane; @@ -270,6 +263,12 @@ void Camera::SetTargetPosition( const Vector3& targetPosition ) mUpdateViewFlag = UPDATE_COUNT; } +void Camera::RotateProjection( int rotationAngle ) +{ + mProjectionRotation = rotationAngle; + mUpdateViewFlag = UPDATE_COUNT; +} + const Matrix& Camera::GetProjectionMatrix( BufferIndex bufferIndex ) const { return mProjectionMatrix[ bufferIndex ]; @@ -285,6 +284,11 @@ const Matrix& Camera::GetInverseViewProjectionMatrix( BufferIndex bufferIndex ) return mInverseViewProjection[ bufferIndex ]; } +const Matrix& Camera::GetFinalProjectionMatrix( BufferIndex bufferIndex ) const +{ + return mFinalProjection[ bufferIndex ]; +} + const PropertyInputImpl* Camera::GetProjectionMatrix() const { return &mProjectionMatrix; @@ -501,8 +505,7 @@ uint32_t Camera::UpdateProjection( BufferIndex updateBufferIndex ) mAspectRatio, mNearClippingPlane, mFarClippingPlane, - mInvertYAxis, - mStereoBias ); + mInvertYAxis ); break; } case Dali::Camera::ORTHOGRAPHIC_PROJECTION: @@ -518,6 +521,38 @@ uint32_t Camera::UpdateProjection( BufferIndex updateBufferIndex ) } mProjectionMatrix.SetDirty( updateBufferIndex ); + + Matrix &finalProjection = mFinalProjection[ updateBufferIndex ]; + finalProjection.SetIdentity(); + + Quaternion rotationAngle; + switch( mProjectionRotation ) + { + case 90: + { + rotationAngle = Quaternion( Dali::ANGLE_90, Vector3::ZAXIS ); + break; + } + case 180: + { + rotationAngle = Quaternion( Dali::ANGLE_180, Vector3::ZAXIS ); + break; + } + case 270: + { + rotationAngle = Quaternion( Dali::ANGLE_270, Vector3::ZAXIS ); + break; + } + default: + rotationAngle = Quaternion( Dali::ANGLE_0, Vector3::ZAXIS ); + break; + } + + Matrix rotation; + rotation.SetIdentity(); + rotation.SetTransformComponents( Vector3( 1.0f, 1.0f, 1.0f ), rotationAngle, Vector3( 0.0f, 0.0f, 0.0f ) ); + + Matrix::Multiply( finalProjection, mProjectionMatrix.Get( updateBufferIndex ), rotation ); } --mUpdateProjectionFlag; }