Text archives Help
- 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.