www.pudn.com > 林海血原源代码.zip > SkyBox.cpp
// SkyBox.cpp: implementation of the CSkyBox class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Texture.h"
#include "SkyBox.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSkyBox::CSkyBox()
{
}
CSkyBox::~CSkyBox()
{
for(int i=0;i<5;i++)
glDeleteTextures(1,&texSky[i]);
}
bool CSkyBox::LoadSkyTexture()
{
CTexture Texture;
char filename[64];
for(int i=0;i<5;i++)
{
wsprintf(filename,"sky/skyb%d.bmp",i);
if(!Texture.MakeTextureBind(filename,&texSky[i],1,0))
return false;
}
return true;
}
bool CSkyBox::InitSkyBox(int XLenght, int YLenght,int ZLenght,
int CenterX,int CenterY,int CenterZ)
{
m_XLength=XLenght;
m_YLength=YLenght;
m_ZLength=ZLenght;
m_CenterX=CenterX;
m_CenterY=CenterY;
m_CenterZ=CenterZ;
if(!LoadSkyTexture())return false;
return true;
}
void CSkyBox::DrawSkyBox()
{
int lx,ly,lz,cx,cy,cz;
lx=m_XLength;
ly=m_YLength;
lz=m_ZLength;
cx=m_CenterX;
cy=m_CenterY;
cz=m_CenterZ;
float btmy=0.0f;//This variable indicate how much texture should be cut from 0 to btmy
// glDisable(GL_FOG);
////////front
glBindTexture(GL_TEXTURE_2D, texSky[0]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0,btmy);
glVertex3i(-lx+cx, cy, -lz+cz);
glTexCoord2f(1,btmy);
glVertex3i(lx+cx, cy, -lz+cz);
glTexCoord2f(1,1);
glVertex3i(lx+cx, ly+cy, -lz+cz);
glTexCoord2f(0,1);
glVertex3i(-lx+cx, ly+cy, -lz+cz);
glEnd();
glDisable(GL_TEXTURE_2D);
/// ////////////////sky1
/////////////////right
glBindTexture(GL_TEXTURE_2D, texSky[1]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0,btmy);
glVertex3i(lx+cx, cy, -lz+cz);
glTexCoord2f(1,btmy);
glVertex3i(lx+cx, cy, lz+cz);
glTexCoord2f(1,1);
glVertex3i(lx+cx, ly+cy, lz+cz);
glTexCoord2f(0,1);
glVertex3i(lx+cx, ly+cy, -lz+cz);
glEnd();
glDisable(GL_TEXTURE_2D);
/// ////////////////sky2
//////////////back
glBindTexture(GL_TEXTURE_2D, texSky[2]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0,btmy);
glVertex3i(lx+cx, cy, lz+cz);
glTexCoord2f(1,btmy);
glVertex3i(-lx+cx, cy, lz+cz);
glTexCoord2f(1,1);
glVertex3i(-lx+cx, ly+cy, lz+cz);
glTexCoord2f(0,1);
glVertex3i(lx+cx, ly+cy, lz+cz);
glEnd();
glDisable(GL_TEXTURE_2D);
/// ////////////////sky3
////////////////left
glBindTexture(GL_TEXTURE_2D, texSky[3]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0,btmy);
glVertex3i(-lx+cx, cy, lz+cz);
glTexCoord2f(1,btmy);
glVertex3i(-lx+cx, cy, -lz+cz);
glTexCoord2f(1,1);
glVertex3i(-lx+cx, ly+cy, -lz+cz);
glTexCoord2f(0,1);
glVertex3i(-lx+cx, ly+cy, lz+cz);
glEnd();
glDisable(GL_TEXTURE_2D);
/// ////////////////sky4
/////////////up
glBindTexture(GL_TEXTURE_2D, texSky[4]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex3i(-lx+cx, ly+cy, -lz+cz);
glTexCoord2f(1,0);
glVertex3i(lx+cx,ly+cy, -lz+cz);
glTexCoord2f(1,1);
glVertex3i(lx+cx, ly+cy, lz+cz);
glTexCoord2f(0,1);
glVertex3i(-lx+cx, ly+cy, lz+cz);
glEnd();
glDisable(GL_TEXTURE_2D);
// glEnable(GL_FOG);
}