www.pudn.com > 林海血原源代码.zip > Plant.cpp


// Plant.cpp: implementation of the CPlant class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Texture.h" 
#include "Plant.h" 
#include "math.h" 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CPlant::CPlant() 
{ 
	m_szTree=0.2f; 
    m_height=m_szTree*60; 
 
	m_szBush=10; 
	m_szTreeB=10; 
	m_szGrass=6; 
	m_szVine=30; 
	m_szStone=5; 
} 
 
CPlant::~CPlant() 
{ 
/*	for(int i=0;i<4;i++) 
	{ 
		glDeleteTextures(1,&Trees[i]);	 
	} 
*/ 
} 
 
bool CPlant::LoadPlantPicture() 
{ 
	/* 
	 CTexture cTex; 
	 //////////////read blend skin texture 
	 int i=0; 
	 char filename[64]; 
	 char Alphaname[64]; 
	 for(i=0;i<2;i++) 
	 { 
		 wsprintf(filename,"Plants/treeBody%d.bmp",i+1); 
		 if(!cTex.MakeTextureBind(filename,&texTreeBody[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 } 
	 for(i=0;i<1;i++) 
	 { 
		 wsprintf(filename,"Plants/stone.bmp"); 
		 if(!cTex.MakeTextureBind(filename,&texStone[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 } 
	 for(i=0;i<4;i++) 
	 { 
		 wsprintf(filename,"Plants/grass%d.bmp",i+1); 
		 wsprintf(Alphaname,"Plants/grassAlpha%d.bmp",i+1); 
		 if(!cTex.MakeAlphaTextureBind(filename,Alphaname,&texGrass[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 } 
	 for(i=0;i<4;i++) 
	 { 
		 wsprintf(filename,"Plants/bush%d.bmp",i+1); 
		 wsprintf(Alphaname,"Plants/bushAlpha%d.bmp",i+1); 
		 if(!cTex.MakeAlphaTextureBind(filename,Alphaname,&texBush[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 } 
	 for(i=0;i<5;i++) 
	 { 
		 wsprintf(filename,"Plants/branch%d.bmp",i+1); 
		 wsprintf(Alphaname,"Plants/branchAlpha%d.bmp",i+1); 
		 if(!cTex.MakeAlphaTextureBind(filename,Alphaname,&texBranch[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 } 
	 for(i=0;i<2;i++) 
	 { 
		 wsprintf(filename,"Plants/vine%d.bmp",i+1); 
		 wsprintf(Alphaname,"Plants/vineAlpha%d.bmp",i+1); 
		 if(!cTex.MakeAlphaTextureBind(filename,Alphaname,&texVine[i])) 
		 { 
	    	MessageBox(NULL,"Read Skin error","ERROR",MB_OK|MB_ICONSTOP); 
	    	return false; 
		 }   
	 }*/ 
     return true; 
} 
bool CPlant::InitPlant() 
{ 
    if(!LoadPlantPicture())return false; 
    return true; 
} 
void CPlant::DrawTree() 
{ 
	 
    /////////////////////////////////// 
	//////////Draw Tree Body 
    glDisable(GL_ALPHA_TEST); 
	glDisable(GL_BLEND); 
 
 	glBindTexture(GL_TEXTURE_2D, texTreeBody[1]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUAD_STRIP); 
	    for(float i=0;i<8;i++) 
		{ 
	        glTexCoord2i(int(i+1)%2,0);     
			glVertex3f(-m_szTree*sinf(i*45*0.0174533f),0,-m_szTree*cosf(i*45*0.0174533f)); 
	        glTexCoord2i(int(i+1)%2,50);     
			glVertex3f(-m_szTree*sinf(i*45*0.0174533f)*0.1f,m_height,-m_szTree*cosf(i*45*0.0174533f)*0.1f); 
	  } 
	    glTexCoord2f(1,0);     
	    glVertex3f(0,0,-m_szTree); 
	    glTexCoord2f(1,50);     
		glVertex3f(0,m_height,-m_szTree*0.1f); 
    glEnd(); 
    glEnable(GL_ALPHA_TEST);	 
    glEnable(GL_BLEND); 
    ////////////////////////////////////////// 
	///////////////// Draw Branch //////////// 
 
 	glBindTexture(GL_TEXTURE_2D, texBranch[1]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for( i=0;i<8;i++) 
	{ 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTree*20*sinf(i*45*0.0174533f),m_height*0.4f,-m_szTree*20*cosf(i*45*0.0174533f)); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(0,m_height*0.4f,0); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(0,m_height*0.65f,0); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*20*sinf(i*45*0.0174533f),m_height*0.65f,-m_szTree*20*cosf(i*45*0.0174533f)); 
	} 
	glEnd(); 
 
 	glBindTexture(GL_TEXTURE_2D, texBranch[3]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for( i=0.2f;i<6.2f;i++) 
	{ 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTree*15*sinf(i*60*0.0174533f),m_height*0.6f,-m_szTree*15*cosf(i*60*0.0174533f)); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(0,m_height*0.6f,0); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(0,m_height*0.8f,0); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*15*sinf(i*60*0.0174533f),m_height*0.8f,-m_szTree*15*cosf(i*60*0.0174533f)); 
	} 
	glEnd(); 
 
 	glBindTexture(GL_TEXTURE_2D, texBranch[4]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for( i=0.2f;i<4.2f;i++) 
	{ 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTree*10*sinf(i*90*0.0174533f),m_height*0.75f,-m_szTree*10*cosf(i*90*0.0174533f)); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(0,m_height*0.75f,0); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(0,m_height*0.95f,0); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*10*sinf(i*90*0.0174533f),m_height*0.95f,-m_szTree*10*cosf(i*90*0.0174533f)); 
	} 
	glEnd(); 
 
   
} 
void CPlant::DrawTreeB() 
{ 
	 
    ////////////////////////////////////////// 
	///////////////// Draw Branch //////////// 
 
 	glBindTexture(GL_TEXTURE_2D, texBranch[2]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for(float i=0;i<3;i++) 
	{ 
 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTreeB*sinf(i*60*0.0174533f ),0,-m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(m_szTreeB*sinf(i*60*0.0174533f ),0,m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(m_szTreeB*sinf(i*60*0.0174533f ),m_szTreeB*(2+float(i)/6),m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*sinf(i*60*0.0174533f ),m_szTreeB*(2+float(i)/6),-m_szTree*cosf(i*60*0.0174533f )); 
	} 
	for( i=0.5f;i<3.5f;i++) 
	{ 
	    glTexCoord2f(1,0); 
	    glVertex3f(-m_szTreeB*sinf(i*60*0.0174533f ),0,-m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(0,0); 
	    glVertex3f(m_szTreeB*sinf(i*60*0.0174533f ),0,m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(m_szTreeB*sinf(i*60*0.0174533f ),m_szTreeB*(2+float(i)/6),m_szTreeB*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(-m_szTree*sinf(i*60*0.0174533f ),m_szTreeB*(2+float(i)/6),-m_szTree*cosf(i*60*0.0174533f )); 
	} 
	glEnd(); 
} 
 
void CPlant::DrawGrass() 
{ 
	/////////////Round type 
  	glBindTexture(GL_TEXTURE_2D, texGrass[2]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUAD_STRIP); 
	    for(float i=0;i<6;i++) 
		{ 
	        glTexCoord2i(int(i+1)%2,0);     
			glVertex3f(-m_szGrass*sinf(i*60*0.0174533f )*0.8f,0,-m_szGrass*cosf(i*60*0.0174533f )*0.8f); 
	        glTexCoord2i(int(i+1)%2,1);     
			glVertex3f(-m_szGrass*sinf(i*60*0.0174533f ),m_szGrass,-m_szGrass*cosf(i*60*0.0174533f )); 
	  } 
	    glTexCoord2f(1,0);     
	    glVertex3f(0,0,-m_szGrass*0.8f); 
	    glTexCoord2f(1,1);     
		glVertex3f(0,m_szGrass,-m_szGrass); 
 
	    glTexCoord2f(0,0);     
	    glVertex3f(0,0,m_szGrass*0.8f); 
	    glTexCoord2f(0,1);     
		glVertex3f(0,m_szGrass,m_szGrass); 
 
    glEnd(); 
 
 
} 
 
void CPlant::DrawVine() 
{ 
	/////////////vine type 
 
    glEnable(GL_ALPHA_TEST); 
 	glBindTexture(GL_TEXTURE_2D, texVine[0]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for(float i=0;i<8;i++) 
	{ 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTree*10*sinf(i*45*0.0174533f ),0,-m_szTree*10*cosf(i*45*0.0174533f )); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(0,0,0); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(0,m_szTree*10,0); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*10*sinf(i*45*0.0174533f ),m_szTree*10,-m_szTree*10*cosf(i*45*0.0174533f )); 
	} 
	glEnd(); 
 	glBindTexture(GL_TEXTURE_2D, texVine[1]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	for( i=0.5f;i<6.25f;i++) 
	{ 
	    glTexCoord2f(0,0); 
	    glVertex3f(-m_szTree*6*sinf(i*60*0.0174533f ),0,-m_szTree*6*cosf(i*60*0.0174533f )); 
 
	    glTexCoord2f(1,0); 
	    glVertex3f(0,0,0); 
 
	    glTexCoord2f(1,1); 
	    glVertex3f(0,m_szTree*6,0); 
 
	    glTexCoord2f(0,1); 
	    glVertex3f(-m_szTree*6*sinf(i*60*0.0174533f ),m_szTree*6,-m_szTree*6*cosf(i*60*0.0174533f )); 
	} 
	glEnd(); 
 
} 
void CPlant::DrawBushA() 
{ 
	/////////////bush type 
 
 	glBindTexture(GL_TEXTURE_2D, texBush[0]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	 
	for(float i=0;i<6;i++) 
	{ 
	    glTexCoord2f(0.02f,0.336f); 
	    glVertex3f(0,0,0);	    
		 
		glTexCoord2f(1,0.336f); 
	    glVertex3f(-m_szBush*sinf(i*60*0.0174533f ),0,-m_szBush*cosf(i*60*0.0174533f )); 
 
  	    glTexCoord2f(1,1); 
	    glVertex3f(-m_szBush*sinf(i*60*0.0174533f ),m_szBush*0.6f,-m_szBush*cosf(i*60*0.0174533f ));     
	 
		glTexCoord2f(0.02f,1); 
	    glVertex3f(0,m_szBush*0.6f,0); 
	} 
	/////1 
	 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.4f,0,-m_szBush*0.3f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.4f,0,-m_szBush*0.7f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.4f,-m_szBush*0.7f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(-m_szBush*0.4f,m_szBush*0.4f,-m_szBush*0.3f); 
    ////////2 
	 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.3f,0,m_szBush*0.1f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.7f,0,-m_szBush*0.8f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.7f,m_szBush*0.4f,-m_szBush*0.8f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(-m_szBush*0.3f,m_szBush*0.4f,m_szBush*0.1f); 
    /////////3 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.3f,0,m_szBush*0.8f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.7f,0,-m_szBush*0.1f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.7f,m_szBush*0.4f,-m_szBush*0.1f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(-m_szBush*0.3f,m_szBush*0.4f,m_szBush*0.8f); 
    ////////4 
	 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.3f,0,m_szBush*0.4f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.5f,0,m_szBush*0.9f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.5f,m_szBush*0.4f,m_szBush*0.9f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.3f,m_szBush*0.4f,m_szBush*0.4f); 
    ///////5 
     glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.3f,0,m_szBush*0.8f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.7f,0,m_szBush*0.1f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.7f,m_szBush*0.4f,m_szBush*0.1f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.3f,m_szBush*0.4f,m_szBush*0.8f); 
    ///////6 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.2f,0,-m_szBush*0.6f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.8f,0,-m_szBush*0.1f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.8f,m_szBush*0.4f,-m_szBush*0.1f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.2f,m_szBush*0.4f,-m_szBush*0.6f); 
	 
	glEnd(); 
 
 	glBindTexture(GL_TEXTURE_2D, texGrass[3]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	 
	for( i=0.5;i<6.5;i++) 
	{ 
	    glTexCoord2f(0.02f,0.336f); 
	    glVertex3f(0,m_szBush*0.3f,0);	    
		 
		glTexCoord2f(1,0.336f); 
	    glVertex3f(-m_szBush*0.9f*sinf(i*60*0.0174533f ),m_szBush*0.3f,-m_szBush*0.9f*cosf(i*60*0.0174533f )); 
 
  	    glTexCoord2f(1,1); 
	    glVertex3f(-m_szBush*0.9f*sinf(i*60*0.0174533f ),m_szBush*0.8f,-m_szBush*0.9f*cosf(i*60*0.0174533f ));     
	 
		glTexCoord2f(0.02f,1); 
	    glVertex3f(0,m_szBush*0.8f,0); 
	} 
	///////1 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.4f,-0,-m_szBush*0.4f); 
    glTexCoord2f(1,0); 
    glVertex3f(-m_szBush*0.4f,0,-m_szBush*0.6f); 
    glTexCoord2f(1,1); 
    glVertex3f(-m_szBush*0.4f,m_szBush*0.4f,-m_szBush*0.6f); 
    glTexCoord2f(0,1); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.4f,-m_szBush*0.4f); 
    ////////2 
	 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.3f,0,-m_szBush*0.5f); 
    glTexCoord2f(1,0); 
    glVertex3f(-m_szBush*0.7f,0,m_szBush*0.1f); 
    glTexCoord2f(1,1); 
    glVertex3f(-m_szBush*0.7f,m_szBush*0.4f,m_szBush*0.1f); 
    glTexCoord2f(0,1); 
    glVertex3f(-m_szBush*0.3f,m_szBush*0.4f,-m_szBush*0.5f); 
	 
    /////////3 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.6f,0,m_szBush*0.1f); 
    glTexCoord2f(1,0); 
    glVertex3f(m_szBush*0.1f,0,m_szBush*0.8f); 
    glTexCoord2f(1,1); 
    glVertex3f(m_szBush*0.1f,m_szBush*0.4f,m_szBush*0.8f); 
    glTexCoord2f(0,1); 
    glVertex3f(-m_szBush*0.6f,m_szBush*0.4f,m_szBush*0.1f); 
    ////////4 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.3f,0,m_szBush*0.5f); 
    glTexCoord2f(1,0); 
    glVertex3f(m_szBush*0.4f,0,m_szBush*0.8f); 
    glTexCoord2f(1,1); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.4f,m_szBush*0.8f); 
    glTexCoord2f(0,1); 
    glVertex3f(-m_szBush*0.3f,m_szBush*0.4f,m_szBush*0.5f); 
    ///////5 
     glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.4f,0,m_szBush*0.7f); 
    glTexCoord2f(1,0); 
    glVertex3f(m_szBush*0.6f,0,-m_szBush*0.3f); 
    glTexCoord2f(1,1); 
    glVertex3f(m_szBush*0.6f,m_szBush*0.5f,-m_szBush*0.3f); 
    glTexCoord2f(0,1); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.5f,m_szBush*0.7f); 
    ///////6 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.6f,0,m_szBush*0.1f); 
    glTexCoord2f(1,0); 
    glVertex3f(m_szBush*0.4f,0,-m_szBush*0.75f); 
    glTexCoord2f(1,1); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.4f,-m_szBush*0.75f); 
    glTexCoord2f(0,1); 
    glVertex3f(m_szBush*0.6f,m_szBush*0.4f,m_szBush*0.1f); 
 
    glEnd(); 
 
} 
void CPlant::DrawBushB() 
{ 
	/////////////bush type 
 
 	glBindTexture(GL_TEXTURE_2D, texBush[2]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_QUADS); 
	 
	for(float i=0;i<6;i++) 
	{ 
	    glTexCoord2f(0.02f,0.336f); 
	    glVertex3f(0,0,0);	    
		 
		glTexCoord2f(1,0.336f); 
	    glVertex3f(-m_szBush*0.9f*sinf(i*60*0.0174533f ),0,-m_szBush*0.9f*cosf(i*60*0.0174533f )); 
 
  	    glTexCoord2f(1,1); 
	    glVertex3f(-m_szBush*0.9f*sinf(i*60*0.0174533f ),m_szBush*0.5f,-m_szBush*0.9f*cosf(i*60*0.0174533f ));     
	 
		glTexCoord2f(0.02f,1); 
	    glVertex3f(0,m_szBush*0.5f,0); 
	} 
	/////1 
	 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.1f,0,0); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.2f,0,-m_szBush*0.6f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.2f,m_szBush*0.4f,-m_szBush*0.6f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(-m_szBush*0.1f,m_szBush*0.4f,0); 
    ////////2 
	 
    glTexCoord2f(0,0); 
    glVertex3f(-m_szBush*0.3f,0,0); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.8f,0,-m_szBush*0.4f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.8f,m_szBush*0.2f,-m_szBush*0.4f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(-m_szBush*0.3f,m_szBush*0.2f,0); 
    /////////3 
    glTexCoord2f(0,0); 
    glVertex3f(0,0,m_szBush*0.3f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.8f,0,m_szBush*0.1f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.8f,m_szBush*0.6f,m_szBush*0.1f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(0,m_szBush*0.4f,m_szBush*0.6f); 
    ////////4 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.4f,0,m_szBush*0.1f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(-m_szBush*0.5f,0,m_szBush*0.6f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(-m_szBush*0.5f,m_szBush*0.3f,m_szBush*0.6f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.4f,m_szBush*0.3f,m_szBush*0.1f); 
    ///////5 
     glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.1f,0,-m_szBush*0.1f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.5f,0,m_szBush*0.6f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.5f,m_szBush*0.45f,m_szBush*0.6f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.1f,m_szBush*0.45f,-m_szBush*0.1f); 
    ///////6 
    glTexCoord2f(0,0); 
    glVertex3f(m_szBush*0.3f,0,m_szBush*0.1f); 
    glTexCoord2f(0.664f,0); 
    glVertex3f(m_szBush*0.6f,0,-m_szBush*0.7f); 
    glTexCoord2f(0.664f,0.336f); 
    glVertex3f(m_szBush*0.6f,m_szBush*0.2f,-m_szBush*0.7f); 
    glTexCoord2f(0,0.336f); 
    glVertex3f(m_szBush*0.3f,m_szBush*0.2f,m_szBush*0.1f); 
	 
	glEnd(); 
 
} 
void CPlant::DrawStone() 
{ 
 
    glDisable(GL_ALPHA_TEST); 
    glDisable(GL_BLEND); 
 	glBindTexture(GL_TEXTURE_2D, texStone[0]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_TRIANGLE_FAN); 
        glTexCoord2f(0,0); 
        glVertex3f(0,m_szStone,0); 
 
        glTexCoord2f(1,0); 
        glVertex3f(0,0,-m_szStone); 
        glTexCoord2f(1,1); 
        glVertex3f(-m_szStone*1.2f,0,-m_szStone*0.5f); 
        glTexCoord2f(0,1); 
        glVertex3f(0,0,m_szStone); 
        glTexCoord2f(1,0); 
        glVertex3f(m_szStone*0.4f,0,-m_szStone*0.2f); 
        glTexCoord2f(1,1); 
        glVertex3f(0,0,-m_szStone); 
	glEnd(); 
 
	glEnable(GL_BLEND); 
    glEnable(GL_ALPHA_TEST); 
	glTranslatef(m_szStone*0.4f,0,0); 
 	glBindTexture(GL_TEXTURE_2D, texGrass[1]); 
	glEnable(GL_TEXTURE_2D); 
	glBegin(GL_TRIANGLE_STRIP); 
        glTexCoord2f(0,0); 
        glVertex3f(0,0,0); 
        glTexCoord2f(0,1); 
        glVertex3f(0,m_szStone*2,0); 
 
        glTexCoord2f(0.594f,0); 
        glVertex3f(m_szStone*0.4f,0,0); 
        glTexCoord2f(0.594f,1); 
        glVertex3f(m_szStone*0.4f,m_szStone*2,0); 
 
        glTexCoord2f(0.762f,0); 
        glVertex3f(m_szStone*0.25f,0,m_szStone*0.25f); 
        glTexCoord2f(0.762f,1); 
        glVertex3f(m_szStone*0.25f,m_szStone*2,m_szStone*0.25f); 
 
        glTexCoord2f(1,0); 
        glVertex3f(0,0,0); 
        glTexCoord2f(1,1); 
        glVertex3f(0,m_szStone*2,0); 
	glEnd(); 
 
} 
void CPlant::DrawPlant(int PlantID,float XPosition, 
					   float YPosition,float ZPosition,int distance) 
{ 
	m_xpos=XPosition; 
	m_ypos=YPosition; 
	m_zpos=ZPosition; 
 
	glAlphaFunc(GL_GREATER,0.15f); 
	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
//	if(distance>10)	glDisable(GL_BLEND); 
//	else   
	glEnable(GL_BLEND); 
    glEnable(GL_ALPHA_TEST); 
    glDisable(GL_CULL_FACE); 
    glDisable(GL_LIGHTING); 
    glDisable(GL_LIGHT0); 
    glPushMatrix();	 
	glTranslatef(m_xpos,m_ypos,m_zpos); 
 
    if(PlantID==1)DrawStone(); 
    if(PlantID==2)DrawGrass(); 
	if(PlantID==3)DrawTreeB();//DrawBushA(); 
	if(PlantID==4)DrawTreeB();//DrawBushB(); 
	if(PlantID==5)DrawVine(); 
	if(PlantID==6)DrawTreeB(); 
	glPopMatrix(); 
    glDisable(GL_ALPHA_TEST); 
	glDisable(GL_BLEND); 
    glEnable(GL_CULL_FACE); 
	glEnable(GL_LIGHTING); 
	glEnable(GL_LIGHT0); 
}