void OpenGLShaderPointLight::copyLight(PointLight &light) { setParamValue("position", light.getPosition()); setParamValue("ambient", light.getAmbient()); setParamValue("diffuse", light.getDiffuse()); setParamValue("specular", light.getSpecular()); setParamValue("attenuation", light.getAttenuation()); setParamValue("cutoff", light.getCutoff()); bind(); }
void LegacyRenderer::render(const ICamera<float>& camera, const PointLight<float>& light, const TriangleBuffer& buffer) { const auto& positions = buffer.getPositions().get();// buffers[0].get(); const auto& normals = buffer.getNormals().get();//buffers[1].get(); if (positions.empty()) { return; } glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); const auto& projectionMatrix = camera.getProjectionMatrix(); const auto& modelviewMatrix = camera.getModelviewMatrix();; std::vector<float> lightPos = { light.getPos().getX(), light.getPos().getY(), light.getPos().getZ(), 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, lightPos.data()); glLightfv(GL_LIGHT0, GL_DIFFUSE, light.getDiffuse().toArray4().data()); // glLightfv(GL_LIGHT0, GL_SPECULAR, light.getSpecular().toArray4().data()); glLightfv(GL_LIGHT0, GL_AMBIENT, white); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glLoadMatrixf(projectionMatrix.toArray().data()); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glLoadMatrixf(modelviewMatrix.toArray().data()); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, yellow); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, positions.data()); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, normals.data()); //glDrawArrays(GL_TRIANGLES, 0, static_cast<GLsizei>(positions.size()) / 3); for (const auto& b : buffer.getBlocks()) { const auto& indices = b.getIndices(); glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(indices.size()), GL_UNSIGNED_INT, indices.data()); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_DEPTH_TEST); }