www.pudn.com > 地表贴图.zip > GLBase.cpp


// GLBase.cpp : 实现文件 
// 
 
#include "stdafx.h" 
#include "GeoDraw.h" 
#include "GLBase.h" 
 
 
// CGLBase 
 
CGLBase::CGLBase() 
{ 
	m_bShading=true;	 
 
} 
 
CGLBase::~CGLBase() 
{ 
 
} 
 
// CGLBase 消息处理程序 
 
void CGLBase::GLSetupRC() 
{ 
	m_bShading = TRUE; 
 
	 
	GLfloat lightAmbient[] = {0.75f,0.75f,0.75f,1.0f}; 
	GLfloat lightDiffuse[] = {1.0f,1.0f,1.0f,1.0f}; 
	GLfloat lightSpecular[] ={1.0f,1.0f,1.0f,1.0f}; 
    GLfloat lightPosition[] ={0.0f,0.0f,0.0f,0.0f}; 
 
 
	glEnable(GL_DEPTH_TEST);		 
	//glEnable(GL_CULL_FACE);			 
	glFrontFace(GL_CCW); 
 
	glEnable(GL_LIGHTING);			 
 
	glLightfv(GL_LIGHT0,GL_AMBIENT,lightAmbient); 
	glLightfv(GL_LIGHT0,GL_DIFFUSE,lightDiffuse); 
	glLightfv(GL_LIGHT0,GL_SPECULAR,lightSpecular); 
    glLightfv(GL_LIGHT0,GL_POSITION,lightPosition); 
 
 
	SetLightDirection(1,1,1); 
	glEnable(GL_LIGHT0); 
 
	 
	SetBkColor(RGB(225,225,225));				 
	SetMaterialColor(RGB(225,175,25));	 
	SetColor(RGB(225,175,25));		 
	  //Point Size 
	glPointSize(3.0); 
	////////////////// 
    glShadeModel(GL_SMOOTH); 
} 
 
//////////////////LIGHT && MATERIALS SETTING////////// 
void CGLBase::ClearBkground() 
{ 
	GLclampf r,g,b; 
	r = (GLclampf)GetRValue(m_clrBk)/255.0; 
	g = (GLclampf)GetGValue(m_clrBk)/255.0; 
	b = (GLclampf)GetBValue(m_clrBk)/255.0; 
 
	glClearColor(r,g,b,0.0f);	 
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 
 
	glLoadIdentity(); 
	glRotatef(-90,0,1,0); 
} 
 
//setting model 
void CGLBase::OnShading() 
{ 
	if(m_bShading){ 
		glEnable( GL_LIGHTING ); 
	    glEnable(GL_LIGHT0); 
		glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); 
	} 
	else{ 
		glDisable( GL_LIGHTING ); 
		glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 
	} 
} 
 
void CGLBase::Shading(BOOL bShading) 
{ 
	m_bShading = bShading; 
} 
 
BOOL CGLBase::IsShading() 
{ 
	return m_bShading; 
} 
 
void CGLBase::Lighting(BOOL bLighting) 
{ 
	if(bLighting) 
		glEnable( GL_LIGHTING ); 
	else 
		glDisable( GL_LIGHTING ); 
} 
 
BOOL CGLBase::IsLighting() 
{ 
	GLboolean bLighting; 
	glGetBooleanv(GL_LIGHTING,&bLighting);    
	return bLighting; 
} 
 
void CGLBase::SetLightDirection(float dx,float dy,float dz) 
{ 
	m_vecLight[0] = dx; 
	m_vecLight[1] = dy; 
	m_vecLight[2] = dz; 
	GLfloat lightPos[] = { dx, dy, dz, 0.0f }; 
	glLightfv(GL_LIGHT0,GL_POSITION,lightPos); 
} 
 
void CGLBase::GetLightDirection(float& dx,float& dy,float& dz) 
{ 
	dx = m_vecLight[0]; 
	dy = m_vecLight[1]; 
	dz = m_vecLight[2]; 
} 
 
//rendering color 
void CGLBase::SetMaterialColor(COLORREF clr) 
{ 
	m_clrMaterial = clr; 
	BYTE r,g,b; 
	r = GetRValue(clr); 
	g = GetGValue(clr); 
	b = GetBValue(clr); 
	GLfloat mat_amb_diff[] = {(GLfloat)r/255,(GLfloat)g/255,(GLfloat)b/255,1.0}; 
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff); 
} 
 
void CGLBase::GetMaterialColor(COLORREF& clr) 
{ 
	clr = m_clrMaterial; 
} 
 
void CGLBase::SetBkColor(COLORREF clr) 
{ 
	m_clrBk = clr; 
} 
 
void CGLBase::GetBkColor(COLORREF& clr) 
{ 
	clr = m_clrBk; 
} 
 
void CGLBase::SetColor(COLORREF clr) 
{ 
	m_clr = clr; 
	BYTE r,g,b; 
	r = GetRValue(clr); 
	g = GetGValue(clr); 
	b = GetBValue(clr); 
	glColor3ub(r,g,b); 
} 
 
void CGLBase::GetColor(COLORREF& clr) 
{ 
	clr =  m_clr; 
}