Code:
GLvoid SolidCube(float Length, float Width, float Height, float elevation, float posX, float posZ,
BOOL bTransparent,
float t1btmU, float t1btmV, float t1topU, float t1topV, float t1bakU, float t1bakV, float t1fntU, float t1fntV, float t1lftU, float t1lftV, float t1rhtU, float t1rhtV,
float t2btmU, float t2btmV, float t2topU, float t2topV, float t2bakU, float t2bakV, float t2fntU, float t2fntV, float t2lftU, float t2lftV, float t2rhtU, float t2rhtV,
float t3btmU, float t3btmV, float t3topU, float t3topV, float t3bakU, float t3bakV, float t3fntU, float t3fntV, float t3lftU, float t3lftV, float t3rhtU, float t3rhtV)
{
GLuint SCube;
SCube = glGenLists(1);
glNewList(SCube, GL_COMPILE);
LoadTextures();
while (bTransparent)
{
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
}
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB");
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, g_Texture[4]);
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, g_Texture[2]);
glActiveTextureARB(GL_TEXTURE2_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, g_Texture[3]);
glBegin(GL_QUADS); //bottom
glNormal3f( 0.0f, -1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1btmU, t1btmV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2btmU, t2btmV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3btmU, t3btmV);
glVertex3f(-Width/2 + posX, elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1btmU, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2btmU, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3btmU, 0.0f);
glVertex3f(-Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, 0.0f);
glVertex3f(Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, t1btmV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, t2btmV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, t3btmV);
glVertex3f(Width/2 + posX, elevation, Length/2 + posZ);
glEnd();
glBegin(GL_QUADS); //top
glNormal3f( 0.0f, 1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1topU, t1topV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2topU, t2topV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3topU, t3topV);
glVertex3f(-Width/2 + posX, elevation + Height, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1topU, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2topU, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3topU, 0.0f);
glVertex3f(-Width/2 + posX, elevation + Height, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, 0.0f);
glVertex3f(Width/2 + posX, elevation + Height, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, t1topV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, t2topV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, t3topV);
glVertex3f(Width/2 + posX, elevation + Height, Length/2 + posZ);
glEnd();
glBegin(GL_QUADS); //back
glNormal3f( 0.0f, 0.0f, -1.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1bakU, t1bakV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2bakU, t2bakV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3bakU, t3bakV);
glVertex3f(-Width/2 + posX, Height + elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1bakU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2bakU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3bakU, 0.0);
glVertex3f(-Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, 0.0);
glVertex3f(Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, t1bakV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, t2bakV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, t3bakV);
glVertex3f(Width/2 + posX, Height + elevation, -Length/2 + posZ);
glEnd();
glBegin(GL_QUADS); //front
glNormal3f( 0.0f, 0.0f, 1.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1fntU, t1fntV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2fntU, t2fntV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3fntU, t3fntV);
glVertex3f(-Width/2 + posX, Height + elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, t1fntU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t2fntU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, t3fntU, 0.0);
glVertex3f(-Width/2 + posX, elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, 0.0);
glVertex3f(Width/2 + posX, elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, Width, t1fntV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, Width, t2fntV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, Width, t3fntV);
glVertex3f(Width/2 + posX, Height + elevation, Length/2 + posZ);
glEnd();
glBegin(GL_QUADS); //left side
glNormal3f(-1.0f, 0.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -t1lftU, t1lftV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -t2lftU, t2lftV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -t3lftU, t3lftV);
glVertex3f(-Width/2 + posX, Height + elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -t1lftU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -t2lftU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -t3lftU, 0.0);
glVertex3f(-Width/2 + posX, elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -Length, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -Length, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -Length, 0.0);
glVertex3f(-Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -Length, t1lftV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -Length, t2lftV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -Length, t3lftV);
glVertex3f(-Width/2 + posX, Height + elevation, -Length/2 + posZ);
glEnd();
glBegin(GL_QUADS); //right side
glNormal3f( 1.0f, 0.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -t1rhtU, t1rhtV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -t2rhtU, t2rhtV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -t3rhtU, t3rhtV);
glVertex3f(Width/2 + posX, Height + elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -t1rhtU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -t2rhtU, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -t3rhtU, 0.0);
glVertex3f(Width/2 + posX, elevation, Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -Length, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -Length, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -Length, 0.0);
glVertex3f(Width/2 + posX, elevation, -Length/2 + posZ);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, -Length, t1rhtV);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, -Length, t2rhtV);
glMultiTexCoord2fARB(GL_TEXTURE2_ARB, -Length, t3rhtV);
glVertex3f(Width/2 + posX, Height + elevation, -Length/2 + posZ);
glEnd();
glEndList();
}
Code:
VOID EnableOpenGL( HWND hWnd, HDC * hDC, HGLRC * hRC )
{
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
float ScreenDepth = 16;
float ColorDepth = 24;
// get the device context (DC)
*hDC = GetDC( hWnd );
// set the pixel format for the DC
ZeroMemory( &pfd, sizeof( pfd ) );
pfd.nSize = sizeof( pfd );
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = ColorDepth;
pfd.cDepthBits = ScreenDepth;
pfd.iLayerType = PFD_MAIN_PLANE;
iFormat = ChoosePixelFormat( *hDC, &pfd );
SetPixelFormat( *hDC, iFormat, &pfd );
// create and enable the render context (RC)
*hRC = wglCreateContext( *hDC );
wglMakeCurrent( *hDC, *hRC );
SolidCube(0.5, 0.5, 0.5, 0.0, 0.0, 0.0,
FALSE,
2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0,
2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0,
2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0, 2.5, 1.0);
}