Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1070 - in trunk: Interface Model/Cameras StandAlone UserInterface scenes


Chronological Thread 
  • 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 

+    // 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.

Top of page