Vector4f specularTerm(Vector4f ks, Vector4f intens, Vector4f normal, Vector4f light, Vector4f viewer, float p){ Vector4f refl = light*(float)(-1) + normal*((float)2*(light.adjoint()*normal)); float dotProduct = refl.adjoint()*viewer; dotProduct = max(dotProduct,(float)0); if (dotProduct==(float)0){ return Vector4f(0,0,0,0); }else{ return times(ks,intens)* pow(dotProduct, p); } };
// Shading Vector4f diffuseTerm(Vector4f kd, Vector4f intens, Vector4f normal, Vector4f light){ float dotProduct = light.adjoint()*normal; dotProduct = max(dotProduct,(float)0); if (dotProduct == (float)0) { return Vector4f(0,0,0,0); } else{ return times(kd,intens).adjoint()*dotProduct; } };
// Shading Color diffuseTerm(Color kd, Color intens, Vector4f normal, Vector4f light){ float dotProduct = light.adjoint()*normal; dotProduct = max(dotProduct,(float)0); if (dotProduct == (float)0) { return Color(0.0f, 0.0f, 0.0f); } else{ return (kd*intens)*dotProduct; } };
Vector4f find_reflection(Ray ray, Vector4f normal){ // if (ray.direction[3] != 0 || ray.origin[3] != 1){ // cout << ray.direction << endl; // cout << ray.origin << endl; // } Vector4f direction = ray.direction; float c = -normal.adjoint()*direction; float divider = normal[0]*normal[0]+normal[1]*normal[1]+normal[2]*normal[2]; c = c/divider; Vector4f Reflect = direction + (2*normal*c); return Reflect; };