void FrameBufferObject::debugMode(Light &light, Node& mainNode, const glm::mat4& projection, int x, int y, int width, int height, Shader& shader) { glCullFace(GL_FRONT); glm::mat4 view; glm::vec4 lightPos4 = light.getPosition(); glm::vec3 lightPos3(lightPos4.x,lightPos4.y,lightPos4.z); glUseProgram(shader.getProgramID()); glUniform4fv(glGetUniformLocation(shader.getProgramID(), "pointLightPos"), LightManager::get().getPointLightCount(), LightManager::get().getPointLightsPos()); glUniform4fv(glGetUniformLocation(shader.getProgramID(), "pointLightProp"), LightManager::get().getPointLightCount(), LightManager::get().getPointLightsProp()); glUniform1i(glGetUniformLocation(shader.getProgramID(), "pointLightCount"), LightManager::get().getPointLightCount()); glUniformMatrix4fv(glGetUniformLocation(shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(projection)); // Clear screen glClearColor(FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX); for (size_t i = 0 ; i < CameraDirection::NUM_OF_LAYERS ; ++i) { glViewport(x+width*(i%3),y+height*(i/3),width,height); //glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); view = glm::lookAt(lightPos3, lightPos3+cameraDirection[i].Target, cameraDirection[i].Up); glUniformMatrix4fv(glGetUniformLocation(shader.getProgramID(), "view"), 1, GL_FALSE, glm::value_ptr(view)); mainNode.draw(view, glm::mat4(1), projection, shader); } }
void FrameBufferObject::shadowPass(size_t textureId_p, Light &light, Node& mainNode, const glm::mat4& projection) { glCullFace(GL_FRONT); glm::mat4 view; glm::vec4 lightPos4 = light.getPosition(); glm::vec3 lightPos3(lightPos4.x,lightPos4.y,lightPos4.z); glUseProgram(m_shadowMapShader->getProgramID()); glUniform3f(glGetUniformLocation(m_shadowMapShader->getProgramID(), "lightPos"), lightPos4.x,lightPos4.y,lightPos4.z); glViewport(0,0,m_textureSize,m_textureSize); // Clear screen glClearColor(FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX); for (size_t i = 0 ; i < CameraDirection::NUM_OF_LAYERS ; ++i) { bindForWriting(textureId_p, cameraDirection[i].CubemapFace); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); view = glm::lookAt(lightPos3, lightPos3+cameraDirection[i].Target, cameraDirection[i].Up); mainNode.draw(view, glm::mat4(1), projection, *m_shadowMapShader); } }
void ShaderSpecularContour::findTangent(const unsigned int i) { gmVector3 myV = *(view->getCameraPosition()); gmVector3 ni, posi; //particle normal and position posi = position->getPosition(i); ni = impInt->grad(i); gmVector4 lightPos4; light->getLightPosition(lightPos4); gmVector3 lightPos3(lightPos4[0],lightPos4[1],lightPos4[2]); gmVector3 s = myV.normalize() + lightPos3.normalize(); double niLength = ni.length(); double sLength = s.length(); gmMatrix3 Hess = impInt->hess(i); gmVector3 specularNormal; specularNormal = (Hess * s) - shine *( sLength * (1/niLength) *( Hess * ni)); gmVector3 tangent = -1 * cross(ni,specularNormal); if(tangent.lengthSquared() > gmEPSILON) tangent.normalize(); tangentAttr->setVector(i,tangent); }
void ManagerLight::init() { // point lights float dif[4] = { 0.7f, 0.7f, 0.3f, 1.0f }; Vector diff(dif, 4); float specPointf[4] = { 0.1f, 0.1f, 0.1f, 1.0f }; Vector specPoint(specPointf, 4); float lpos1[4] = { 0.0f, -1.0f, 0.5f, 1.0f }; Vector lightPos1(lpos1, 4); Light *light1 = new Light(0, Light::POINT_LIGHT, game); light1->setPosition(lightPos1); light1->setDiffuse(diff); light1->setAmbient(diff); light1->setSpecular(specPoint); lights.push_back(light1); float lpos2[4] = { 10.0f, -1.0f, 0.5f, 1.0f }; Vector lightPos2(lpos2, 4); Light *light2 = new Light(1, Light::POINT_LIGHT, game); light2->setPosition(lightPos2); light2->setDiffuse(diff); light2->setAmbient(diff); light2->setSpecular(specPoint); lights.push_back(light2); float lpos3[4] = { -10.0f, -1.0f, 0.5f, 1.0f }; Vector lightPos3(lpos3, 4); Light *light3 = new Light(2, Light::POINT_LIGHT, game); light3->setPosition(lightPos3); light3->setDiffuse(diff); light3->setAmbient(diff); light3->setSpecular(specPoint); lights.push_back(light3); float lpos4[4] = { 0.0f, -13.0f, 0.5f, 1.0f }; Vector lightPos4(lpos4, 4); Light *light4 = new Light(3, Light::POINT_LIGHT, game); light4->setPosition(lightPos4); light4->setDiffuse(diff); light4->setAmbient(diff); light4->setSpecular(specPoint); lights.push_back(light4); float lpos5[4] = { 10.0f, -13.0f, 0.5f, 1.0f }; Vector lightPos5(lpos5, 4); Light *light5 = new Light(4, Light::POINT_LIGHT, game); light5->setPosition(lightPos5); light5->setDiffuse(diff); light5->setAmbient(diff); light5->setSpecular(specPoint); lights.push_back(light5); float lpos6[4] = { -10.0f, -13.0f, 0.5f, 1.0f }; Vector lightPos6(lpos6, 4); Light *light6 = new Light(5, Light::POINT_LIGHT, game); light6->setPosition(lightPos6); light6->setDiffuse(diff); light6->setAmbient(diff); light6->setSpecular(specPoint); lights.push_back(light6); // directional light float difDirf[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; Vector diffDir(difDirf, 4); float ldir[4] = { -1.0f, -1.0f, -1.0f, 0.0f }; Vector lightDir(ldir, 4); Light *dirLight = new Light(6, Light::DIR_LIGHT, game); dirLight->setDiffuse(diffDir); dirLight->setAmbient(diffDir); dirLight->setSpecular(diffDir); dirLight->setPosition(lightDir); this->dirLight = dirLight; lights.push_back(dirLight); // spot light float difSpotf[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; Vector difSpot(difSpotf, 4); float lSpotPosf[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; Vector lSpotPos(lSpotPosf, 4); float lSpotDirf[3] = { 0.0f, 0.0f, -1.0f }; Vector lSpotDir(lSpotDirf, 3); Light *spot = new Light(7, Light::SPOT_LIGHT, game); spot->setDiffuse(difSpot); spot->setAmbient(difSpot); spot->setSpecular(difSpot); spot->setPosition(lSpotPos); spot->setDirection(lSpotDir); spot->setCutoff(0.5f); spot->setExponent(0.1f); spotLight = spot; lights.push_back(spot); }