BasicCube
February 12, 2008
/**
* This source code is part of the samples for "Game Programming in C++: Start to Finish".
*
* @Author : Erik Yuzwa
* @Date : 09/01/2005
* @Version: 1.0
*
* @Goal: The purpose of this code sample is to demonstrate how to create a spinning/rotating
* cube using a display list.
*/
#include "PeonMain.h"
#define TEX_0 1
class MainApp : public peon::IApplication
{
private:
GLuint m_uTriDisplayList;
float m_fZRotation;
float m_fYRotation;
public:
MainApp();
~MainApp();
bool onLoadWorld();
void onUnloadWorld();
void onUpdateWorld(float);
void onRenderWorld();
};
int main( int argc, char* argv[] )
{
new peon::EngineCore();
if(!peon::EngineCore::getSingleton().loadEngine("BasicCube", "data\\system.ini"))
{
return -1;
}
MainApp* pApp = new MainApp();
peon::EngineCore::getSingleton().setApplication( pApp );
return( peon::EngineCore::getSingleton().runEngine() );
}
MainApp::MainApp()
{
}
MainApp::~MainApp()
{
}
bool MainApp::onLoadWorld()
{
//similar to texture handle creation, create a display list handle
m_uTriDisplayList = glGenLists(1);
//compile a basic cube within this new list
glNewList( m_uTriDisplayList, GL_COMPILE );
glBegin(GL_QUADS);
// Front Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();
//you are finished with the display list. Close it off
glEndList();
m_fZRotation = 0.0f;
m_fYRotation = 0.0f;
peon::EngineCore::getSingleton().getRenderer()->loadTexture(TEX_0, "data\\textures\\sdl_logo.bmp");
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glShadeModel( GL_SMOOTH );
return true;
}
void MainApp::onUnloadWorld()
{
glDeleteLists(m_uTriDisplayList, 1);
}
void MainApp::onUpdateWorld(float fElapsedTime )
{
m_fZRotation += 8.0f * fElapsedTime;
m_fYRotation += 8.0f * fElapsedTime;
}
void MainApp::onRenderWorld()
{
peon::SceneRenderer* pRenderer = peon::EngineCore::getSingleton().getRenderer();
pRenderer->setTexture( TEX_0 );
glPushMatrix();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(m_fYRotation, 0.0f, 1.0f, 0.0f);
glRotatef(m_fZRotation, 0.0f, 0.0f, 1.0f );
glCallList( m_uTriDisplayList );
glPopMatrix();
}
Downloads
The source code is available here: PeonSDK-BasicCube
Posted in 

content rss