Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1935 - trunk/Model/Materials


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

Author: boulos
Date: Mon Dec 17 23:15:56 2007
New Revision: 1935

Added:
   trunk/Model/Materials/Normal.cc
   trunk/Model/Materials/Normal.h
Modified:
   trunk/Model/Materials/CMakeLists.txt
Log:
And a Normal shader.


Modified: trunk/Model/Materials/CMakeLists.txt
==============================================================================
--- trunk/Model/Materials/CMakeLists.txt        (original)
+++ trunk/Model/Materials/CMakeLists.txt        Mon Dec 17 23:15:56 2007
@@ -22,6 +22,8 @@
      Materials/MetalMaterial.cc
      Materials/NDotL.h
      Materials/NDotL.cc
+     Materials/Normal.h
+     Materials/Normal.cc
      Materials/NullMaterial.h
      Materials/OpaqueShadower.h
      Materials/OpaqueShadower.cc

Added: trunk/Model/Materials/Normal.cc
==============================================================================
--- (empty file)
+++ trunk/Model/Materials/Normal.cc     Mon Dec 17 23:15:56 2007
@@ -0,0 +1,72 @@
+#include <Model/Materials/Normal.h>
+
+#include <Interface/RayPacket.h>
+#include <Interface/Context.h>
+
+#include <Model/Textures/Constant.h>
+
+using namespace Manta;
+
+
+Normal::Normal(bool faceforward) : faceforward(faceforward) {
+}
+
+Normal::~Normal()
+{
+}
+
+void Normal::preprocess(const PreprocessContext&)
+{
+}
+
+void Normal::shade(const RenderContext& context, RayPacket& rays) const
+{
+  float* normals[3];
+  if (faceforward) {
+    rays.computeFFNormals(context);
+    normals[0] = rays.data->ffnormal[0];
+    normals[1] = rays.data->ffnormal[1];
+    normals[2] = rays.data->ffnormal[2];
+  } else {
+    rays.computeNormals(context);
+    normals[0] = rays.data->normal[0];
+    normals[1] = rays.data->normal[1];
+    normals[2] = rays.data->normal[2];
+  }
+
+#ifdef MANTA_SSE
+  int b = (rays.rayBegin + 3) & (~3);
+  int e = rays.rayEnd & (~3);
+  if(b >= e){
+    for (int i = rays.begin(); i < rays.end(); i++) {
+      rays.setColor(i, Color(RGBColor(.5f + .5f * normals[0][i],
+                                      .5f + .5f * normals[1][i],
+                                      .5f + .5f * normals[2][i])));
+    }
+  } else {
+    for (int i = rays.begin(); i < b; i++) {
+      rays.setColor(i, Color(RGBColor(.5f + .5f * normals[0][i],
+                                      .5f + .5f * normals[1][i],
+                                      .5f + .5f * normals[2][i])));
+    }
+    __m128 half = _mm_set1_ps(.5f);
+    for (int i = b; i < e; i+=4) {
+      for (int c = 0; c < 3; c++) {
+        _mm_store_ps(&(rays.data->color[c][i]),
+                     _mm_add_ps(half, _mm_mul_ps(half, 
_mm_load_ps(&(normals[c][i])))));
+      }
+    }
+    for (int i = e; i < rays.end(); i++) {
+      rays.setColor(i, Color(RGBColor(.5f + .5f * normals[0][i],
+                                      .5f + .5f * normals[1][i],
+                                      .5f + .5f * normals[2][i])));
+    }
+  }
+#else
+  for (int i = rays.begin(); i < rays.end(); i++) {
+    rays.setColor(i, Color(RGBColor(.5f + .5f * normals[0][i],
+                                    .5f + .5f * normals[1][i],
+                                    .5f + .5f * normals[2][i])));
+  }
+#endif
+}

Added: trunk/Model/Materials/Normal.h
==============================================================================
--- (empty file)
+++ trunk/Model/Materials/Normal.h      Mon Dec 17 23:15:56 2007
@@ -0,0 +1,22 @@
+#ifndef MANTA_MODEL_NORMAL_H_
+#define MANTA_MODEL_NORMAL_H_
+
+#include <Core/Color/Color.h>
+#include <Model/Materials/OpaqueShadower.h>
+#include <Interface/Texture.h>
+
+namespace Manta {
+  class Normal : public OpaqueShadower {
+  public:
+    Normal(bool faceforward);
+    virtual ~Normal();
+
+    virtual void preprocess(const PreprocessContext&);
+    virtual void shade(const RenderContext& context, RayPacket& rays) const;
+  private:
+    bool faceforward;
+  };
+}
+
+
+#endif // MANTA_MODEL_NORMAL_H_




  • [Manta] r1935 - trunk/Model/Materials, boulos, 12/18/2007

Archive powered by MHonArc 2.6.16.

Top of page