You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

100 lines
2.9 KiB

#include "skybox.h"
#include "utils.h"
void SkyBox::Init(const char * imageDir)
{
char temp[256];
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "front.bmp");
mTextures[0] = CreateTexture2DFromBMP(temp);
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "back.bmp");
mTextures[1] = CreateTexture2DFromBMP(temp);
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "left.bmp");
mTextures[2] = CreateTexture2DFromBMP(temp);
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "right.bmp");
mTextures[3] = CreateTexture2DFromBMP(temp);
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "top.bmp");
mTextures[4] = CreateTexture2DFromBMP(temp);
memset(temp, 0, 256);
strcpy(temp, imageDir);
strcat(temp, "bottom.bmp");
mTextures[5] = CreateTexture2DFromBMP(temp);
mFastDrawCall = CreateDisplayList([this]()->void {DrawCommand();});
}
void SkyBox::DrawCommand()
{
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mTextures[0]);
glBegin(GL_QUADS);
glColor4ub(255, 255, 255, 255);
glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f,-0.5f,-0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
glEnd();
glBindTexture(GL_TEXTURE_2D, mTextures[1]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
glEnd();
glBindTexture(GL_TEXTURE_2D, mTextures[2]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
glEnd();
glBindTexture(GL_TEXTURE_2D, mTextures[3]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f); glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f);
glEnd();
glBindTexture(GL_TEXTURE_2D, mTextures[4]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
glEnd();
glBindTexture(GL_TEXTURE_2D, mTextures[5]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, -0.5f, -0.5f);
glEnd();
}
void SkyBox::Draw()
{
glCallList(mFastDrawCall);
}