void Renderable::draw() { switch(mNumIndicesPerElement) { case 0: // this "pseudo" case is handled by triangle drawer (point cloud w/o indices) drawTriangleMesh(); break; case 1: LOG("native point rendering not implemented yet"); break; case 2: drawLineList(); break; case 3: drawTriangleMesh(); break; case 4: LOG("native quad rendering not implemented yet"); default: LOG("number of indices per primitive not specified"); } }
void BccWorld::draw() { // BoundingBox box; // m_grid->getBounding(box); // glColor3f(.21f, .21f, .21f); // m_drawer->boundingBox(box); // m_grid->draw(m_drawer, (unsigned *)m_mesh.m_anchorBuf->data()); drawTetrahedronMesh(); drawAnchor(); drawTriangleMesh(); glDisable(GL_DEPTH_TEST); // glColor3f(.59f, .02f, 0.f); // drawCurves(); // drawCurveStars(); const unsigned selectedCurveGrp = m_cluster->currentGroup(); if(m_cluster->isGroupIdValid(selectedCurveGrp)) { m_drawer->setGroupColorLight(selectedCurveGrp); m_drawer->geometry(m_cluster->group(selectedCurveGrp)); } // m_drawer->drawKdTree(m_triIntersect); }
void OpenGLRenderer::renderFrame(const Ref<Camera>& camera, const Ref<BackendScene>& scene, Ref<Film>& film) { /*! render frame */ double t = getSeconds(); this->camera = camera; this->scene = scene; this->film = film; /*! precompute some values */ if (!OpenGLRenderer::is_initialized){ OpenGLRenderer::initGL(scene); } glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, OpenGLRenderer::fbo_render); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D,OpenGLRenderer::img_render, 0); glEnable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glEnable(GL_CULL_FACE); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (linedrawing) glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glViewport(0,0,fb_size_w,fb_size_h); PinholeCamera* cam = dynamic_cast<PinholeCamera*>(camera.ptr); if (!cam) { std::cerr<<"OpenGL Renderer use only pinehole camera ! "<<std::endl; exit(1); } AffineSpace worldToCam = rcp(cam->localToWorld); float mat[16]; worldToCam.to4x4ArrayMatrix(mat); glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); //std::cerr<<"Far plane ..."<<std::endl; gluPerspective(cam->angle,cam->aspectRatio,cam->focalDistance,1000.0*cam->focalDistance); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadMatrixf(mat); //glMultMatrixf(mat); //! Handle lights if (scene->allLights.size()>0) { glEnable(GL_LIGHTING); uint ind_lght = 0; std::vector< Ref< Light > > lights = scene->allLights; for(std::vector< Ref< Light > >::iterator it = lights.begin();it != lights.end();it++) { handleLight(ind_lght++,*it); } } glColor3f(1.0,0.0,0.0); std::vector< Ref< Instance > > geom = scene->geometry; Ref<Shape> one_shape; uint ind_mesh = 0; for(std::vector< Ref< Instance > >::iterator it = geom.begin();it != geom.end();it++) { one_shape = (*it)->shape; handleMaterial((*it)->material); if (TriangleMesh* tm = dynamic_cast<TriangleMesh*>(one_shape.ptr)) { drawTriangleMesh(ind_mesh++,tm); } else if (Triangle* tr = dynamic_cast<Triangle*>(one_shape.ptr)) { drawTriangle(tr); } //! Handle here all other cases else if (TriangleMeshWithNormals* trn = dynamic_cast<TriangleMeshWithNormals*>(one_shape.ptr)) { drawTriangleMeshNormals(ind_mesh++,trn); } else { //std::cerr<<" Is a "<<typeid(*one_shape).name()<<std::endl; } } glPopMatrix(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glFinish(); //! Copy of the GPU framebuffer to the CPU color buffer... glReadPixels(0,0,OpenGLRenderer::fb_size_w,OpenGLRenderer::fb_size_h,GL_RGB, GL_UNSIGNED_BYTE,OpenGLRenderer::color_buffer); glFinish(); glDisable(GL_DEPTH_TEST); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glDisable(GL_DEPTH_TEST); //! Copy of the CPU color buffer to the film... Col3f colcour; for(uint i=0;i<fb_size_w;i++) { for(uint j=0;j<fb_size_h;j++) { colcour.r = OpenGLRenderer::color_buffer[(fb_size_h-1-j)*3*fb_size_w+3*i]/255.0; colcour.g = OpenGLRenderer::color_buffer[(fb_size_h-1-j)*3*fb_size_w+3*i+1]/255.0; colcour.b = OpenGLRenderer::color_buffer[(fb_size_h-1-j)*3*fb_size_w+3*i+2]/255.0; film->set(i,j,colcour); } } this->camera = null; this->scene = null; this->film = null; double dt = getSeconds()-t; /*! print framerate */ std::cout << "\r" << 1.0f/dt << " fps, " << dt*1000.0f << " ms" ;//<< std::endl; }