www.pudn.com > etree_src.zip > Enviroment.cpp
//****************************************************************************
// Enviroment.cpp: implementation of the CEnviroment class.
//
// Copyright (c) Boris J. Wang (e_boris2002@hotmail.com) 2002 - 2003
// From Institute of Computing Technology, Chinese Academy of Sciences
// Beijing 100871, China
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//****************************************************************************
#include "stdafx.h"
#include "opengl.h"
#include "Enviroment.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLfloat CEnviroment::EnvFogFar = 1000;
GLfloat CEnviroment::EnvFogNear = 300;
CEnviroment::CEnviroment(LPCTSTR SkyTexture,LPCTSTR GroundTexture,GLfloat iSkyR,GLfloat iSkyG,GLfloat iSkyB)
:Sky(SkyTexture,GL_Tex_BMP,0),
Ground(GroundTexture,GL_Tex_BMP,9)
{
SkyDetail = 20;
SkyR = iSkyR;
SkyG = iSkyG;
SkyB = iSkyB;
}
CEnviroment::CEnviroment()
:Sky(_T("sky.bmp"),GL_Tex_BMP,0),
Ground(_T("ground.bmp"),GL_Tex_BMP,8)
{
SkyDetail = 20;
SkyR = 24.0/256.0;//0.09375;
SkyG = 60.0/256.0;//0.234375;
SkyB = 107.0/256.0;//0.390625;
}
CEnviroment::~CEnviroment()
{
}
void CEnviroment::RenderAllWithFog()
{
glEnable(GL_FOG);
{
GLfloat fogColor[4] = {0.1953125,0.3515625,0.546875, 1.0}; //color of top sky
glFogi (GL_FOG_MODE, GL_LINEAR);
glFogfv (GL_FOG_COLOR, fogColor);
glFogf (GL_FOG_DENSITY, 1);
glFogf (GL_FOG_START, EnvFogNear);
glFogf (GL_FOG_END, EnvFogFar);
glHint (GL_FOG_HINT, GL_DONT_CARE );
}
RenderSky();
RenderGround();
glDisable(GL_FOG);
}
void CEnviroment::SetSkyDetail(int d)
{
ASSERT(d>4);
SkyDetail = d;
}
void CEnviroment::RenderSky()
{
glDisable(GL_LIGHTING);
glPushMatrix();
glTranslatef(0,1,0);
glScalef(80,120,80);
double angle = 0.0,inc_angle = 360.0/SkyDetail;
double tex = 0.0f,inc_tex = 3.0/SkyDetail;
glColor3f(1,1,1);
Sky.Apply();
int i = 0;
glBegin(GL_QUAD_STRIP);
{
for(;i