Pryamid demo....

Here is a little demo I am working on.
I am using GLUT as to keep it platform independent. Does not do too much, spins 1000 pryamids on all axis at this point.

/* Pyramid1000 by Eric Stringer 2002 /
/
main.c */

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
#include “mystuff.h”

static int xsides = 0, rotateX = 0, rotateY = 0, rotateZ = 0;
static float xscale = 1;

static Point3F pryamida[21] = {{0.0f,1.0f,0.0f},{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f},{0.0f,1.0f,0.0f},
{0.0f,1.0f,0.0f},{1.0f,-1.0f,1.0f},{1.0f,-1.0f,-1.0f},{0.0f,1.0f,0.0f},
{0.0f,1.0f,0.0f},{1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,-1.0f},{0.0f,1.0f,0.0f},
{0.0f,1.0f,0.0f},{-1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,1.0f},{0.0f,1.0f,0.0f},
{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f},{1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,1.0f}};

static Point3F pryamid[18] = {{0.0f,1.0f,0.0f},{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f},
{0.0f,1.0f,0.0f},{1.0f,-1.0f,1.0f},{1.0f,-1.0f,-1.0f},
{0.0f,1.0f,0.0f},{1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,-1.0f},
{0.0f,1.0f,0.0f},{-1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,1.0f},
{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f},{1.0f,-1.0f,-1.0f},
{1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,-1.0f},{-1.0f,-1.0f,1.0f}};

static Point3F pryamidc[18] = {{1.0f,1.0f,1.0f},{1.0f,1.0f,1.0f},{1.0f,1.0f,1.0f},
{0.5f,1.0f,0.5f},{0.5f,1.0f,0.5f},{0.5f,1.0f,0.5f},
{0.5f,0.5f,0.5f},{0.5f,0.5f,0.5f},{0.5f,0.5f,0.5f},
{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},
{1.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},
{1.0f,1.0f,0.0f},{1.0f,1.0f,0.0f},{1.0f,1.0f,0.0f}};

static Point3F pryamidl[1000];

static Primitive3F object[1];

static Point3F Vmemory[10][100];

static void TimeEvent(int te)
{
int timent;
rotateX = rotateX + 5;
if (rotateX > 360) rotateX = 0;
rotateY = rotateY + 5;
if (rotateY > 360) rotateY = 0;
rotateZ = rotateZ + 5;
if (rotateZ > 360) rotateZ = 0;

glutPostRedisplay();
glutTimerFunc( 10, TimeEvent, 1);
}

void buildquad( int sides, Point3F polygon[])
{
float angle, xangle;
float x, y, z;
float r;
int i;

r = 2.0f;
xangle = 3.1415927f / sides;

for (i=0; i <= sides; i++)
{
angle = xangle * i * 2;
polygon[i].xyz[0] = r * cos( angle ); // X
polygon[i].xyz[1] = r * sin( angle ); // Y
polygon[i].xyz[2] = 0.0f; // Z
}
polygon[i] = polygon[0];
//polygon[i].xyz[1] = polygon[0].xyz[1];
//polygon[i].xyz[2] = polygon[0].xyz[2];

}

void init(void)
{
int ix,iy,iz;
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
//glDepthFunc(GL_EQUAL);
//glEnable(GL_DEPTH_TEST);
object[0].Vertex3f = Vmemory;

object[0].Sides = 8;
object[0].Scale = 1;
object[0].x = 0.0f;
object[0].y = 0.0f;
object[0].z = -2.0f;
object[0].Color3f[0] = 1.0f;
object[0].Color3f[1] = 0.5f;
object[0].Color3f[2] = 1.0f;
buildquad(object[0].Sides , object[0].Vertex3f);
for(iz=0; iz < 10; iz++)
{
for(iy=0; iy < 10; iy++)
{
for(ix=0; ix < 10; ix++)
{
pryamidl[iz100+iy10+ix].xyz[0] = ix * 2 - 9;
pryamidl[iz100+iy10+ix].xyz[1] = iy * 2 - 9;
pryamidl[iz100+iy10+ix].xyz[2] = iz * 2 - 34;
}
}
}

}

