Text archives Help
- From: sparker@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r1070 - in trunk: Interface Model/Cameras StandAlone UserInterface scenes
- Date: Wed, 17 May 2006 17:08:44 -0600 (MDT)
Author: sparker
Date: Wed May 17 17:08:40 2006
New Revision: 1070
Added:
trunk/Interface/Scene.cc
Modified:
trunk/Interface/CMakeLists.txt
trunk/Interface/Camera.cc
trunk/Interface/Camera.h
trunk/Interface/Scene.h
trunk/Model/Cameras/EnvironmentCamera.cc
trunk/Model/Cameras/EnvironmentCamera.h
trunk/Model/Cameras/FisheyeCamera.cc
trunk/Model/Cameras/FisheyeCamera.h
trunk/Model/Cameras/OrthogonalCamera.cc
trunk/Model/Cameras/OrthogonalCamera.h
trunk/Model/Cameras/PinholeCamera.cc
trunk/Model/Cameras/PinholeCamera.h
trunk/StandAlone/manta.cc
trunk/UserInterface/XWindowUI.cc
trunk/UserInterface/XWindowUI.h
trunk/scenes/0.cc
Log:
Add bookmark functionality. Set up bookmarks in the scene (saved camera
views), and you can
cycle through them with the b key in the default viewer.
Still to do: choose the first bookmark when the scene is first rendered.
Modified: trunk/Interface/CMakeLists.txt
==============================================================================
--- trunk/Interface/CMakeLists.txt (original)
+++ trunk/Interface/CMakeLists.txt Wed May 17 17:08:40 2006
@@ -40,6 +40,7 @@
SetupCallback.h
SetupCallback.cc
Scene.h
+ Scene.cc
ShadowAlgorithm.h
ShadowAlgorithm.cc
TexCoordMapper.h
Modified: trunk/Interface/Camera.cc
==============================================================================
--- trunk/Interface/Camera.cc (original)
+++ trunk/Interface/Camera.cc Wed May 17 17:08:40 2006
@@ -10,3 +10,10 @@
Camera::~Camera()
{
}
+
+BasicCameraData::BasicCameraData(const Vector& eye, const Vector& lookat,
+ const Vector& up, double hfov)
+ : eye(eye), lookat(lookat), up(up), hfov(hfov)
+{
+}
+
Modified: trunk/Interface/Camera.h
==============================================================================
--- trunk/Interface/Camera.h (original)
+++ trunk/Interface/Camera.h Wed May 17 17:08:40 2006
@@ -13,6 +13,28 @@
namespace Manta {
class RayPacket;
+ class BasicCameraData {
+ public:
+ BasicCameraData() {}
+ BasicCameraData(const Vector& eye, const Vector& lookat, const Vector&
up, double hfov);
+ // The position of the camera
+ Vector eye;
+
+ // A point in the gaze direction
+ Vector lookat;
+
+ // This will be parallel to the y coordinate of the image
+
+ Vector up;
+ // For a pinhole camera, this will be the horizontal field of view. For
a
+ // orthographic camera, it will be the effective field of view angle at
the
+ // lookat point
+ double hfov;
+
+ // Someday, it may be nice to add extra space with an identifier for
camera that
+ // want to store other parameters here.
+ };
+
class Camera {
public:
Camera();
@@ -23,9 +45,11 @@
virtual void scaleFOV(Real) = 0;
virtual void translate(Vector v) = 0; // Translate in image plane
coordinates.
virtual void dolly(Real) = 0;
-
- // Accessors
+ // Accessors
+ virtual void getBasicCameraData(BasicCameraData& cam) const = 0;
+ // This is not pass by reference because it needs to be used in a
transaction
+ virtual void setBasicCameraData(BasicCameraData cam) = 0;
virtual Vector getPosition() const = 0; // This method is called
// to get the eye point by
Added: trunk/Interface/Scene.cc
==============================================================================
--- (empty file)
+++ trunk/Interface/Scene.cc Wed May 17 17:08:40 2006
@@ -0,0 +1,40 @@
+
+#include <Interface/Scene.h>
+using namespace Manta;
+
+int Scene::addBookmark(const std::string& name, const Vector& eye, const
Vector& lookat,
+ const Vector& up, double hfov)
+{
+ return addBookmark(name, BasicCameraData(eye, lookat, up, hfov));
+}
+
+int Scene::addBookmark(const std::string& name, const BasicCameraData& cam)
+{
+ int idx = bookmarks.size();
+ Bookmark* bookmark = new Bookmark;
+ bookmark->name = name;
+ bookmark->cameradata = cam;
+ bookmarks.push_back(bookmark);
+ return idx;
+}
+
+void Scene::selectBookmark(int bookmark)
+{
+ currentBookmark = bookmark;
+ if(currentBookmark < 0)
+ currentBookmark = 0;
+ if(bookmarks.size() > 0 && currentBookmark >= bookmarks.size())
+ currentBookmark = bookmarks.size()-1;
+}
+
+const BasicCameraData* Scene::nextBookmark()
+{
+ if(bookmarks.size() == 0)
+ return 0;
+
+ currentBookmark++;
+ if(currentBookmark >= bookmarks.size())
+ currentBookmark = 0;
+
+ return &bookmarks[currentBookmark]->cameradata;
+}
Modified: trunk/Interface/Scene.h
==============================================================================
--- trunk/Interface/Scene.h (original)
+++ trunk/Interface/Scene.h Wed May 17 17:08:40 2006
@@ -2,7 +2,10 @@
#ifndef Manta_Interface_Scene_h
#define Manta_Interface_Scene_h
+#include <Interface/Camera.h>
#include <Interface/RenderParameters.h>
+#include <string>
+#include <vector>
namespace Manta {
class Background;
@@ -15,6 +18,7 @@
{
object = 0;
bg = 0;
+ currentBookmark = -1;
}
const Object* getObject() const
@@ -63,11 +67,23 @@
return renderParameters;
}
+ int addBookmark(const std::string& name, const Vector& eye, const
Vector& lookat,
+ const Vector& up, double hfov);
+ int addBookmark(const std::string& name, const BasicCameraData& cam);
+ void selectBookmark(int bookmark);
+ const BasicCameraData* nextBookmark();
+
private:
Object* object;
Background* bg;
LightSet* lights;
RenderParameters renderParameters;
+ struct Bookmark {
+ std::string name;
+ BasicCameraData cameradata;
+ };
+ std::vector<Bookmark*> bookmarks;
+ int currentBookmark;
};
}
Modified: trunk/Model/Cameras/EnvironmentCamera.cc
==============================================================================
--- trunk/Model/Cameras/EnvironmentCamera.cc (original)
+++ trunk/Model/Cameras/EnvironmentCamera.cc Wed May 17 17:08:40 2006
@@ -65,6 +65,20 @@
return new EnvironmentCamera(args);
}
+void EnvironmentCamera::getBasicCameraData(BasicCameraData& cam) const
+{
+ // fov doesn't make sense for this camera - use a reasonable default
+ cam = BasicCameraData(eye, lookat, up, 60);
+}
+
+void EnvironmentCamera::setBasicCameraData(BasicCameraData cam)
+{
+ eye = cam.eye;
+ lookat = cam.lookat;
+ up = cam.up;
+ setup();
+}
+
void EnvironmentCamera::reset( const Vector &eye_, const Vector &up_,
const Vector &lookat_ )
{
Modified: trunk/Model/Cameras/EnvironmentCamera.h
==============================================================================
--- trunk/Model/Cameras/EnvironmentCamera.h (original)
+++ trunk/Model/Cameras/EnvironmentCamera.h Wed May 17 17:08:40 2006
@@ -14,7 +14,7 @@
class EnvironmentCamera : public Camera {
public:
- EnvironmentCamera(const Vector& eye_, const Vector& lookat_,
+ EnvironmentCamera(const Vector& eye_, const Vector& lookat_,
const Vector& up_ );
EnvironmentCamera(const vector<string>& args);
@@ -27,6 +27,10 @@
virtual void dolly(Real);
virtual void transform(AffineTransform t, TransformCenter);
virtual void autoview(const BBox bbox);
+
+ virtual void getBasicCameraData(BasicCameraData& cam) const;
+ // This is not pass by reference because it needs to be used in a
transaction
+ virtual void setBasicCameraData(BasicCameraData cam);
static Camera* create(const vector<string>& args);
Modified: trunk/Model/Cameras/FisheyeCamera.cc
==============================================================================
--- trunk/Model/Cameras/FisheyeCamera.cc (original)
+++ trunk/Model/Cameras/FisheyeCamera.cc Wed May 17 17:08:40 2006
@@ -195,4 +195,18 @@
setup();
}
+void FisheyeCamera::getBasicCameraData(BasicCameraData& cam) const
+{
+ // fov doesn't make sense for this camera - use a reasonable default
+ cam = BasicCameraData(eye, lookat, up, hfov);
+}
+
+void FisheyeCamera::setBasicCameraData(BasicCameraData cam)
+{
+ eye = cam.eye;
+ lookat = cam.lookat;
+ up = cam.up;
+ hfov = cam.hfov;
+ setup();
+}
Modified: trunk/Model/Cameras/FisheyeCamera.h
==============================================================================
--- trunk/Model/Cameras/FisheyeCamera.h (original)
+++ trunk/Model/Cameras/FisheyeCamera.h Wed May 17 17:08:40 2006
@@ -32,6 +32,10 @@
virtual void output( std::ostream &os );
static Camera* create(const vector<string>& args);
+ virtual void getBasicCameraData(BasicCameraData& cam) const;
+ // This is not pass by reference because it needs to be used in a
transaction
+ virtual void setBasicCameraData(BasicCameraData cam);
+
virtual Vector getPosition() const { return eye; }
virtual Vector getLookAt() const { return lookat; };
virtual Vector getUp() const { return up; };
Modified: trunk/Model/Cameras/OrthogonalCamera.cc
==============================================================================
--- trunk/Model/Cameras/OrthogonalCamera.cc (original)
+++ trunk/Model/Cameras/OrthogonalCamera.cc Wed May 17 17:08:40 2006
@@ -181,3 +181,21 @@
setup();
}
+
+void OrthogonalCamera::getBasicCameraData(BasicCameraData& cam) const
+{
+ // fov doesn't make sense for this camera - use a reasonable default
+ // hscale isn't the right thing to use for the fov. We should do the
+ // math and fix this - Steve
+ cam = BasicCameraData(eye, lookat, up, hscale);
+}
+
+void OrthogonalCamera::setBasicCameraData(BasicCameraData cam)
+{
+ eye = cam.eye;
+ lookat = cam.lookat;
+ up = cam.up;
+ hscale = cam.hfov;
+ setup();
+}
+
Modified: trunk/Model/Cameras/OrthogonalCamera.h
==============================================================================
--- trunk/Model/Cameras/OrthogonalCamera.h (original)
+++ trunk/Model/Cameras/OrthogonalCamera.h Wed May 17 17:08:40 2006
@@ -13,7 +13,7 @@
using namespace std;
class OrthogonalCamera : public Camera {
public:
- OrthogonalCamera(const Vector& eye_, const Vector& lookat_,
+ OrthogonalCamera(const Vector& eye_, const Vector& lookat_,
const Vector& up_, Real hscale_ );
OrthogonalCamera(const vector<string>& args);
virtual ~OrthogonalCamera();
@@ -28,6 +28,10 @@
virtual void output( std::ostream &os );
static Camera* create(const vector<string>& args);
+ virtual void getBasicCameraData(BasicCameraData& cam) const;
+ // This is not pass by reference because it needs to be used in a
transaction
+ virtual void setBasicCameraData(BasicCameraData cam);
+
virtual Vector getPosition() const { return eye; }
virtual Vector getLookAt() const { return lookat; }
virtual Vector getUp() const { return up; }
Modified: trunk/Model/Cameras/PinholeCamera.cc
==============================================================================
--- trunk/Model/Cameras/PinholeCamera.cc (original)
+++ trunk/Model/Cameras/PinholeCamera.cc Wed May 17 17:08:40 2006
@@ -71,17 +71,17 @@
void PinholeCamera::output( std::ostream &os ) {
- os << "pinhole( -eye " << eye
- << " -lookat " << lookat
- << " -up " << up
- << " -fov " << hfov;
-
- // Output the offset if one is set.
- if (stereo_offset != 0.0) {
- os << " -offset " << stereo_offset;
- }
+ os << "pinhole( -eye " << eye
+ << " -lookat " << lookat
+ << " -up " << up
+ << " -fov " << hfov;
+
+ // Output the offset if one is set.
+ if (stereo_offset != 0.0) {
+ os << " -offset " << stereo_offset;
+ }
- os << " )" << std::endl;
+ os << " )" << std::endl;
}
Camera* PinholeCamera::create(const vector<string>& args)
@@ -409,5 +409,20 @@
up = up_;
lookat = lookat_;
+ setup();
+}
+
+void PinholeCamera::getBasicCameraData(BasicCameraData& cam) const
+{
+ // fov doesn't make sense for this camera - use a reasonable default
+ cam = BasicCameraData(eye, lookat, up, hfov);
+}
+
+void PinholeCamera::setBasicCameraData(BasicCameraData cam)
+{
+ eye = cam.eye;
+ lookat = cam.lookat;
+ up = cam.up;
+ hfov = cam.hfov;
setup();
}
Modified: trunk/Model/Cameras/PinholeCamera.h
==============================================================================
--- trunk/Model/Cameras/PinholeCamera.h (original)
+++ trunk/Model/Cameras/PinholeCamera.h Wed May 17 17:08:40 2006
@@ -29,6 +29,10 @@
virtual void autoview(const BBox bbox);
virtual void output( std::ostream& os );
+ virtual void getBasicCameraData(BasicCameraData& cam) const;
+ // This is not pass by reference because it needs to be used in a
transaction
+ virtual void setBasicCameraData(BasicCameraData cam);
+
static Camera* create(const vector<string>& args);
virtual Vector getPosition() const { return eye; }
@@ -41,7 +45,6 @@
void setStereoOffset( Real stereo_offset_ ) { stereo_offset =
stereo_offset_; }
Real getStereoOffset() const { return stereo_offset; }
- virtual void setup();
protected:
Vector direction;
Vector u,v;
@@ -53,6 +56,7 @@
// width and height of image
plane
// distance from eye to image
plane
bool normalizeRays;
+ void setup();
};
}
Modified: trunk/StandAlone/manta.cc
==============================================================================
--- trunk/StandAlone/manta.cc (original)
+++ trunk/StandAlone/manta.cc Wed May 17 17:08:40 2006
@@ -533,5 +533,7 @@
lights->setAmbientLight(new ConstantAmbient(Color::black()));
scene->setLights(lights);
scene->getRenderParameters().maxDepth = 5;
+
+ scene->addBookmark("default view", Vector(3, 3, 2), Vector(0, 0, 0.3),
Vector(0, 0, 1), 60);
return scene;
}
Modified: trunk/UserInterface/XWindowUI.cc
==============================================================================
--- trunk/UserInterface/XWindowUI.cc (original)
+++ trunk/UserInterface/XWindowUI.cc Wed May 17 17:08:40 2006
@@ -414,6 +414,9 @@
register_key(0, XStringToKeysym("v"),
"autoview",
Callback::create(this, &XWindowUI::autoview));
+ register_key(0, XStringToKeysym("b"),
+ "next bookmark",
+ Callback::create(this, &XWindowUI::next_bookmark));
register_key(0, XStringToKeysym("c"),
"output camera",
Callback::create(this, &XWindowUI::output_camera));
@@ -489,6 +492,17 @@
rtrt_interface->addTransaction("autoview",
Callback::create(camera, &Camera::autoview,
bbox));
+}
+
+void XWindowUI::next_bookmark(unsigned int, unsigned long, int channel)
+{
+ Camera* camera = rtrt_interface->getCamera(channel);
+ const BasicCameraData* bookmark =
rtrt_interface->getScene()->nextBookmark();
+ if(bookmark){
+ rtrt_interface->addTransaction("next bookmark",
+ Callback::create(camera,
&Camera::setBasicCameraData,
+ *bookmark));
+ }
}
void XWindowUI::output_camera(unsigned int, unsigned long, int channel)
Modified: trunk/UserInterface/XWindowUI.h
==============================================================================
--- trunk/UserInterface/XWindowUI.h (original)
+++ trunk/UserInterface/XWindowUI.h Wed May 17 17:08:40 2006
@@ -72,8 +72,9 @@
void prockey(unsigned int, unsigned long, int);
void quitkey(unsigned int, unsigned long, int);
void autoview(unsigned int, unsigned long, int);
-
- void output_camera(unsigned int, unsigned long, int);
+
+ void next_bookmark(unsigned int, unsigned long, int);
+ void output_camera(unsigned int, unsigned long, int);
void mouse_fov(unsigned int, unsigned int, int, int, int, int);
void mouse_translate(unsigned int, unsigned int, int, int, int, int);
Modified: trunk/scenes/0.cc
==============================================================================
--- trunk/scenes/0.cc (original)
+++ trunk/scenes/0.cc Wed May 17 17:08:40 2006
@@ -169,9 +169,6 @@
NOT_FINISHED("scene 0");
make_obj(world, group, scenesize);
#if 0
- Camera cam(Vector(1.8,-5.53,1.25), Vector(0.0,-.13,1.22),
- Vector(0,0,1), 28.2);
-
double ambient_scale=1.0;
Color bgcolor(RGB(0.1, 0.2, 0.45));
Color cdown(RGB(0.82, 0.62, 0.62));
@@ -190,7 +187,9 @@
Color::black(),
Vector(0,0,1)));
scene->setObject(world);
-
+ scene->addBookmark("default view", Vector(1.8,-5.53,1.25),
Vector(0.0,-.13,1.22),
+ Vector(0,0,1), 28.2);
+ scene->addBookmark("top view", Vector(-0.8, 0.1, 7), Vector(-1, 1, 1.5),
Vector(-1, 1, 0), 45);
NOT_FINISHED("soft shadows/area lights for scene 0");
LightSet* lights = new LightSet();
lights->add(new PointLight(Vector(5,-3,3), Color(RGB(1,1,.8))*2));
- [MANTA] r1070 - in trunk: Interface Model/Cameras StandAlone UserInterface scenes, sparker, 05/17/2006
Archive powered by MHonArc 2.6.16.