www.pudn.com > 林海血原源代码.zip > HeightmapScene.cpp
// HeightmapScene.cpp: implementation of the CHeightmapScene class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "HeightmapScene.h" #include "Text.h" #include#include "texture.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CHeightmapScene::CHeightmapScene() { m_pInput=NULL; /////only quote, need't release memory m_gamma=0.2f; m_brightness=0; } CHeightmapScene::~CHeightmapScene() { } bool CHeightmapScene::InitHeightmapScene(INPUT *pInput) { m_pInput=pInput; //指向3dExplorer.cpp中的全局变量Input if(!m_cText.InitRasterText()) { MessageBox(0, "cText error", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_cSkyBox.InitSkyBox(10000,7000,10000,0,-1200,0)) { MessageBox(0, "cSkyBox error", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_3dExplorer.Init3dExplorer(VERTEX(700,200,1340),300,true))//450,200,66),157, { MessageBox(0, "read heightmap failed", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_cTerrain.InitTerrain()) { MessageBox(0, "Init Terrain failed heightmapscene.cpp", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_cLensFlare.InitLensFlare()) { MessageBox(0, "Init LensFlare failed", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_cSprites.InitSpriteManager()) { MessageBox(0, "Init Terrain failed", "Error", MB_OK | MB_ICONERROR); return FALSE; } if(!m_cHouse.InitHouse(VERTEX(820,m_cHmap.GetHeight(820,1250)-1 ,1250))) { MessageBox(0, "Init house failed", "Error", MB_OK | MB_ICONERROR); return FALSE; } return true; } void CHeightmapScene::RenderHeightmapScene() { glColor3f(1,1,1); m_3dExplorer.ProcessInput(m_pInput); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); m_3dExplorer.TransformWorld(0); m_cSkyBox.DrawSkyBox(); m_3dExplorer.TransformWorld(1); m_3dExplorer.Update3dEAmmo(); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GLfloat light0_position[]={1.0f,0.5f,-0.8f,0.0f}; glLightfv(GL_LIGHT0,GL_POSITION,light0_position); glEnable(GL_FOG); //画地形 m_cTerrain.UpdateTerrainmap(); ///////////////now render scene m_cTerrain.RendTerrain(); ////////////////////////// m_cTerrain.RestoreDrawMap(); glDisable(GL_FOG); ///////////////////house m_cHouse.DrawHouse(); ////////////////////////////////// glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); m_cSprites.UpdateSpriteManager(); m_cLensFlare.UpdateLensFlare(); m_3dExplorer.m_cAmmoManager.DrawAmmoManager(); m_3dExplorer.m_cAmmoManager.UpdateAmmoManager(); ////////////////////////////////////////// glColor3f(1,1,1); glLoadIdentity(); // 显示文字信息 char infoStr[64]; m_cText.ShowInformation(); sprintf(infoStr,"%.2f %d %d %d %d %d",m_gamma,m_cTerrain.GetNumTriangles() , int(m_3dExplorer.m_RotY) , int(m_3dExplorer.m_eyePos.xpos), int(m_3dExplorer.m_eyePos.ypos), int(m_3dExplorer.m_eyePos.zpos)); glRasterPos3f(0.1f,0.6f,-1.2f); m_cText.PrintString(infoStr); /* ///////////// 伪Gamma调节 if(m_pInput->keys['A'])m_gamma+=0.01f; if(m_pInput->keys['S'])m_gamma-=0.01f; if(m_pInput->keys['Q'])return; if(m_gamma<0)m_gamma=0; if(m_gamma>1)m_gamma=1; glColor3f(m_gamma,m_gamma,m_gamma); glDisable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_COLOR,GL_ONE); glEnable(GL_BLEND); float size=1.45f; glBegin(GL_QUADS); glVertex3f(-size,-size, -1.1f); glVertex3f( size,-size, -1.1f); glVertex3f( size, size, -1.1f); glVertex3f(-size, size, -1.1f); glEnd(); /////////////////////// if(m_brightness<1) { glBlendFunc(GL_ZERO,GL_SRC_COLOR); glColor3f(m_brightness,m_brightness,m_brightness); glBegin(GL_QUADS); glVertex3f(-size,-size, -1.05f); glVertex3f( size,-size, -1.05f); glVertex3f( size, size, -1.05f); glVertex3f(-size, size, -1.05f); glEnd(); m_brightness+=0.04f; } glDisable(GL_BLEND); */ }