Page 1 of 1

3D Holders Table Function in Glut

PostPosted: Tue Jan 19, 2021 5:39 am
by hbyte
So lets see if we can plot Holders Table function uing Glut. We need to use a Buffer for this OpenGL Glut uses Buffers but the most basic is the one we used to create a 2D trace here.

First off we need to create an array of vertices to draw to our buffer:


Code: Select all
void loadpoints(void){

double t0,t1,t2,x_,y_;

for(int i=0;i<100;i++){

for(int j=0;j<100;j++){

x_ = i/10;
y_ = j/10;

t0 = sin(x_)*cos(y_);
t1 = exp(abs(1-sqrt(pow(x_,2)+pow(y_,2))/M_PI));
t2 = -abs(t0*t1);

funcpoints[i][j][0]=x_;
funcpoints[i][j][1]=y_;
funcpoints[i][j][2]=t2;
            }
            }

}




Next we need to send this array to our Buffer to draw lines in x,y directions. To stop the wrap around of these lines we clip the ends of each for loop.

Code: Select all

void drawlines2buffer(void){
glNewList(1,GL_COMPILE);
glPushMatrix ();

for(int i=0;i<200;i++){
for(int j=0;j<200;j++){
glBegin(GL_LINES);
glColor3f(0.0,1.0,1.0);
if(i<199){   
v3d( funcpoints[i][j][0],funcpoints[i][j][1],funcpoints[i][j][2]);
      v3d( funcpoints[i+1][j][0],funcpoints[i+1][j][1],funcpoints[i+1][j][2]);
 }
glEnd();

glBegin(GL_LINES);
glColor3f(0.0,1.0,1.0);
if(j<199){   
v3d( funcpoints[i][j][0],funcpoints[i][j][1],funcpoints[i][j][2]);
      v3d( funcpoints[i][j+1][0]+0.1,funcpoints[i][j+1][1]+0.1,funcpoints[i][j+1][2]+0.1);
 }
glEnd();

}
}
glPopMatrix ();


glEndList();
}



Now we need only add the following line to our draw function:

Code: Select all
 /* draw function in 3d */

glCallList(1);


And in Main we call the draw function and start the mainloop after running , just once, the last two function:

Code: Select all
loadpoints();
drawlines2buffer();
glutDisplayFunc(draw);
glutMainLoop();


Yipee and heres the output (Ive added some Glut Planes for fun):
Image
Image