Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r969 - in trunk: Core/Geometry Engine/ImageTraversers Engine/Renderers Interface Model/Cameras


Chronological Thread 
  • From: bigler@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r969 - in trunk: Core/Geometry Engine/ImageTraversers Engine/Renderers Interface Model/Cameras
  • Date: Fri, 3 Mar 2006 17:04:40 -0700 (MST)

Author: bigler
Date: Fri Mar  3 17:04:40 2006
New Revision: 969

Modified:
   trunk/Core/Geometry/Vector.h
   trunk/Engine/ImageTraversers/HardTile.cc
   trunk/Engine/Renderers/RayGen.cc
   trunk/Interface/RayPacket.h
   trunk/Model/Cameras/PinholeCamera.cc
Log:
Committing latest stuff for performance.

Modified: trunk/Core/Geometry/Vector.h
==============================================================================
--- trunk/Core/Geometry/Vector.h        (original)
+++ trunk/Core/Geometry/Vector.h        Fri Mar  3 17:04:40 2006
@@ -64,9 +64,9 @@
     }
 
     Vector( const Vector& copy) {
-      data[0] = copy[0];
-      data[1] = copy[1];
-      data[2] = copy[2];
+      data[0] = copy.data[0];
+      data[1] = copy.data[1];
+      data[2] = copy.data[2];
     }
 
     // Copy from another vector of the same size, but of a templated type.
@@ -79,9 +79,9 @@
 
 #ifndef SWIG
     Vector& operator=(const Vector& copy) {
-      data[0] = copy[0];
-      data[1] = copy[1];
-      data[2] = copy[2];
+      data[0] = copy.data[0];
+      data[1] = copy.data[1];
+      data[2] = copy.data[2];
       return *this;
     }
 #endif
@@ -338,7 +338,8 @@
     friend Vector Min(const Vector& v1, const Vector& v2);
     friend Vector Max(const Vector& v1, const Vector& v2);
     friend Vector Interpolate(const Vector& v1, const Vector& v2, Real 
weight);
-  private:
+    
+    //private:
     Real data[3];
 
     // Do not use this function!!!!  Use getDataPtr() instead.
@@ -351,9 +352,9 @@
   inline Vector operator*(S s, const Vector& v)
   {
     Real scalar = static_cast<Real>(s);
-    Vector result(scalar * v[0],
-                  scalar * v[1],
-                  scalar * v[2]);
+    Vector result(scalar * v.data[0],
+                  scalar * v.data[1],
+                  scalar * v.data[2]);
     return result;
   }
 
