3. Vincent

Die Vincent 3D Rendering Library wird über zwei verschiedene Projekte in der Sourceforge angeboten. Das Projekt Vincent Mobile 3D Rendering Library bietet die Grafik Libraries an, die auf die OpenGL ® ES 1.x API aufbauen.



Darstellung des Graphen auf dem PDA. Hierbei wird nun, aus dem am Anfang eingegebenen Werten, die Funktion berechnet und mittels OpenGL ES dargestellt.






Wenn man die Tastatur einbeldet, kann man mit den Pfeiltasten nach oben/unten/rechts/links gehen und in den Graphen rein und rauszoomen.






Folgend der Code-Auschnitt zum Zeichnen des Graphen und der Achsen. Wird die Position oder die Grösse geändert, werden alle Werte im Array output neu interpoliert und das Fenster neu gezeichnet.

void display(UGWindow uwin)
{
   glClear (GL_COLOR_BUFFER_BIT);

   int i;
   float x_prev;
   float x_cur;
   float y_cur;
   float y_min = 0;
   float y_max = 0;

   // Die Farben der Achsen und des Graphen

   GLfloat colors[] =
   {
   0.0f, 1.0f, 0.0f, 1.0f,
   0.0f, 1.0f, 0.0f, 1.0f,
   };

   GLfloat colors2[] =
   {
   1.0f, 1.0f, 1.0f, 1.0f,
   1.0f, 1.0f, 1.0f, 1.0f,
   };

   // Die Linie des Graphen besteht aus insgesamt
   // PRECISION Linien-Abschnitten

   GLfloat line[] =
   {
   output[0][0],output[0][1], 0.0,
   output[0][0],output[0][1], 0.0
   };

   // Hier wird der Graph gezeichnet
   // Der rechte Punkt einer Linie überschneidet sich dabei
   // mit dem linken Punkt der nächsten Linie

   for (i = 1; i < PRECISION; i++)
   {
      x_prev = output[i-1][0];
      x_cur = output[i][0];
      y_cur = output[i][1];

      line[0] = x_prev;
      line[3] = x_cur;
      line[1] = line[4];
      line[4] = y_cur;

      glColorPointer(4, GL_FLOAT, 0, colors2);
      glVertexPointer(3, GL_FLOAT, 0, line);
      glEnableClientState(GL_VERTEX_ARRAY);
      glEnableClientState(GL_COLOR_ARRAY);
      glDrawArrays(GL_LINES, 0, 2);

      if (y_cur < y_min)
         y_min = y_cur;
      if (y_cur > y_max)
         y_max = y_cur;
   }

   // Hier werden die Achsen gezeichnet

   GLfloat xAxis[] =
   {
   left, 0.0, 0.0,
   right, 0.0, 0.0
   };

   GLfloat yAxis[] =
   {
   0.0, bottom, 0.0,
   0.0, top, 0.0
   };

   glColorPointer(4, GL_FLOAT, 0, colors);
   glVertexPointer(3, GL_FLOAT, 0, xAxis);
   glEnableClientState(GL_VERTEX_ARRAY);
   glEnableClientState(GL_COLOR_ARRAY);
   glDrawArrays(GL_LINES, 0, 2);

   glColorPointer(4, GL_FLOAT, 0, colors);
   glVertexPointer(3, GL_FLOAT, 0, yAxis);
   glEnableClientState(GL_VERTEX_ARRAY);
   glEnableClientState(GL_COLOR_ARRAY);
   glDrawArrays(GL_LINES, 0, 2);

   glFlush ();

   ugSwapBuffers(uwin);
}