|
OpenGL应用程序框架的建立
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // GLu32库的头文件
#include <gl\glaux.h> // GLaux库的头文件
初始化OpenGL
SetOpenGLInterface()
PIXELFORMATDESCRIPTOR pfd = {
// 初始化象素存储格式
sizeof(PIXELFORMATDESCRIPTOR), // pfd的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持窗口
PFD_SUPPORT_OPENGL | // 支持OpenGL
PFD_DOUBLEBUFFER, // 支持双缓存
PFD_TYPE_RGBA, // RGBA类型
24, // 24位色深度
0, 0, 0, 0, 0, 0, // 各颜色位(忽略)
0, // 无alpha缓存
0, // 忽略转换位
0, // 无累计位
0, 0, 0, 0,
32, // 32位深度缓存
0, // 无模版缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘制层
0, // 保留
0, 0, 0 // 忽略的层掩模
};
m_pDC = GetDC(); // 得到设备环境句柄
int iFormat = ChoosePixelFormat(m_pDC->m_hDC, &pfd); // 设置象素格式
SetPixelFormat(m_pDC->m_hDC, iFormat, &pfd);
m_hGlrc = wglCreateContext(m_pDC->m_hDC); // 创建渲染上下文
wglMakeCurrent(m_pDC->m_hDC, m_hGlrc); // 设置一个线程的当前绘图描述表
DEM数据结构的定义
ReleaseDC(m_pDC); // 释放DC
if (m_hGlrc != NULL) // 释放RC
wglDeleteContext(m_hGlrc);
设置一下场景
InitOpenGL()
GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0}; // 定义光源的位置坐标
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; // 定义环境反射光
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; // 定义漫反射光
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; // 定义镜面反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
GLfloat light_model_ambient[] = {0.4f, 0.4f, 0.4f, 1.0f}; // 定义光模型参数
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_model_ambient);
GLfloat local_view[] = {0.0};
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
glEnable(GL_LIGHTING); // GL_LIGHTING有效
glEnable(GL_LIGHT0); // GL_LIGHT0有效
glEnable(GL_DEPTH_TEST); // 允许深度比较
glDepthFunc(GL_LESS); // 激活深度比较
glClearColor(0.1f, 0.1f, 0.5f, 0.0f); // 设置蓝色背景
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); // 权衡图像质量与绘制速度
进行视口的定义
InitViewPort()
CRect rect; // 得到绘图客户区的大小
GetClientRect(rect);
glMatrixMode(GL_PROJECTION); // 设置投影模式
glLoadIdentity(); // 装载单位矩阵
if (m_nViewMode == 0) // 建立一个透视投影矩阵
gluPerspective(90.0, rect.Width() / rect.Height(), 1.0, 10000.0);
if (m_nViewMode == 1) // 建立一个正射投影矩阵
glOrtho(-0.5 * 10000.0, 0.5 * 10000.0, -0.5 * 10000.0, 0.5 * 10000.0, 1.0, 10000.0); glViewport(0, 0, rect.Width(), rect.Height()); // 重定视口
glMatrixMode(GL_MODELVIEW); // 确定当前矩阵模式
glLoadIdentity(); // 装载单位矩阵
这是再网上找的代码,我不太懂,希望懂得大侠帮忙调试一下。 |
|