Lighthouse3d.com

Please send me your comments
Display Lists Tutorial

Index

Introduction
Without Display Lists
Creating a DL
The Greedy Approach
Using Nested Display Lists
Other Considerations

Visual C++ project

[Previous: Introduction] [Next: Creating a DL]

The example without Display Lists


In the example about to be presented we are going to draw snowmen, 36 of them to be exact. First lets take a look at the code to render a single frame without using Display Lists.


    
void drawSnowMan() {

	glColor3f(1.0f, 1.0f, 1.0f);

// Draw Body	
	glTranslatef(0.0f ,0.75f, 0.0f);
	glutSolidSphere(0.75f,20,20);


// Draw Head
	glTranslatef(0.0f, 1.0f, 0.0f);
	glutSolidSphere(0.25f,20,20);

// Draw Eyes
	glPushMatrix();
	glColor3f(0.0f,0.0f,0.0f);
	glTranslatef(0.05f, 0.10f, 0.18f);
	glutSolidSphere(0.05f,10,10);
	glTranslatef(-0.1f, 0.0f, 0.0f);
	glutSolidSphere(0.05f,10,10);
	glPopMatrix();

// Draw Nose
	glColor3f(1.0f, 0.5f , 0.5f);
	glRotatef(0.0f,1.0f, 0.0f, 0.0f);
	glutSolidCone(0.08f,0.5f,10,2);
}

void renderScene(void) {
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Draw ground

	glColor3f(0.9f, 0.9f, 0.9f);
	glBegin(GL_QUADS);
		glVertex3f(-100.0f, 0.0f, -100.0f);
		glVertex3f(-100.0f, 0.0f,  100.0f);
		glVertex3f( 100.0f, 0.0f,  100.0f);
		glVertex3f( 100.0f, 0.0f, -100.0f);
	glEnd();

// Draw 36 Snowmen

	for(int i = -3; i < 3; i++)
		for(int j=-3; j < 3; j++) {
			glPushMatrix();
			glTranslatef(i*10.0,0,j * 10.0);
// Call the function to draw a snowman
			drawSnowMan();
			glPopMatrix();
		}
	glutSwapBuffers();
}



The full source code is available here.

The approximate frame rate for this example in the test machine is: 55 fps

[Previous: Introduction] [Next: Creating a DL]