@@ -361,51 +362,51 @@
   inline Vector operator*(const Vector& v, S s)
   {
     Real scalar = static_cast<Real>(s);
-    Vector result(v[0] * scalar,
-                  v[1] * scalar,
-                  v[2] * scalar);
+    Vector result(v.data[0] * scalar,
+                  v.data[1] * scalar,
+                  v.data[2] * scalar);
     return result;
   }
 
   inline Real Dot(const Vector& v1, const Vector& v2)
   {
-    return (v1[0] * v2[0] +
-            v1[1] * v2[1] +
-            v1[2] * v2[2]);
+    return (v1.data[0] * v2.data[0] +
+            v1.data[1] * v2.data[1] +
+            v1.data[2] * v2.data[2]);
   }
 
   // Cross product is only defined for R3
   inline Vector Cross(const Vector& v1, const Vector& v2)
   {
-    return Vector(v1[1]*v2[2] - v1[2]*v2[1],
-                  v1[2]*v2[0] - v1[0]*v2[2],
-                  v1[0]*v2[1] - v1[1]*v2[0]);
+    return Vector(v1.data[1]*v2.data[2] - v1.data[2]*v2.data[1],
+                  v1.data[2]*v2.data[0] - v1.data[0]*v2.data[2],
+                  v1.data[0]*v2.data[1] - v1.data[1]*v2.data[0]);
   }
 
   inline Vector Min(const Vector& v1, const Vector& v2)
   {
     using SCIRun::Min;
-    Vector result(Min(v1[0], v2[0]),
-                  Min(v1[1], v2[1]),
-                  Min(v1[2], v2[2]));
+    Vector result(Min(v1.data[0], v2.data[0]),
+                  Min(v1.data[1], v2.data[1]),
+                  Min(v1.data[2], v2.data[2]));
     return result;
   }
 
   inline Vector Max(const Vector& v1, const Vector& v2)
   {
     using SCIRun::Max;
-    Vector result(Max(v1[0], v2[0]),
-                  Max(v1[1], v2[1]),
-                  Max(v1[2], v2[2]));
+    Vector result(Max(v1.data[0], v2.data[0]),
+                  Max(v1.data[1], v2.data[1]),
+                  Max(v1.data[2], v2.data[2]));
     return result;
   }
 
   inline Vector Interpolate(const Vector& v1, const Vector& v2, Real weight)
   {
     using SCIRun::Interpolate;
-    Vector result(Interpolate(v1[0], v2[0], weight),
-                  Interpolate(v1[1], v2[1], weight),
-                  Interpolate(v1[2], v2[2], weight));
+    Vector result(Interpolate(v1.data[0], v2.data[0], weight),
+                  Interpolate(v1.data[1], v2.data[1], weight),
+                  Interpolate(v1.data[2], v2.data[2], weight));
     return result;
   }
 

Modified: trunk/Engine/ImageTraversers/HardTile.cc
==============================================================================
--- trunk/Engine/ImageTraversers/HardTile.cc    (original)
+++ trunk/Engine/ImageTraversers/HardTile.cc    Fri Mar  3 17:04:40 2006
@@ -134,8 +134,8 @@
           if (xnarf > xend) xnarf = xend;
           // Create a Fragment that is consecutive in X pixels
           Fragment frag(0, x, xnarf, y);
-          //context.pixelSampler->renderFragment(context, frag);
-          //image->set(frag);
+          context.pixelSampler->renderFragment(context, frag);
+          image->set(frag);
         }
       }
 

Modified: trunk/Engine/Renderers/RayGen.cc
==============================================================================
--- trunk/Engine/Renderers/RayGen.cc    (original)
+++ trunk/Engine/Renderers/RayGen.cc    Fri Mar  3 17:04:40 2006
@@ -6,6 +6,11 @@
 #include <Interface/Context.h>
 #include <Interface/RayPacket.h>
 #include <Core/Util/Assert.h>
+#include <Interface/Camera.h>
+#include <Interface/Material.h>
+#include <Interface/Object.h>
+#include <Interface/Scene.h>
+
 
 using namespace Manta;
 
@@ -34,9 +39,10 @@
 {
 }
 
-void RayGen::traceEyeRays(const RenderContext&, RayPacket& rays)
+void RayGen::traceEyeRays(const RenderContext& context, RayPacket& rays)
 {
-
+  ASSERT(rays.getFlag(RayPacket::HaveImageCoordinates));
+  context.camera->makeRays(rays);
 }
 
 void RayGen::traceRays(const RenderContext&, RayPacket& rays)

Modified: trunk/Interface/RayPacket.h
==============================================================================
--- trunk/Interface/RayPacket.h (original)
+++ trunk/Interface/RayPacket.h Fri Mar  3 17:04:40 2006
@@ -166,7 +166,7 @@
       data->image[1][which] = imageY;
       data->whichEye[which] = whichEye;
     }
-    Real getImageCoordinates(int which, int dim)
+    Real getImageCoordinates(int which, int dim) const
     {
       return data->image[dim][which];
     }
@@ -179,9 +179,9 @@
     void setRay(int which, const Vector& origin, const Vector& direction)
     {
       for(int i=0;i<3;i++)
-        data->origin[i][which] = origin[i];
+        data->origin[i][which] = origin.data[i];
       for(int i=0;i<3;i++)
-        data->direction[i][which] = direction[i];
+        data->direction[i][which] = direction.data[i];
     }
     void setRay(int which, const Ray& ray)
     {
@@ -419,7 +419,7 @@
       for(int i=0;i<Color::NumComponents;i++)
         data->importance[i][which] = importance[i];
     }
-    Color getImportance(int which)
+    Color getImportance(int which) const
     {
       Color result;
       for(int i=0;i<Color::NumComponents;i++)
@@ -554,13 +554,13 @@
     }
     // This will copy the contects of the scratchpad from the incoming
     // RayPacket.
-    void copyScratchpad(int which, RayPacket& copy, int which_copy) {
+    void copyScratchpad(int which, const RayPacket& copy, int which_copy) {
       memcpy( data->scratchpad_data[which],
               copy.data->scratchpad_data[which_copy],
               RayPacketData::MaxScratchpadSize);
     }
 
-  private:
+    //  private:
     RayPacket(const RayPacket&);
     RayPacket& operator=(const RayPacket&);
 

Modified: trunk/Model/Cameras/PinholeCamera.cc
==============================================================================
--- trunk/Model/Cameras/PinholeCamera.cc        (original)
+++ trunk/Model/Cameras/PinholeCamera.cc        Fri Mar  3 17:04:40 2006
@@ -127,23 +127,36 @@
   ASSERT(rays.getFlag(RayPacket::HaveImageCoordinates));
   rays.setFlag(RayPacket::ConstantOrigin);
 
-  Vector stereo_eye[2];
-  stereo_eye[0] = (eye - (v*stereo_offset));
-  stereo_eye[1] = (eye + (v*stereo_offset));
-  
-  if(normalizeRays){    
+  if(normalizeRays)
+    {
+    Vector stereo_eye[2];
+    stereo_eye[0] = (eye - (v*stereo_offset));
+    stereo_eye[1] = (eye + (v*stereo_offset));
+    
     for(int i=rays.begin();i<rays.end();i++){
       Vector raydir(v*rays.getImageCoordinates(i, 
0)+u*rays.getImageCoordinates(i, 1)+direction);
       raydir.normalize();
       rays.setRay(i, stereo_eye[rays.getWhichEye(i)], raydir);
     }
     rays.setFlag(RayPacket::NormalizedDirections);
-
-
   } else {
-    for(int i=rays.begin();i<rays.end();i++){
-      Vector raydir(v*rays.getImageCoordinates(i, 
0)+u*rays.getImageCoordinates(i, 1)+direction);
-      rays.setRay(i, stereo_eye[rays.getWhichEye(i)], raydir);
+    Real u_vec[3] = { u[0], u[1], u[2] };
+    Real v_vec[3] = { v[0], v[1], v[2] };
+    Real d_vec[3] = { direction[0], direction[1], direction[2] };
+    
+    RayPacketData* data = rays.data;
+    for(int i=rays.begin();i<rays.end();i++)
+      {
+        data->origin[0][i] = eye.data[0];
+        data->origin[1][i] = eye.data[1];
+        data->origin[2][i] = eye.data[2];
+
+        const Real u_coord = data->image[1][i];
+        const Real v_coord = data->image[0][i];
+        
+        data->direction[0][i] = d_vec[0] + u_coord * u_vec[0] + v_coord * 
v_vec[0];
+        data->direction[1][i] = d_vec[1] + u_coord * u_vec[1] + v_coord * 
v_vec[1];
+        data->direction[2][i] = d_vec[2] + u_coord * u_vec[2] + v_coord * 
v_vec[2];        
     }
   }
 }




  • [MANTA] r969 - in trunk: Core/Geometry Engine/ImageTraversers Engine/Renderers Interface Model/Cameras, bigler, 03/03/2006

Archive powered by MHonArc 2.6.16.

Top of page