Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r2119 - trunk/Model/Instances


Chronological Thread 
  • From: "Austin Robison" <arobison@rayscale.com>
  • To: manta@sci.utah.edu
  • Subject: [Manta] r2119 - trunk/Model/Instances
  • Date: Mon, 25 Feb 2008 14:57:34 -0700 (MST)

Author: arobison
Date: Mon Feb 25 14:57:34 2008
New Revision: 2119

Modified:
   trunk/Model/Instances/Instance.cc
   trunk/Model/Instances/Instance.h
   trunk/Model/Instances/MPT.h
Log:
Forwarding geometric normals through Instance.


Modified: trunk/Model/Instances/Instance.cc
==============================================================================
--- trunk/Model/Instances/Instance.cc   (original)
+++ trunk/Model/Instances/Instance.cc   Mon Feb 25 14:57:34 2008
@@ -358,6 +358,7 @@
       // Compute a group of normals and texcoords
       RayPacket sub_packet(instance_rays, i, end);
       sub_packet.computeNormals(context);
+      sub_packet.computeGeometricNormals(context);
       // NOTE(boulos): Once the texcoords are separated, there will be
       // another call to texcoords 3 here
       sub_packet.computeTextureCoordinates2(context);
@@ -378,6 +379,7 @@
           // requested
           rays.scratchpad<InstanceShadingData>(j) =
             InstanceShadingData(sub_packet.getNormal(j),
+                                sub_packet.getGeometricNormal(j),
                                 sub_packet.getTexCoords2(j),
                                 sub_packet.getSurfaceDerivativeU(j),
                                 sub_packet.getSurfaceDerivativeV(j));
@@ -395,6 +397,15 @@
                      rays.scratchpad<InstanceShadingData>(i).normal));
   }
   rays.setFlag(RayPacket::HaveNormals);
+}
+
+void Instance::computeGeometricNormal(const RenderContext& context, 
RayPacket& rays) const
+{
+  for (int i = rays.begin(); i < rays.end(); i++) {
+    rays.setGeometricNormal(i, transform_inv.transpose_mult_vector(
+                              
rays.scratchpad<InstanceShadingData>(i).geometricNormal));
+  }
+  rays.setFlag(RayPacket::HaveGeometricNormals);
 }
 
 void Instance::setTexCoordMapper(const TexCoordMapper* new_tex)

Modified: trunk/Model/Instances/Instance.h
==============================================================================
--- trunk/Model/Instances/Instance.h    (original)
+++ trunk/Model/Instances/Instance.h    Mon Feb 25 14:57:34 2008
@@ -60,6 +60,7 @@
     // From Primitive
     virtual void intersect(const RenderContext& context, RayPacket& rays) 
const;
     virtual void computeNormal(const RenderContext& context, RayPacket& 
rays) const;
+    virtual void computeGeometricNormal(const RenderContext& context, 
RayPacket& rays) const;
     virtual void setTexCoordMapper(const TexCoordMapper* new_tex);
 
     // From TexCoordMapper

Modified: trunk/Model/Instances/MPT.h
==============================================================================
--- trunk/Model/Instances/MPT.h (original)
+++ trunk/Model/Instances/MPT.h Mon Feb 25 14:57:34 2008
@@ -47,6 +47,7 @@
   // stomping useful data in the scratchpad.
   struct InstanceShadingData {
     Vector normal;
+    Vector geometricNormal;
     VectorT<Real, 2> texcoord2;
     // NOTE(boulos): When we update texture coordinates to be
     // separated add this one too.
@@ -56,12 +57,14 @@
     Vector surfDerivV;
 
     InstanceShadingData(const Vector& normal,
+                        const Vector& geometricNormal,
                         const VectorT<Real, 2>& tex2,
                         const Vector& dpdu,
                         const Vector& dpdv
                         )
-      : normal(normal), texcoord2(tex2), 
-        surfDerivU(dpdu), surfDerivV(dpdv)  
+      : normal(normal), geometricNormal(geometricNormal),
+        texcoord2(tex2),
+        surfDerivU(dpdu), surfDerivV(dpdv)
     {
     }
   };




  • [Manta] r2119 - trunk/Model/Instances, Austin Robison, 02/25/2008

Archive powered by MHonArc 2.6.16.

Top of page