Revision: 2472
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2472&view=rev
Author: rorthomas
Date: 2012-03-16 10:44:54 +0000 (Fri, 16 Mar 2012)
Log Message:
-----------
working on new camera system
Modified Paths:
--------------
trunk/source/main/gfx/camera/CameraBehavior.h
trunk/source/main/gfx/camera/CameraManager.cpp
trunk/source/main/gfx/camera/CameraManager.h
Added Paths:
-----------
trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h
Modified: trunk/source/main/gfx/camera/CameraBehavior.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-16 09:35:24 UTC
(rev 2471)
+++ trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-16 10:44:54 UTC
(rev 2472)
@@ -28,6 +28,7 @@
Ogre::Degree rotationScale;
float translationScale;
Ogre::Camera *cam;
+ Ogre::SceneManager *scm;
} cameraContext_t;
class CameraBehavior
Added: trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
(rev 0)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
2012-03-16 10:44:54 UTC (rev 2472)
@@ -0,0 +1,103 @@
+/*
+This source file is part of Rigs of Rods
+Copyright 2005-2012 Pierre-Michel Ricordel
+Copyright 2007-2012 Thomas Fischer
+
+For more information, see http://www.rigsofrods.com/
+
+Rigs of Rods is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3, as
+published by the Free Software Foundation.
+
+Rigs of Rods is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "CameraBehaviorVehicleSpline.h"
+
+#include <Ogre.h>
+#include "CameraManager.h"
+#include "Console.h"
+#include "InputEngine.h"
+#include "language.h"
+#include "Settings.h"
+
+#include "BeamFactory.h"
+
+using namespace Ogre;
+
+CameraBehaviorVehicleSpline::CameraBehaviorVehicleSpline() :
+ splinePos(0)
+ , myManualObject(0)
+ , myManualObjectNode(0)
+ , spline(new SimpleSpline())
+{
+}
+
+void CameraBehaviorVehicleSpline::activate(cameraContext_t &ctx)
+{
+ if(!myManualObject)
+ {
+ myManualObject = ctx.scm->createManualObject();
+ myManualObjectNode =
ctx.scm->getRootSceneNode()->createChildSceneNode();
+
+ myManualObject->begin("tracks/transred",
Ogre::RenderOperation::OT_LINE_STRIP);
+ for(int i=0; i < splineDrawResolution; i++)
+ myManualObject->position(0, 0, 0);
+ myManualObject->end();
+
+ myManualObjectNode->attachObject(myManualObject);
+ }
+
+}
+
+void CameraBehaviorVehicleSpline::updateSplineDisplay()
+{
+ myManualObject->beginUpdate(0);
+ for(int i = 0; i < splineDrawResolution; i++)
+ {
+ float pos1d = i/(float)splineDrawResolution;
+ Vector3 pos3d = spline->interpolate(pos1d);
+ //printf(">pos3d> %d >%f,%f,%f\n", i, pos3d.x, pos3d.y,
pos3d.z);
+ myManualObject->position(pos3d);
+
+ }
+ myManualObject->end();
+}
+
+void CameraBehaviorVehicleSpline::update(cameraContext_t &ctx)
+{
+ Beam *curr_truck = BeamFactory::getSingleton().getCurrentTruck();
+ if(!curr_truck) return;
+
+ // create a simple spline
+ float x = curr_truck->minx + (curr_truck->maxx - curr_truck->minx) *
0.5f;
+ float y = curr_truck->miny + (curr_truck->maxy - curr_truck->miny) *
0.5f;
+
+ Vector3 pos1 = Vector3(x, y, curr_truck->minz);
+ Vector3 pos2 = pos1+Vector3(10,0,0); //Vector3(x, y, curr_truck->maxz);
+ Vector3 pos3 = pos2+Vector3(-10,10,0); //Vector3(x, y,
curr_truck->maxz);
+
+ spline->clear();
+ spline->addPoint(pos1);
+ spline->addPoint(pos2);
+ spline->addPoint(pos3);
+
+ updateSplineDisplay();
+
+ // Make all the changes to the camera
+ Vector3 dir = curr_truck->nodes[curr_truck->cameranodepos[0]].smoothpos
- curr_truck->nodes[curr_truck->cameranodedir[0]].smoothpos;
+ dir.normalise();
+ targetDirection = -atan2(dir.dotProduct(Vector3::UNIT_X),
dir.dotProduct(-Vector3::UNIT_Z));
+ targetPitch = 0;
+
+ camRatio = 1.0f / (curr_truck->tdt * 4.0f);
+
+ camCenterPoint = curr_truck->getPosition();
+
+ CameraBehaviorOrbit::update(ctx);
+}
Added: trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h
(rev 0)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h 2012-03-16
10:44:54 UTC (rev 2472)
@@ -0,0 +1,46 @@
+/*
+This source file is part of Rigs of Rods
+Copyright 2005-2012 Pierre-Michel Ricordel
+Copyright 2007-2012 Thomas Fischer
+
+For more information, see http://www.rigsofrods.com/
+
+Rigs of Rods is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3, as
+published by the Free Software Foundation.
+
+Rigs of Rods is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef CAMERABEHAVIORVEHICLESPLINE_H__
+#define CAMERABEHAVIORVEHICLESPLINE_H__
+
+#include "RoRPrerequisites.h"
+#include "CameraBehaviorOrbit.h"
+
+class CameraBehaviorVehicleSpline : public CameraBehaviorOrbit
+{
+protected:
+ float splinePos;
+ Ogre::ManualObject *myManualObject;
+ Ogre::SceneNode* myManualObjectNode;
+ Ogre::SimpleSpline *spline;
+ static const int splineDrawResolution = 20;
+
+public:
+ CameraBehaviorVehicleSpline();
+
+ void activate(cameraContext_t &ctx);
+ void update(cameraContext_t &ctx);
+
+ void updateSplineDisplay();
+};
+
+#endif // CAMERABEHAVIORVEHICLESPLINE_H__
+
+
Modified: trunk/source/main/gfx/camera/CameraManager.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-16 09:35:24 UTC
(rev 2471)
+++ trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-16 10:44:54 UTC
(rev 2472)
@@ -33,6 +33,7 @@
#include "CameraBehaviorCharacterOrbit.h"
#include "CameraBehaviorVehicleOrbit.h"
#include "CameraBehaviorWheelChase.h"
+#include "CameraBehaviorVehicleSpline.h"
#include "RoRFrameListener.h"
@@ -69,10 +70,12 @@
}
createGlobalBehaviors();
- ctx.cam = mCamera;
+ ctx.cam = mCamera;
+ ctx.scm = mSceneMgr;
- switchBehavior(CAMBEHAVIOR_CHARACTER_ORBIT);
+ //switchBehavior(CAMBEHAVIOR_CHARACTER_ORBIT);
+ switchBehavior(CAMBEHAVIOR_VEHICLE_SPLINE);
}
CameraManager::~CameraManager()
@@ -86,6 +89,8 @@
globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_CHARACTER_ORBIT, new
CameraBehaviorCharacterOrbit()) );
globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_ORBIT, new CameraBehaviorVehicleOrbit()) );
globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_WHEELCHASE, new
CameraBehaviorWheelChase()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_SPLINE, new CameraBehaviorVehicleSpline())
);
+
}
void CameraManager::updateInput()
Modified: trunk/source/main/gfx/camera/CameraManager.h
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.h 2012-03-16 09:35:24 UTC
(rev 2471)
+++ trunk/source/main/gfx/camera/CameraManager.h 2012-03-16 10:44:54 UTC
(rev 2472)
@@ -60,6 +60,7 @@
, CAMBEHAVIOR_CHARACTER_ORBIT
, CAMBEHAVIOR_VEHICLE_ORBIT
, CAMBEHAVIOR_VEHICLE_WHEELCHASE
+ , CAMBEHAVIOR_VEHICLE_SPLINE
, CAMBEHAVIOR_END
};
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel