Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1428 - in trunk/Engine: Factory Renderers


Chronological Thread 
  • From: sparker@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1428 - in trunk/Engine: Factory Renderers
  • Date: Wed, 27 Jun 2007 12:32:38 -0600 (MDT)

Author: sparker
Date: Wed Jun 27 12:32:30 2007
New Revision: 1428

Added:
   trunk/Engine/Renderers/Noise.cc
   trunk/Engine/Renderers/Noise.h
Modified:
   trunk/Engine/Factory/RegisterKnownComponents.cc
   trunk/Engine/Renderers/CMakeLists.txt
Log:
Added noise renderer for testing noise


Modified: trunk/Engine/Factory/RegisterKnownComponents.cc
==============================================================================
--- trunk/Engine/Factory/RegisterKnownComponents.cc     (original)
+++ trunk/Engine/Factory/RegisterKnownComponents.cc     Wed Jun 27 12:32:30 
2007
@@ -47,6 +47,7 @@
 #include <Engine/PixelSamplers/SingleSampler.h>
 #include <Engine/PixelSamplers/JitterSampler.h>
 #include <Engine/Renderers/Moire.h>
+#include <Engine/Renderers/Noise.h>
 #include <Engine/Renderers/NullRenderer.h>
 #include <Engine/Renderers/RayGen.h>
 #include <Engine/Renderers/Raytracer.h>
@@ -113,6 +114,7 @@
     engine->registerComponent("null", &NullRenderer::create);
     engine->registerComponent("raygen", &RayGen::create);
     engine->registerComponent("moire", &Moire::create);
+    engine->registerComponent("noise", &Noise::create);
     engine->registerComponent("raytracer", &Raytracer::create);
 
     // Register cameras

Modified: trunk/Engine/Renderers/CMakeLists.txt
==============================================================================
--- trunk/Engine/Renderers/CMakeLists.txt       (original)
+++ trunk/Engine/Renderers/CMakeLists.txt       Wed Jun 27 12:32:30 2007
@@ -2,6 +2,8 @@
 SET (Manta_Renderers_SRCS
      Renderers/Moire.h
      Renderers/Moire.cc
+     Renderers/Noise.h
+     Renderers/Noise.cc
      Renderers/NullRenderer.h
      Renderers/NullRenderer.cc
      Renderers/RayGen.h

Added: trunk/Engine/Renderers/Noise.cc
==============================================================================
--- (empty file)
+++ trunk/Engine/Renderers/Noise.cc     Wed Jun 27 12:32:30 2007
@@ -0,0 +1,88 @@
+
+#include <Engine/Renderers/Noise.h>
+#include <Core/Color/GrayColor.h>
+#include <Core/Exceptions/IllegalArgument.h>
+#include <Core/Math/Trig.h>
+#include <Core/Util/Args.h>
+#include <Core/Util/Assert.h>
+#include <Interface/Context.h>
+#include <Interface/FrameState.h>
+#include <Interface/RayPacket.h>
+#include <Core/Math/SSEDefs.h>
+#include <Core/Math/Noise.h>
+
+using namespace Manta;
+
+Renderer* Noise::create(const vector<string>& args)
+{
+  return new Noise(args);
+}
+
+Noise::Noise(const vector<string>& args)
+{
+  sse = false;
+  rate=0.1;
+  int argc = (int)args.size();
+  for(int i=0;i<argc;i++){
+    string arg = args[i];
+    if(arg == "-rate"){
+      if(!getDoubleArg(i, args, rate))
+       throw IllegalArgument("Moire rate", i, args);
+    } else if(arg == "-sse"){
+      sse = true;
+    } else {
+      throw IllegalArgument("Moire", i, args);
+    }
+  }
+}
+
+Noise::~Noise()
+{
+}
+
+void Noise::setupBegin(const SetupContext&, int)
+{
+}
+
+void Noise::setupDisplayChannel(SetupContext&)
+{
+}
+
+void Noise::setupFrame(const RenderContext&)
+{
+}
+
+void Noise::traceEyeRays(const RenderContext& context, RayPacket& rays)
+{
+  ASSERT(rays.getFlag(RayPacket::HaveImageCoordinates));
+  float phase = context.frameState->frameTime * rate;
+  RayPacketData* data = rays.data;
+  if(sse){
+    __m128 z = _mm_set1_ps(phase);
+    for(int i=rays.begin();i<rays.end();i+=4){
+      __m128 x = _mm_mul_ps(_mm_load_ps(&data->image[0][i]), 
_mm_set1_ps(25));
+      __m128 y = _mm_mul_ps(_mm_load_ps(&data->image[1][i]), 
_mm_set1_ps(25));
+      __m128 sval = ScalarNoiseSSE(x, y, z);
+      __m128 gray = _mm_add_ps(_mm_mul_ps(_mm_set1_ps(0.5), sval), 
_mm_set1_ps(0.5));
+      _mm_store_ps(&data->color[0][i], gray);
+      _mm_store_ps(&data->color[1][i], gray);
+      _mm_store_ps(&data->color[2][i], gray);
+    }
+  } else {
+    for(int i=rays.begin();i<rays.end();i++){
+      float x = data->image[0][i]*25;
+      float y = data->image[1][i]*25;
+      float sval = ScalarNoise(Vector(x, y, phase));
+      float gray = sval * 0.5 + 0.5;
+      data->color[0][i] = gray;
+      data->color[1][i] = gray;
+      data->color[2][i] = gray;
+    }
+  }
+}
+
+void Noise::traceRays(const RenderContext& context, RayPacket& rays)
+{
+  // This will not usually be used...
+  traceEyeRays(context, rays);
+}

Added: trunk/Engine/Renderers/Noise.h
==============================================================================
--- (empty file)
+++ trunk/Engine/Renderers/Noise.h      Wed Jun 27 12:32:30 2007
@@ -0,0 +1,34 @@
+
+#ifndef Manta_Engine_Noise_h
+#define Manta_Engine_Noise_h
+
+#include <Interface/Renderer.h>
+#include <sgi_stl_warnings_off.h>
+#include <string>
+#include <vector>
+#include <sgi_stl_warnings_on.h>
+
+namespace Manta {
+  using namespace std;
+  class Noise : public Renderer {
+  public:
+    Noise(const vector<string>& args);
+    virtual ~Noise();
+    virtual void setupBegin(const SetupContext&, int numChannels);
+    virtual void setupDisplayChannel(SetupContext&);
+    virtual void setupFrame(const RenderContext& context);
+
+    virtual void traceEyeRays(const RenderContext&, RayPacket& rays);
+    virtual void traceRays(const RenderContext&, RayPacket& rays);
+
+    static Renderer* create(const vector<string>& args);
+  private:
+    Noise(const Noise&);
+    Noise& operator=(const Noise&);
+
+    double rate;
+    bool sse;
+  };
+}
+
+#endif




  • [MANTA] r1428 - in trunk/Engine: Factory Renderers, sparker, 06/27/2007

Archive powered by MHonArc 2.6.16.

Top of page