void CubeMapRenderer::render(const CubeMapTextureObject& cubeMapTexture, const ICamera<float>& camera, 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; } cubeMapTexture.bind(); glEnable(GL_DEPTH_TEST); glUseProgram(shader.getId()); //cubeMapTexture.bind(); // glUniform1f(shader.getUniformLocation("reflectFactor"), 0.8f); // glUniform1f(shader.getUniformLocation("refractFactor"), 1.2f); assert(GL_NO_ERROR == glGetError()); glUniform1i(shader.getUniformLocation("cubeMapTex"), cubeMapTexture.getId());// volumeTexture.getId()); glUniform3fv(shader.getUniformLocation("eyePosition"), 1, camera.getPosition().toArray().data()); assert(GL_NO_ERROR == glGetError()); glUniformMatrix4fv(shader.getUniformLocation("modelviewMatrix"), 1, false, camera.getModelviewMatrix().toArray().data()); glUniformMatrix4fv(shader.getUniformLocation("projectionMatrix"), 1, false, camera.getProjectionMatrix().toArray().data()); assert(GL_NO_ERROR == glGetError()); glVertexAttribPointer(shader.getAttribLocation("position"), 3, GL_FLOAT, GL_FALSE, 0, positions.data()); glVertexAttribPointer(shader.getAttribLocation("normal"), 3, GL_FLOAT, GL_FALSE, 0, normals.data()); assert(GL_NO_ERROR == glGetError()); assert(GL_NO_ERROR == glGetError()); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); for (const auto& b : buffer.getBlocks()) { const auto& indices = b.getIndices(); glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(indices.size()), GL_UNSIGNED_INT, indices.data()); } glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glBindFragDataLocation(shader.getId(), 0, "fragColor"); cubeMapTexture.unbind(); glDisable(GL_DEPTH_TEST); glUseProgram(0); }
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); }