Example #1
0
void Viewer::paintGL() {
  glClearColor(0.4, 0.4, 0.4, 0.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  sceneRoot->walk_gl(this);

  if (showCircle) {
    draw_trackball_circle();
  }
}
Example #2
0
bool Viewer::on_expose_event(GdkEventExpose* event)
{
	Glib::RefPtr<Gdk::GL::Drawable> gldrawable = get_gl_drawable();
	
	if (!gldrawable) return false;
	
	if (!gldrawable->gl_begin(get_gl_context()))
		return false;
		
	if (zBufferCull)
	{
		glEnable(GL_DEPTH_TEST);
		glDepthMask(GL_TRUE);
	}
	
	if (backFaceCull)
	{
		glEnable(GL_CULL_FACE);
		glCullFace(GL_BACK);
	}
	
	if (frontFaceCull)
	{
		glEnable(GL_CULL_FACE);
		glCullFace(GL_FRONT);
	}
	
	// Set up for perspective drawing 
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glViewport(0, 0, get_width(), get_height());
	gluPerspective(40.0, (GLfloat)get_width()/(GLfloat)get_height(), 0.1, 1000.0);
	
	// change to model view for drawing
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	
	// Clear framebuffer
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	
	glEnable(GL_NORMALIZE);
	// Set up lighting	
	// Initialize lighting settings
	glShadeModel(GL_SMOOTH);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	glEnable(GL_LIGHTING);
	
	// Create one light source
	glEnable(GL_LIGHT0);
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
	// Define properties of light 
	float ambientLight0[] = { 0.3f, 0.3f, 0.3f, 1.0f };
	float diffuseLight0[] = { 0.8f, 0.8f, 0.8f, 1.0f };
	//float specularLight0[] = { 0.6f, 0.6f, 0.6f, 1.0f };
	float position0[] = { 0.0f, 0.0f, 0.0f, 1.0f };	
	glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight0);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight0);
	//glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight0);
	glLightfv(GL_LIGHT0, GL_POSITION, position0);

	// Draw stuff
	draw_puppet();
	
	if(drawTrackballCircle)
		draw_trackball_circle();
	
	// Swap the contents of the front and back buffers so we see what we
	// just drew. This should only be done if double buffering is enabled.
	gldrawable->swap_buffers();
	
	gldrawable->gl_end();
	
	return true;
}
Example #3
0
bool Viewer::on_expose_event(GdkEventExpose* event)
{
  Glib::RefPtr<Gdk::GL::Drawable> gldrawable = get_gl_drawable();

  if (!gldrawable) return false;

  if (!gldrawable->gl_begin(get_gl_context()))
    return false;

  //glEnable(GL_CULL_FACE);
  //glCullFace(GL_FRONT);

// blending
  glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  // Set up for perspective drawing 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glViewport(0, 0, get_width(), get_height());
  gluPerspective(40.0, (GLfloat)get_width()/(GLfloat)get_height(), 0.1, 1000.0);

  // change to model view for drawing
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  // Clear framebuffer{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
  // Set up lighting
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);

  // put light behind camera
  GLfloat lightpos[] = {0.5f, 1.f, 10.f, 0.f};
  glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

  GLfloat ambient[] = {0.2f, 0.2f, 0.2f, 1.f};
  GLfloat diffuse[] = {0.8f, 0.8, 0.8f, 1.f};
  GLfloat specular[] = {1.f, 1.f, 1.f, 1.f};
  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
  glLightfv(GL_LIGHT0, GL_SPECULAR, specular);

  glEnable(GL_NORMALIZE);

  // toogle options
  DEBUG_MSG("Front/Back Cull " << m_frontCull << "/" << m_backCull << " Zbuf " << m_zBuffer);
  if (m_frontCull || m_backCull) {
    glEnable(GL_CULL_FACE);
    if (m_backCull && m_frontCull) {
      glCullFace(GL_FRONT_AND_BACK);
    }
    else if (m_frontCull) {
      glCullFace(GL_FRONT);
    }
    else {
      glCullFace(GL_BACK);
    }
  }
  else {
    glDisable(GL_CULL_FACE);
  }
  if (m_zBuffer) {
    glEnable(GL_DEPTH_TEST);
    glDepthMask(true);
  }
  else {
    glDisable(GL_DEPTH_TEST);
    glDepthMask(false);
  }


  glPushMatrix();

    //Matrix4x4 daT = translation(Vector3D(5.0, 0.0, 0.0));
    //glMultMatrixd(daT.transpose().begin());

    // gl use column order matrix, m4x4 is row order
    Matrix4x4 trackballM = m_trackballTranslation * m_trackballRotation;
    glMultMatrixd(trackballM.transpose().begin());

      // draw model
    m_root->walk_gl(false);


    // glPushMatrix();

    //   // push keep into screen
    //   //glTranslated(0.0, 0.0, -10.0);

    //   //glTranslated(0.0, 0.0, -20.0);
    //   GLUquadricObj * quadric = gluNewQuadric();
    //   gluSphere(quadric, 1.f, 10, 10);

    // glPopMatrix();

  glPopMatrix();



  if (m_drawCircle) {
    draw_trackball_circle();
  }

  // Swap the contents of the front and back buffers so we see what we
  // just drew. This should only be done if double buffering is enabled.
  gldrawable->swap_buffers();

  gldrawable->gl_end();

  return true;
}