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;
}