void display(void)
{
int i,j;

glClear (GL_COLOR_BUFFER_BIT);

//glPushMatrix();
for(j=0; j < 1000; j++)
{
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);

//glTranslatef(1,1,-15);
glTranslatef(pryamidl[j].xyz[0], pryamidl[j].xyz[1], pryamidl[j].xyz[2]);
glRotatef(rotateX, 1.0f, 0.0f, 0.0f);
glRotatef(rotateY, 0.0f, 1.0f, 0.0f);
glRotatef(rotateZ, 0.0f, 0.0f, 1.0f);
glScalef(xscale, xscale, xscale);
glBegin(GL_TRIANGLES);

for(i=0;i <= 17;i++)
{
glColor3f( pryamidc[i].xyz[0], pryamidc[i].xyz[1],pryamidc[i].xyz[2]);
glVertex3fv( &pryamid[i] );
}

glEnd();
glPopMatrix();
}

glutSwapBuffers();
}

void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0,(GLfloat) w/(GLfloat) h, 1.0, 50.0);
glMatrixMode(GL_MODELVIEW);
// glLoadIdentity();
//glOrtho(-8.00,8.00,-8.00, 8.00,1.00, 25.00);
gluLookAt (0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//glMatrixMode(GL_MODELVIEW);
}

void keyboard (unsigned char key, int x, int y)
{
switch (key) {
case ‘-’:
xsides–;
if (xsides < 3) xsides = 3;
glutPostRedisplay();
break;
case ‘+’:
xsides++;
if (xsides > 30) xsides = 30;
glutPostRedisplay();
break;
case ‘y’:
rotateY = rotateY + 15;
if (rotateY > 360) rotateY = 0;
glutPostRedisplay();
break;
case ‘Y’:
rotateY = rotateY - 15;
if (rotateY < 0) rotateY = 360;
glutPostRedisplay();
break;
case ‘x’:
rotateX = rotateX + 15;
if (rotateX > 360) rotateX = 0;
glutPostRedisplay();
break;
case ‘X’:
rotateX = rotateX - 15;
if (rotateX < 0) rotateX = 360;
glutPostRedisplay();
break;
case ‘z’:
rotateZ = rotateZ + 15;
if (rotateZ > 360) rotateZ = 0;
glutPostRedisplay();
break;
case ‘Z’:
rotateZ = rotateZ - 15;
if (rotateZ < 0) rotateZ = 360;
glutPostRedisplay();
break;
case ‘s’:
xscale = xscale -0.01f;
if (xscale < 0.01f ) rotateZ = 0.01f;
glutPostRedisplay();
break;
case ‘S’:
xscale = xscale + 0.01f;
if (xscale > 10) xscale = 10;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}

object[0].Scale = xscale;
object[0].Sides = xsides;
object[0].Color3f[0] = 1.0f;
object[0].Color3f[1] = 0.5f;
object[0].Color3f[2] = 1.0f;
buildquad(object[0].Sides , object[0].Vertex3f);
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
glutSetWindowTitle(“GLbase”);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutTimerFunc( 10, TimeEvent, 1);
glutMainLoop();
return 0;
}

/* mystuff.h */
typedef struct
{
GLfloat xyz[3];

}Point3F;

typedef struct
{
int Sides;
GLfloat x, y, z;
GLfloat Scale;
GLfloat Color3f[3];
Point3F* Vertex3f;
}Primitive3F;

I must have missed the question mark

Not really a question as much I want feedback on the demo so far. Check the code for things maybe that I am doing wrong or could improve on.

Originally posted by tempocrew:
I must have missed the question mark

didn’t know that this is also a feature of this forum
may i sent my 2000 lines of code, too, so someone can check if it’s ok and perhaps optimize it for me?

no offence meant

and by the way if it does what it should why changing it?

you may also take a look here
not really up to date but deals with some optimization stuff
http://www.mesa3d.org/brianp/sig97/perfopt.htm

[This message has been edited by satan (edited 02-15-2002).]