next up previous contents index
Next: MessageBox|InputBox|FileDialog Up: Programming Previous: QTclVtkWidget   Contents   Index


OpenGL

QOpenGLWidget is inserted in Qt Designer. You may import OpenGL scenes using 3D Exploration http://www.righthemisphere.com/sitemap.htmThe resulting files look as follows.

Figure 6.21: A OpenGL file produced via 3D Exploration
glBegin(4);
glEnd();
glMaterialfv(1032,4608,0.117647,0.117647,0.117647,1.000000);
glMaterialfv(1032,4609,1.000000,1.000000,1.000000,1.000000);
glMaterialfv(1032,4610,1.000000,1.000000,1.000000,1.000000);
glMaterialfv(1032,5632,0.000000,0.000000,0.000000,1.000000);
glMaterialf(1032,5633,8.000000);
glBegin(4);
glNormal3f(0.000000,0.000000,-1.000000);
glTexCoord2f(0.000000,0.000000);
glVertex3f(-0.440655,0.000000,-0.139700);
glNormal3f(0.000000,0.000000,-1.000000);
glTexCoord2f(0.000000,0.000000);
glVertex3f(-0.308329,-0.500000,-0.139700);
glNormal3f(0.000000,0.000000,-1.000000);
glTexCoord2f(0.000000,0.000000);
glVertex3f(-0.440655,-0.500000,-0.139700);
glNormal3f(0.000000,0.000000,-1.000000);
...

Figure 6.22: Using OpenGL within pvserver
static void initializeGL()
{
  GLuint list;

  glClearColor(0.0,1.0,0.0,0.0);		  // Let OpenGL clear to green
  glEnable(GL_DEPTH_TEST);
  glClear(GL_COLOR_BUFFER_BIT);

  glShadeModel(GL_SMOOTH);
  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
  glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);
  glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_DEPTH_TEST);

  list = glGenLists(1);
  glNewList(list, GL_COMPILE);

  pvSendFile(myparam,"r.gl");

  glEndList();
  object = list;
}

static void resizeGL(int w, int h)
{
  glViewport( 0, 0, (GLint)w, (GLint)h );
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
}

static void paintGL()
{
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glFrustum(-frustSize, frustSize, -frustSize, frustSize, frustNear, frustFar);
  glTranslatef( 0.0, 0.0, -3.0 );
  glScalef( scale, scale, scale );
  glRotatef( xRot, 1.0, 0.0, 0.0 );
  glRotatef( yRot, 0.0, 1.0, 0.0 );
  glRotatef( zRot, 0.0, 0.0, 1.0 );
  glCallList(object);
}

static int defineMask(PARAM *p)
{
  ...
  /* define a OpenGL Widget */
  pvGlBegin(p,ID_GL);
  initializeGL();
  resizeGL(640,480);
  pvGlEnd(p);
  return 0;
}



Rainer Lehrig 2004-02-17