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