|
From: <axl...@us...> - 2009-05-31 04:57:00
|
Revision: 292
http://hgengine.svn.sourceforge.net/hgengine/?rev=292&view=rev
Author: axlecrusher
Date: 2009-05-31 04:56:37 +0000 (Sun, 31 May 2009)
Log Message:
-----------
free flying camera actualyl works now
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 04:28:19 UTC (rev 291)
+++ Mercury2/src/Camera.cpp 2009-05-31 04:56:37 UTC (rev 292)
@@ -18,10 +18,16 @@
MercuryMatrix local;
-// m_lookAt = GetRotation() * MercuryVector(0,0,1);
+ MQuaternion r( GetRotation().normalize() );
+
+ m_lookAt = MercuryVector(0,0,1);
+ m_lookAt = m_lookAt.Rotate( r );
+ m_lookAt.NormalizeSelf();
// m_lookAt.Print();
- AngleMatrix( GetRotation().ToVector()*-1, local);
+ r[MQuaternion::W] *= -1; //reverse angle for camera
+ r.toMatrix4( local );
+
local.Translate( GetPosition()*-1 );
m_globalMatrix = GetParentMatrix() * local;
@@ -33,65 +39,25 @@
{
MouseInput* m = (MouseInput*)data;
-// MercuryVertex r;
-// MQuaternion rot, d(0,0,1,0);
+ MQuaternion qx = MQuaternion::CreateFromAxisAngle(MercuryVector(1,0,0), m->dy/1200.0f);
+ MQuaternion qy = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m->dx/1200.0f);
- MQuaternion qx = MQuaternion::CreateFromAxisAngle(MercuryVector(1,0,0), m->dy/10.0f);
- MQuaternion qy = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m->dx/10.0f);
-
MQuaternion rot = GetRotation();
- rot *= (qx * qy).normalize();
-// rot[MQuaternion::W]=0;
-// rot.CreateFromAxisAngle(r,1);
-// rot = GetRotation() * rot;
-// rot = rot.normalize();
- rot.Print();
-// MQuaternion r = GetRotation();
-// r[MQuaternion::X] += m->dy/30.0f;
-// r[MQuaternion::Y] += m->dx/30.0f;
-// r = r.normalize();
-
-// r = r * m_lookAt * r.reciprocal();
-// r = r.normalize();
-// r += m_rotation;
-
-// r.ToVertex().Print();
-// r += m_rotation;
-// r[3] = 1;
-// rot.SetEuler( r );
+ rot = rot * qx * qy;
SetRotation(rot);
}
- if (message == INPUTEVENT_KEYBOARD)
- {
- MQuaternion r = GetRotation();
-
- KeyboardInput* k = (KeyboardInput*)data;
- switch(k->key)
- {
- case 25:
- r[MQuaternion::X] += 1;
- break;
- case 39:
- r[MQuaternion::X] -= 1;
- break;
- }
- SetRotation(r);
- }
}
void CameraNode::Update(float dTime)
{
- MercuryVector p;// = GetPosition();
-/*
- if ( KeyboardInput::IsKeyDown(25) ) p[2] -= dTime*2;
- if ( KeyboardInput::IsKeyDown(38) ) p[0] -= dTime*2;
- if ( KeyboardInput::IsKeyDown(39) ) p[2] += dTime*2;
- if ( KeyboardInput::IsKeyDown(40) ) p[0] += dTime*2;
+ MercuryVector p = GetPosition();
+ float a = 0;
- p *= m_lookAt.ToVertex();
- p += GetPosition();
+ if ( KeyboardInput::IsKeyDown(25) ) a -= dTime*2;
+ if ( KeyboardInput::IsKeyDown(39) ) a += dTime*2;
+
+ p += m_lookAt * a;
SetPosition( p );
- */
TransformNode::Update( dTime );
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <axl...@us...> - 2009-05-31 15:53:45
|
Revision: 294
http://hgengine.svn.sourceforge.net/hgengine/?rev=294&view=rev
Author: axlecrusher
Date: 2009-05-31 15:53:44 +0000 (Sun, 31 May 2009)
Log Message:
-----------
updates
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 14:26:36 UTC (rev 293)
+++ Mercury2/src/Camera.cpp 2009-05-31 15:53:44 UTC (rev 294)
@@ -1,6 +1,7 @@
#include <Camera.h>
#include <MercuryMessageManager.h>
#include <MercuryInput.h>
+#include <Viewport.h>
REGISTER_NODE_TYPE(CameraNode);
@@ -14,20 +15,29 @@
{
m_tainted = false;
- MercuryMatrix local;
+ MercuryMatrix local, parent(GetParentMatrix());
MQuaternion r( GetRotation().normalize() );
+ //compute the world space look vector (broken if camera is in transform node)
m_lookAt = MercuryVector(0,0,-1); //by default camera looks down world Z
m_lookAt = m_lookAt.Rotate( r );
m_lookAt.NormalizeSelf();
+ LOOKAT = m_lookAt;
r[MQuaternion::W] *= -1; //reverse angle for camera
+
+ //rotate then translate since we are a camera
r.toMatrix4( local );
-
local.Translate( GetPosition()*-1 );
- m_globalMatrix = GetParentMatrix() * local;
+ m_globalMatrix = local * parent; //fold in any parent transform in reverse (correct rotation)
+
+ //compute camera position in world space (broken if camera is in transform node)
+ local = MercuryMatrix::Identity();
+ local.Translate( GetPosition() );
+ EYE = (parent * local) * MercuryVertex(0,0,0,1);
+// EYE.Print();
}
void CameraNode::HandleMessage(const MString& message, const MessageData* data)
@@ -44,7 +54,6 @@
MQuaternion qx = MQuaternion::CreateFromAxisAngle(Xaxis, m_y);
MQuaternion qy = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
-
SetRotation(qx * qy);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <cn...@us...> - 2009-05-31 21:08:07
|
Revision: 296
http://hgengine.svn.sourceforge.net/hgengine/?rev=296&view=rev
Author: cnlohr
Date: 2009-05-31 21:07:59 +0000 (Sun, 31 May 2009)
Log Message:
-----------
fix camera
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 19:47:00 UTC (rev 295)
+++ Mercury2/src/Camera.cpp 2009-05-31 21:07:59 UTC (rev 296)
@@ -48,13 +48,12 @@
m_y += m->dy/1200.0f;
m_x += m->dx/1200.0f;
-
- MercuryVector Xaxis = m_lookAt.CrossProduct( MercuryVector(0,1,0) );
- Xaxis.NormalizeSelf();
-
- MQuaternion qx = MQuaternion::CreateFromAxisAngle(Xaxis, m_y);
- MQuaternion qy = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
- SetRotation(qx * qy);
+
+ MQuaternion qLeftRight = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
+ MercuryVector LocalLookAt = MercuryVector( 1, 0, 0 );
+ LocalLookAt = LocalLookAt.Rotate( qLeftRight );
+ MQuaternion qUpDown = MQuaternion::CreateFromAxisAngle(LocalLookAt, m_y);
+ SetRotation(qUpDown*qLeftRight);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <cn...@us...> - 2009-05-31 21:38:45
|
Revision: 297
http://hgengine.svn.sourceforge.net/hgengine/?rev=297&view=rev
Author: cnlohr
Date: 2009-05-31 21:38:26 +0000 (Sun, 31 May 2009)
Log Message:
-----------
add info for user
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 21:07:59 UTC (rev 296)
+++ Mercury2/src/Camera.cpp 2009-05-31 21:38:26 UTC (rev 297)
@@ -49,6 +49,12 @@
m_y += m->dy/1200.0f;
m_x += m->dx/1200.0f;
+ //keep m_y within [-PI -> PI]
+ if( m_y < -Q_PI ) m_y += Q_PI*2.;
+ if( m_y > Q_PI ) m_y -= Q_PI*2.;
+
+ //if m_y is < -PI/2 or m_y > PI/2 one must invert the axes
+
MQuaternion qLeftRight = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
MercuryVector LocalLookAt = MercuryVector( 1, 0, 0 );
LocalLookAt = LocalLookAt.Rotate( qLeftRight );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <axl...@us...> - 2009-05-31 22:29:15
|
Revision: 298
http://hgengine.svn.sourceforge.net/hgengine/?rev=298&view=rev
Author: axlecrusher
Date: 2009-05-31 22:29:07 +0000 (Sun, 31 May 2009)
Log Message:
-----------
update
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 21:38:26 UTC (rev 297)
+++ Mercury2/src/Camera.cpp 2009-05-31 22:29:07 UTC (rev 298)
@@ -46,19 +46,23 @@
{
MouseInput* m = (MouseInput*)data;
- m_y += m->dy/1200.0f;
- m_x += m->dx/1200.0f;
-
//keep m_y within [-PI -> PI]
if( m_y < -Q_PI ) m_y += Q_PI*2.;
if( m_y > Q_PI ) m_y -= Q_PI*2.;
-
//if m_y is < -PI/2 or m_y > PI/2 one must invert the axes
+
+ m_y += m->dy/1200.0f;
+
+ if (ABS(m_y) > Q_PI/2)
+ m_x -= m->dx/1200.0f;
+ else
+ m_x += m->dx/1200.0f;
MQuaternion qLeftRight = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
- MercuryVector LocalLookAt = MercuryVector( 1, 0, 0 );
- LocalLookAt = LocalLookAt.Rotate( qLeftRight );
- MQuaternion qUpDown = MQuaternion::CreateFromAxisAngle(LocalLookAt, m_y);
+ MercuryVector LocalX = MercuryVector( 1, 0, 0 );
+ LocalX = LocalX.Rotate( qLeftRight );
+
+ MQuaternion qUpDown = MQuaternion::CreateFromAxisAngle(LocalX, m_y);
SetRotation(qUpDown*qLeftRight);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <axl...@us...> - 2009-06-01 01:02:25
|
Revision: 300
http://hgengine.svn.sourceforge.net/hgengine/?rev=300&view=rev
Author: axlecrusher
Date: 2009-06-01 00:17:40 +0000 (Mon, 01 Jun 2009)
Log Message:
-----------
side step
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-05-31 22:46:35 UTC (rev 299)
+++ Mercury2/src/Camera.cpp 2009-06-01 00:17:40 UTC (rev 300)
@@ -8,6 +8,7 @@
CameraNode::CameraNode()
:TransformNode(), m_x(0), m_y(0)
{
+ m_lookAt = MercuryVector(0,0,-1);
REGISTER_FOR_MESSAGE( INPUTEVENT_MOUSE );
}
@@ -64,11 +65,19 @@
{
MercuryVector p = GetPosition();
float a = 0;
+ float b = 0;
- if ( KeyboardInput::IsKeyDown(25) ) a += dTime*2;
- if ( KeyboardInput::IsKeyDown(39) ) a -= dTime*2;
+ if ( KeyboardInput::IsKeyDown(25) ) a += dTime*2; //W
+ if ( KeyboardInput::IsKeyDown(39) ) a -= dTime*2; //S
+ if ( KeyboardInput::IsKeyDown(38) ) b -= dTime*2; //A
+ if ( KeyboardInput::IsKeyDown(40) ) b += dTime*2; //D
+
+ MercuryVector Xaxis = m_lookAt.CrossProduct( MercuryVector(0,1,0) );
+ Xaxis.NormalizeSelf();
+
p += m_lookAt * a;
+ p += Xaxis * b;
// p.SetY(0); //lock to ground
SetPosition( p );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <axl...@us...> - 2009-06-04 02:14:34
|
Revision: 307
http://hgengine.svn.sourceforge.net/hgengine/?rev=307&view=rev
Author: axlecrusher
Date: 2009-06-04 01:43:22 +0000 (Thu, 04 Jun 2009)
Log Message:
-----------
fix camera doing funky things at exactly PI/2
it would flip a translation axis and possibly disappear into a void
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-06-04 01:02:38 UTC (rev 306)
+++ Mercury2/src/Camera.cpp 2009-06-04 01:43:22 UTC (rev 307)
@@ -18,7 +18,7 @@
MercuryMatrix local, parent(GetParentMatrix());
- MQuaternion r( GetRotation().normalize() );
+ MQuaternion r( GetRotation() );
//compute the world space look vector (broken if camera is in transform node)
m_lookAt = MercuryVector(0,0,-1); //by default camera looks down world Z
@@ -50,14 +50,18 @@
m_y += m->dy/1200.0f;
m_x += m->dx/1200.0f;
- m_y = Clamp(-Q_PI/2, Q_PI/2, m_y);
+ m_y = Clamp((-Q_PI/2.0f)+0.00001f, (Q_PI/2.0f)-0.00001f, m_y);
MQuaternion qLeftRight = MQuaternion::CreateFromAxisAngle(MercuryVector(0,1,0), m_x);
MercuryVector LocalX = MercuryVector( 1, 0, 0 );
LocalX = LocalX.Rotate( qLeftRight );
MQuaternion qUpDown = MQuaternion::CreateFromAxisAngle(LocalX, m_y);
+
+// qLeftRight.Print();
+
SetRotation(qUpDown*qLeftRight);
+// GetRotation().Print();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <axl...@us...> - 2009-08-05 00:34:52
|
Revision: 452
http://hgengine.svn.sourceforge.net/hgengine/?rev=452&view=rev
Author: axlecrusher
Date: 2009-08-05 00:34:44 +0000 (Wed, 05 Aug 2009)
Log Message:
-----------
eye position in shaders
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-08-02 02:20:50 UTC (rev 451)
+++ Mercury2/src/Camera.cpp 2009-08-05 00:34:44 UTC (rev 452)
@@ -61,6 +61,13 @@
local = MercuryMatrix::Identity();
local.Translate( GetPosition() );
EYE = (parent * local) * MercuryVertex(0,0,0,1);
+
+ sa.type = ShaderAttribute::TYPE_FLOATV4;
+ sa.value.fFloatV4[0] = EYE.GetX();
+ sa.value.fFloatV4[1] = EYE.GetY();
+ sa.value.fFloatV4[2] = EYE.GetZ();
+ Shader::SetAttribute("HG_EyePos", sa);
+
// EYE.Print();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <cn...@us...> - 2010-03-03 08:49:53
|
Revision: 683
http://hgengine.svn.sourceforge.net/hgengine/?rev=683&view=rev
Author: cnlohr
Date: 2010-03-03 08:49:47 +0000 (Wed, 03 Mar 2010)
Log Message:
-----------
add option to allow camera free fly "freeFly=true/false"
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2010-03-02 03:24:08 UTC (rev 682)
+++ Mercury2/src/Camera.cpp 2010-03-03 08:49:47 UTC (rev 683)
@@ -10,7 +10,7 @@
REGISTER_NODE_TYPE(CameraNode);
CameraNode::CameraNode()
- :TransformNode(), m_x(0), m_y(0)
+ :TransformNode(), m_x(0), m_y(0), m_bFreeFly( false )
{
m_lookAt = MercuryVector(0,0,-1);
REGISTER_MESSAGE_WITH_DELEGATE( INPUTEVENT_MOUSE, &CameraNode::HandleMouseInput );
@@ -135,7 +135,8 @@
p += m_lookAt * a;
p += Xaxis * b;
// p.SetY(0); //lock to ground
-// SetPosition( p );
+ if( m_bFreeFly )
+ SetPosition( p );
m_origionalPosition = p;
TransformNode::Update( dTime );
@@ -155,12 +156,16 @@
SetPosition( m_origionalPosition );
TransformNode::SaveToXMLTag( sXMLStream );
SetPosition( OrigPos );
+ if( m_bFreeFly )
+ sXMLStream += ssprintf( "freeFly=\"%d\" ", m_bFreeFly );
}
void CameraNode::LoadFromXML(const XMLNode& node)
{
TransformNode::LoadFromXML( node );
m_origionalPosition = GetPosition();
+
+ LOAD_FROM_XML( "freeFly", m_bFreeFly, StrToBool );
POST_MESSAGE("QueryTerrainPoint", new VertexDataMessage(GetPosition()), 0.00001f);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|