OpenGL之应用程序框架

我一直在试图寻找OpenGL应用程序的一般框架,有了这个模板,以后就可以像MFC中创建Dialog-based, SDI,MDI应用程序那样创建OpenGL应用程序。下面就是我在这方面总结的一些经验,我以OpenGL+glut为例:
整个应用程序最少应该包含下列函数:
  Init():OpenGL是个状态机(State Machine),在整个渲染过程中保持不变的状态应该在这里设置。如果需要的  话,这里还应该设置窗口系统。
  Rendering():渲染函数,这个函数理所当然的成为整个程序的核心.
  Reshape():调用窗口的大小。当窗口不是全屏状态时,改变窗口的大小应该调用这个函数。应该根据窗口的大小,调整视口和投影的相关参数。典型的Reshape()函数如下:
  void Reshape(int width, int height)
  {

    glViewport(0,0,width,height);
   
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.5f,150.0f);
   
glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
  }

在OpenGL的官方网站中的FAQ中,也提出了一个框架:
program_entrypoint
{
    // Determine which depth or pixel format should be used.
    // Create a window with the desired format.
    // Create a rendering context and make it current with the window.
    // Set up initial OpenGL state.
    // Set up callback routines for window resize and window refresh.

}

handle_resize
{
    glViewport(...);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //Set projection transform with glOrtho, glFrustum, gluOrtho2D, gluPerspective, etc.

}

handle_refresh
{
    glClear(...);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    // Set view transform with gluLookAt or equivalent
    // For each object (i) in the scene that needs to be rendered:
    // Push relevant stacks, e.g., glPushMatrix, glPushAttrib.
    // Set OpenGL state specific to object (i).
    // Set model transform for object (i) using glTranslatef, glScalef, glRotatef, and/or equivalent.
    // Issue rendering commands for object (i).
    // Pop relevant stacks, (e.g., glPopMatrix, glPopAttrib.)
    // End for loop.
    // Swap buffers.
}

可以看的出来,官方指定的这个框架和我分析的那个框架是差不多的:)


参考文献:
1.
http://www.opengl.org/resources/faq/technical/gettingstarted.htm#gett0008

-----------------------------致力于多媒体技术,成为有思想的软件工程师------------------------

此文章为我原创作品,若要转载,请和本人联系,或注明出处。
欢迎大家对文章内容提出宝贵意见,同时希望大家及时指出文中的错误之处,这样我可以及时更正。
我的联系方式:
QQ: 7578420
Email:
jerrydong@tom.com

----------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值