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
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);
|
|
}
|