def getIllumination(self, surfNormV: np.ndarray, pos: np.ndarray, cameraPos: np.ndarray, shinyness: float): #diffuse lightDir = Ray.normalizeVector( self.getClosestPointOfLight(Ray(pos, surfNormV)) - pos) diffuse = self._phong.diffuse * np.dot(lightDir, surfNormV) #specular vectorFromCam = pos - cameraPos reflectedVector = vectorFromCam - 2 * ( np.dot(vectorFromCam, surfNormV) * surfNormV) lightDir = Ray.normalizeVector( self.getClosestPointOfLight(Ray(pos, reflectedVector)) - pos) cameraDir = Ray.normalizeVector(cameraPos - pos) optReflAxis = Ray.normalizeVector(lightDir + cameraDir) specular = self._phong.specular * np.dot(surfNormV, optReflAxis)**shinyness return (diffuse, specular)
def norm(self): """Normal vector of surface """ return Ray.normalizeVector(np.cross(self.dirVec1, self.dirVec2))