Bläddra i källkod

Save point before implementing Gouraud shading.

angel 7 år sedan
förälder
incheckning
4bef28a14f
5 ändrade filer med 13 tillägg och 13 borttagningar
  1. 8 10
      include/shader.h
  2. BIN
      models/.teapot.obj.swp
  3. 2 1
      src/objParser.cpp
  4. 1 1
      src/scene.cpp
  5. 2 1
      src/softwareRenderer.cpp

+ 8 - 10
include/shader.h

@@ -8,7 +8,7 @@
 
 struct IShader {
     virtual ~IShader() {};
-    virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intens) = 0;
+    virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intens=0) = 0;
     virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts) = 0;
 };
 
@@ -21,26 +21,24 @@ struct FlatShader : public IShader {
         return MVP.matMultVec(vertex);
     }
 
-    virtual bool fragment(Vector3 &lambdas, Vector3 &color, float &depth, Vector3 &zVerts){
+    virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts){
         color = rgb*intensity;
-        depth = lambdas.dotProduct(zVerts);
+        depth = bari.dotProduct(zVerts);
         return false;
     }
 
 };
 
-struct GourardShader : public IShader {
-    float intensity;
+struct GouraudShader : public IShader {
+    Vector3 varying_intensity;
     Vector3 rgb{255,255,255};
 
-    virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intens){
-        intensity = intens;
+    virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP,float intens =0){
         return MVP.matMultVec(vertex);
     }
 
-    virtual bool fragment(Vector3 &lambdas, Vector3 &color, float &depth, Vector3 &zVerts){
-        color = rgb*intensity;
-        depth = lambdas.dotProduct(zVerts);
+    virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts){
+        depth = bari.dotProduct(zVerts);
         return false;
     }
 

BIN
models/.teapot.obj.swp


+ 2 - 1
src/objParser.cpp

@@ -18,6 +18,7 @@ bool OBJ::fileExists(std::string &path){
     return file.good();
 }
 
+//Main OBJ parsing function
 void OBJ::loadFileData(Mesh &mesh, std::ifstream &file){
     std::string line, key, x ,y ,z;
     Vector3 indices[3];
@@ -36,7 +37,7 @@ void OBJ::loadFileData(Mesh &mesh, std::ifstream &file){
             Vector3 normal(std::stof(x),std::stof(y),std::stof(z));
             mesh.normals.push_back(normal);
         }
-        else if(key == "f"){ //
+        else if(key == "f"){ //index data
             iss >> x >> y >> z;
             std::vector<std::string> splitX = split(x,delimeter); 
             std::vector<std::string> splitY = split(y,delimeter);

+ 1 - 1
src/scene.cpp

@@ -7,7 +7,7 @@ Scene::Scene(std::string path){
 }
 
 Scene::~Scene(){
-
+    //Making sure you don't attempt to delete models that don't exist
     if (!emptyScene){
         for(Model *models : modelsInScene){
             delete models;

+ 2 - 1
src/softwareRenderer.cpp

@@ -55,6 +55,7 @@ void SoftwareRenderer::drawTriangularMesh(Mesh* triMesh){
 
     //Getting the vertices, faces 
     std::vector<Vector3> * vIndices = &triMesh->vertexIndices;
+    std::vector<Vector3> * nIndices = &triMesh->normalsIndices;
     std::vector<Vector3> * vertices = &triMesh->vertices;
     std::vector<Vector3> * normals = &triMesh->normals;
 
@@ -62,7 +63,7 @@ void SoftwareRenderer::drawTriangularMesh(Mesh* triMesh){
     Vector3 trianglePrimitive[3];
 
     //Initializing shader
-    GourardShader shader;
+    GouraudShader shader;
 
     //Building ModelViewProjection matrix
     Matrix4 MVP = (mCamera->projectionMatrix)*(mCamera->viewMatrix);