Esempio n. 1
0
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");
	}
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
  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;
  }