Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: Plotting surfaces

  1. #1
    Junior Member Newbie
    Join Date
    May 2004
    Posts
    11

    Plotting surfaces

    I'm making a program to plot functions using surfaces: i've got an array with points and have to create a surface using them. I've heard about an algorithm called "painter algorithm" or similar.

    Anybody knows how to implement this "painter algorithm"?
    Is there any OpenGL function or code to create a surface from a given set of points?

    Thanks in advance

  2. #2
    Junior Member Newbie
    Join Date
    May 2004
    Location
    Bulgaria
    Posts
    2

    Re: Plotting surfaces

    Here is an example program i've currently written. It draws a 3d surface from a math function with 3 arguments - f(x, z, t). Play with it - just change the function and see how the surface changes! It's really funny!

    Code :
    #include <GL/glut.h>
    #include <math.h>
    #define PI 3.14159265
     
    float rot, t = 0;
     
    float deg2rad (float deg)
    {
    	return deg*PI/180;
    }
     
    static void key (int key, int x, int y)
    {
    	switch (key) {
     
     	case GLUT_KEY_LEFT:
    		rot = 2;
    	break;
     
     	case GLUT_KEY_RIGHT:
    		rot = -2;
    	break;
     
     	case GLUT_KEY_UP:
     	case GLUT_KEY_DOWN:
    		rot = 0;
    	break;
      }
      glutPostRedisplay();
    }
     
    void draw ()
    {
    	glRotatef (rot, 1.0f, 1.0f, 0.0f);
    	float x, z;
    	glBegin (GL_LINES);
    	for (x=-20; x<=20; x+=1)
    	{
    		for (z=-20; z<=20; z+=1)
    		{
    			glVertex3f (x, t*(cos(deg2rad(x*15))+sin(deg2rad(z*15))), z);
    			glVertex3f (x+1, t*(cos(deg2rad((x+1)*15))+sin(deg2rad((z+1)*15))), z+1);
    		}
    	}
    	t += 0.01;
    	glutPostRedisplay ();
    	glEnd ();
    }
     
    void display ()
    {
    	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	draw ();
    	glutSwapBuffers ();
    }
     
    void init ()
    {
    	glEnable (GL_DEPTH_TEST);
    	glMatrixMode (GL_PROJECTION);
    	gluPerspective (45.0, 1.0, 1.0, 200.0);
    	glMatrixMode (GL_MODELVIEW);
    	gluLookAt( 0.0,   0.0, -100.0,
        		   0.0,   0.0,    0.0,
            	   0.0,   1.0,    1.0);
    }
     
    int main (int argc, char* argv[])
    {
    	glutInit (&amp;argc, argv);
    	glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    	glutCreateWindow ("3d function graph");
    	glutDisplayFunc (display);
    	glutSpecialFunc (key);
     
    	init ();
     
    	glutMainLoop ();
    	return 0;
    }
    Bye4Now

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •