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