OpenGL 实用程序框架设计实现-Windows上的小框架
OpenGL 实用程序框架设计实现-Windows上的小框架:
二:OpenGL窗口管理
1:渲染前, 创建 OpenGL 窗口
2:渲染完毕
3:初始 OpenGL 状态设置,一个OpenGL在渲染之前要做哪些设置呢?
4:查找 OpenGL 可用的扩展
一个摄像机的核心函数是 gluLookAt, 此函数意义是把三维世界坐标系的坐标转换为相机坐标系的坐标。坐标系之间的转换其实就是矩阵运算。原理请参考图形学书籍。
一个相机有三个主要参数,他们分别是:
1):m_vecEyePos: 观察者位置(世界坐标)
2):m_vecLookAt: 观察方向(世界坐标)
3):m_vecUp: 正向向量(世界坐标),这个参数的含义就是标识,经过摄像机投影成像,在底片上是正立的还是倒立的。。懂没。。
4):摄像机类的作用就是生成视图矩阵,以便程序能得到视野内的三维物体, 后续做裁剪,投影运算。
四:数学运算(有源码):
1):向量运算:加法,减法,点乘,叉乘
2):矩阵运算:加法,减法,乘法,旋转矩阵,平移矩阵,投影矩阵
五:图片载入(有源码): TGA,BMP 文件解析
一:总体来说,一个OpenGL小框架, Demo级别的,包含下面几个部分:
1: OpenGL窗口管理
2:摄像机
3:数学函数4:图片载入
5:日志
二:OpenGL窗口管理
1:渲染前, 创建 OpenGL 窗口
1):首先创建一个Windows窗口,我叫DC,怎么创建不说,这是Windows窗口程序的事情,此处略。
2):其次OpenGL自身有个渲染上下文,叫RC,实际渲染时RC要依附于DC, DC和RC是一对多的关系,但同一时刻一个线程只能有一个被激活的RC,多线程渲染时注 意。
3): 有了RC和DC那么,就要给二者做关联,wgl和windows api 就派上用长了。
(1): 获取窗口DC, 用GetDC()
(2): 设置RC的像素格式,为创建RC做准备,用ChoosePixelFormat(), SetPixelFormat()。
(3): 创建RC,用wglCreateContext()
(4):为当前渲染线程分配RC,用wglMakeCurrent()
2:渲染完毕
1):渲染完毕时交换缓冲区,用SwapBuffers()
2):删除RC,wglDeleteContext
3:初始 OpenGL 状态设置,一个OpenGL在渲染之前要做哪些设置呢?
1):glShadeModel( GL_SMOOTH ),平滑着色,两个点之间的颜色过渡,开启这个效果好看。
2):glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ),用黑色清除窗口颜色缓冲区。窗口变成黑色啦,擦黑板。
3):glClearDepth( 1.0 );glDepthFunc( GL_LEQUAL );设置深度缓冲区及深度缓冲区像素覆盖规则。
4):glViewport( 0, 0, iWidth, iHeight ); 设置视口大小,原理参加OpenGL投影矩阵相关资料。
5):glMatrixMode( GL_PROJECTION );glLoadIdentity( );OpenGL投影矩阵设为单位矩阵。
6):gluPerspective( 45, iWidth/iHeight, 0.01f, 100.0f );设置透视投影矩阵
7):glMatrixMode( GL_MODELVIEW );glLoadIdentity( );设置模型视图单位矩阵,渲染后进行一些了的模型,视图变换。
4:查找 OpenGL 可用的扩展
1): glext定义OpenGL的所有扩展,从网上可以很容易下载到.三:摄像机
2): glGetString( GL_EXTENSIONS) 这个函数获取当前显卡所支持的所有OpenGL扩展3): wglGetProcAddress("glMultiTexCoord2dARB") 这个东东在Windows平台上获取扩展的实例
一个摄像机的核心函数是 gluLookAt, 此函数意义是把三维世界坐标系的坐标转换为相机坐标系的坐标。坐标系之间的转换其实就是矩阵运算。原理请参考图形学书籍。
一个相机有三个主要参数,他们分别是:
1):m_vecEyePos: 观察者位置(世界坐标)
2):m_vecLookAt: 观察方向(世界坐标)
3):m_vecUp: 正向向量(世界坐标),这个参数的含义就是标识,经过摄像机投影成像,在底片上是正立的还是倒立的。。懂没。。
4):摄像机类的作用就是生成视图矩阵,以便程序能得到视野内的三维物体, 后续做裁剪,投影运算。
四:数学运算(有源码):
1):向量运算:加法,减法,点乘,叉乘
2):矩阵运算:加法,减法,乘法,旋转矩阵,平移矩阵,投影矩阵
五:图片载入(有源码): TGA,BMP 文件解析
六:日志类(有源码):
框架代码已经上传到我的资源目录下:http://download.****.net/my