Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1934 - trunk/Model/Lights


Chronological Thread 
  • From: boulos@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1934 - trunk/Model/Lights
  • Date: Mon, 17 Dec 2007 23:15:23 -0700 (MST)

Author: boulos
Date: Mon Dec 17 23:15:22 2007
New Revision: 1934

Added:
   trunk/Model/Lights/DirectionalLight.cc
   trunk/Model/Lights/DirectionalLight.h
Modified:
   trunk/Model/Lights/CMakeLists.txt
Log:
Adding a directional light.


Modified: trunk/Model/Lights/CMakeLists.txt
==============================================================================
--- trunk/Model/Lights/CMakeLists.txt   (original)
+++ trunk/Model/Lights/CMakeLists.txt   Mon Dec 17 23:15:22 2007
@@ -2,6 +2,8 @@
 SET (Manta_Lights_SRCS
      Lights/AreaLight.h
      Lights/AreaLight.cc
+     Lights/DirectionalLight.h
+     Lights/DirectionalLight.cc
      Lights/HeadLight.h
      Lights/HeadLight.cc
      Lights/PointLight.h

Added: trunk/Model/Lights/DirectionalLight.cc
==============================================================================
--- (empty file)
+++ trunk/Model/Lights/DirectionalLight.cc      Mon Dec 17 23:15:22 2007
@@ -0,0 +1,85 @@
+
+#include <Model/Lights/DirectionalLight.h>
+#include <Core/Persistent/ArchiveElement.h>
+#include <Core/Persistent/MantaRTTI.h>
+#include <Interface/InterfaceRTTI.h>
+#include <MantaSSE.h>
+
+using namespace Manta;
+
+DirectionalLight::DirectionalLight()
+{
+}
+
+DirectionalLight::DirectionalLight(const Vector& direction, const Color& 
color)
+  : direction(direction.normal()), color(color)
+{
+}
+
+DirectionalLight::~DirectionalLight()
+{
+}
+
+void DirectionalLight::preprocess(const PreprocessContext&)
+{
+}
+
+void DirectionalLight::computeLight(RayPacket& destRays,
+                                    const RenderContext &context,
+                                    RayPacket& sourceRays) const
+{
+  // Don't need hit positions
+  //sourceRays.computeHitPositions();
+#ifdef MANTA_SSE
+    int b = (sourceRays.rayBegin + 3) & (~3);
+    int e = sourceRays.rayEnd & (~3);
+    if(b >= e){
+      for(int i = sourceRays.begin(); i < sourceRays.end(); i++){
+        destRays.setColor(i, color);
+        destRays.setDirection(i, direction);
+        destRays.overrideMinT(i, MAXT);
+      }
+    } else {
+      int i = sourceRays.rayBegin;
+      for(;i<b;i++){
+        destRays.setColor(i, color);
+        destRays.setDirection(i, direction);
+        destRays.overrideMinT(i, MAXT);
+      }
+      //RayPacketData* sourceData = sourceRays.data;
+      RayPacketData* destData = destRays.data;
+      for(;i<e;i+=4){
+        _mm_store_ps(&destData->color[0][i], _mm_set1_ps(color[0]));
+        _mm_store_ps(&destData->color[1][i], _mm_set1_ps(color[1]));
+        _mm_store_ps(&destData->color[2][i], _mm_set1_ps(color[2]));
+        _mm_store_ps(&destData->direction[0][i], _mm_set1_ps(direction[0]));
+        _mm_store_ps(&destData->direction[1][i], _mm_set1_ps(direction[1]));
+        _mm_store_ps(&destData->direction[2][i], _mm_set1_ps(direction[2]));
+        _mm_store_ps(&destData->minT[i], _mm_set1_ps(MAXT));
+      }
+      for(;i<sourceRays.rayEnd;i++){
+        destRays.setColor(i, color);
+        destRays.setDirection(i, direction);
+        destRays.overrideMinT(i, MAXT);
+      }
+    }
+#else
+    for(int i = sourceRays.begin(); i < sourceRays.end(); i++){
+      destRays.setColor(i, color);
+      destRays.setDirection(i, direction);
+      destRays.overrideMinT(i, MAXT);
+    }
+#endif
+}
+
+namespace Manta {
+  MANTA_DECLARE_RTTI_DERIVEDCLASS(DirectionalLight, Light, ConcreteClass, 
readwriteMethod);
+  MANTA_REGISTER_CLASS(DirectionalLight);
+}
+
+void DirectionalLight::readwrite(ArchiveElement* archive)
+{
+  MantaRTTI<Light>::readwrite(archive, *this);
+  archive->readwrite("direction", direction);
+  archive->readwrite("color", color);
+}

Added: trunk/Model/Lights/DirectionalLight.h
==============================================================================
--- (empty file)
+++ trunk/Model/Lights/DirectionalLight.h       Mon Dec 17 23:15:22 2007
@@ -0,0 +1,38 @@
+#ifndef DIRECTIONAL_LIGHT_H_
+#define DIRECTIONAL_LIGHT_H_
+
+#include <Interface/Light.h>
+#include <Core/Geometry/Vector.h>
+#include <Core/Color/Color.h>
+
+namespace Manta {
+  class Archive;
+
+  class DirectionalLight : public Light {
+  public:
+    DirectionalLight();
+    DirectionalLight(const Vector& direction, const Color& color);
+    virtual ~DirectionalLight();
+
+    virtual void preprocess(const PreprocessContext&);
+
+    virtual void computeLight(RayPacket& rays, const RenderContext &context,
+                              RayPacket& source) const;
+
+    // Accessors
+    Vector getDirection() const { return direction; }
+    void setDirection(Vector new_dir) { direction = new_dir; }
+
+    Color getColor() const { return color; }
+    void setColor(Color new_c) { color = new_c; }
+
+    void readwrite(ArchiveElement* archive);
+  private:
+    Vector direction;
+    Color color;
+  };
+}
+
+
+
+#endif // DIRECTIONAL_LIGHT_H_




  • [Manta] r1934 - trunk/Model/Lights, boulos, 12/18/2007

Archive powered by MHonArc 2.6.16.

Top of page