您的位置:首页 > 运维架构

OpenGL 实用程序框架设计实现-Windows上的小框架:

2016-01-25 19:29 477 查看
一:总体来说,一个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.csdn.net/my
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: