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

一:总体来说,一个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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值