Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r988 - trunk/Model/Primitives


Chronological Thread 
  • From: jsimkins@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r988 - trunk/Model/Primitives
  • Date: Tue, 14 Mar 2006 17:03:18 -0700 (MST)

Author: jsimkins
Date: Tue Mar 14 17:03:17 2006
New Revision: 988

Modified:
   trunk/Model/Primitives/CMakeLists.txt
   trunk/Model/Primitives/Cylinder.cc
   trunk/Model/Primitives/Cylinder.h
Log:
Try to resurrect cylinder.  Compiles but still doesn't work.


Modified: trunk/Model/Primitives/CMakeLists.txt
==============================================================================
--- trunk/Model/Primitives/CMakeLists.txt       (original)
+++ trunk/Model/Primitives/CMakeLists.txt       Tue Mar 14 17:03:17 2006
@@ -6,9 +6,8 @@
      Primitives/Cone.h
      Primitives/Cube.cc
      Primitives/Cube.h
-     # Cylinder needs to be fixed before using.
-#      Primitives/Cylinder.cc
-#      Primitives/Cylinder.h
+     Primitives/Cylinder.cc
+     Primitives/Cylinder.h
      Primitives/Disk.cc
      Primitives/Disk.h
      Primitives/HeavyTriangle.cc

Modified: trunk/Model/Primitives/Cylinder.cc
==============================================================================
--- trunk/Model/Primitives/Cylinder.cc  (original)
+++ trunk/Model/Primitives/Cylinder.cc  Tue Mar 14 17:03:17 2006
@@ -1,5 +1,5 @@
-#include <Packages/manta/Model/Primitives/Cylinder.h>
-#include <Packages/manta/Interface/RayPacket.h>
+#include <Model/Primitives/Cylinder.h>
+#include <Interface/RayPacket.h>
 #include <Core/Geometry/BBox.h>
 #include <Core/Exceptions/BadPrimitive.h>
 
@@ -21,17 +21,16 @@
 {
   Vector axis(top-bottom);
   axis.normalize();
-  bbox.extend_disc(bottom, axis, radius);
-  bbox.extend_disc(top, axis, radius);
+  bbox.extendByDisc(bottom, axis, radius);
+  bbox.extendByDisc(top, axis, radius);
 }
 
 void Cylinder::intersect(const RenderContext&, RayPacket& rays) const
 {
-  for(int i=0; i<rays.getSize(); i++) {
-    RayPacket::Element& e = rays.get(i);
-    Vector v(xform.project(e.ray.direction()));
+  for(int i=rays.begin(); i<rays.end(); i++) {
+    Vector v(xform * rays.getDirection(i));
     double dist_scale=v.normalize();
-    Ray xray(xform.project(e.ray.origin()), v);
+    Ray xray(xform * rays.getOrigin(i), v);
     double dx=xray.direction().x();
     double dy=xray.direction().y();
     double a=dx*dx+dy*dy;
@@ -58,9 +57,9 @@
        double z1=oz+t1*dz;
        double z2=oz+t2*dz;
        if(t1 > 1.e-6 && z1 > 0.0 && z1 < 1.0){
-         e.hitInfo.hit(t1/dist_scale, getMaterial(), this, 
getTexCoordMapper());
+         rays.hit(i, t1/dist_scale, getMaterial(), this, 
getTexCoordMapper());
        } else if(t2 > 1.e-6 && z2 > 0.0 && z2 < 1.0){
-         e.hitInfo.hit(t2/dist_scale, getMaterial(), this, 
getTexCoordMapper());
+         rays.hit(i, t2/dist_scale, getMaterial(), this, 
getTexCoordMapper());
        }
       }
     }
@@ -70,12 +69,28 @@
 void Cylinder::computeNormal(const RenderContext&, RayPacket& rays) const
 {
   rays.computeHitPositions();
-  for(int i=0; i<rays.getSize(); i++) {
-    RayPacket::Element& e = rays.get(i);
-    Vector xn(xform.project(e.hitPosition).asVector());
-    xn.z(0.0);
-    Vector v=ixform.project(xn);
+  for(int i=rays.begin(); i < rays.end(); i++) {
+    Vector xn(xform * Vector(rays.getHitPosition(i)));
+    xn[2]=0.0;
+    Vector v=ixform * xn;
     v.normalize();
-    e.normal = v;
+    rays.setNormal(i, v);
   }
+}
+
+
+void Cylinder::computeTexCoords2(const RenderContext&,
+                            RayPacket& rays) const
+{
+  for(int i=rays.begin();i<rays.end();i++)
+    rays.setTexCoords(i, rays.scratchpad<Point>(i));
+  rays.setFlag(RayPacket::HaveTexture2|RayPacket::HaveTexture3);
+}
+
+void Cylinder::computeTexCoords3(const RenderContext&,
+                                     RayPacket& rays) const
+{
+  for(int i=rays.begin();i<rays.end();i++)
+    rays.setTexCoords(i, rays.scratchpad<Point>(i));
+  rays.setFlag(RayPacket::HaveTexture2|RayPacket::HaveTexture3);
 }

Modified: trunk/Model/Primitives/Cylinder.h
==============================================================================
--- trunk/Model/Primitives/Cylinder.h   (original)
+++ trunk/Model/Primitives/Cylinder.h   Tue Mar 14 17:03:17 2006
@@ -20,6 +20,10 @@
                                BBox& bbox) const;
     virtual void intersect(const RenderContext& context, RayPacket& rays) 
const ;
     virtual void computeNormal(const RenderContext& context, RayPacket 
&rays) const;    
+    virtual void computeTexCoords2(const RenderContext& context,
+                                  RayPacket& rays) const;
+    virtual void computeTexCoords3(const RenderContext& context,
+                                  RayPacket& rays) const;
     
   private:
     Vector bottom, top;




  • [MANTA] r988 - trunk/Model/Primitives, jsimkins, 03/14/2006

Archive powered by MHonArc 2.6.16.

Top of page