OpenGL之应用程序框架

来源:互联网 发布:js inner换行符 编辑:程序博客网 时间:2024/04/29 18:39

我一直在试图寻找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

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