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
----------------------------------------------------------------------------------------
- OpenGL之应用程序框架
- OpenGL的单文档应用程序框架
- OpenGL源代码之基本框架
- VC之OpenGL编程框架
- OpenGL系列教程之十二:OpenGL Windows图形界面应用程序
- OpenGL系列教程之十二:OpenGL Windows图形界面应用程序
- 应用程序框架设计之前言
- 应用程序框架设计之前言
- 应用程序框架设计之前言
- 应用程序框架设计之前言
- OpenGL---GLUT教程(九) GLUT鼠标/OpenGL(Win32 窗体应用程序框架)
- OpenGL框架
- 应用程序框架设计之前言 (转)
- VC编程基础之应用程序框架
- SDK编程之理解Window应用程序框架
- PHP codeigniter 框架编程学习之【应用程序】
- [框架之谈]极佳的 JS 移动应用程序开发框架
- 简单的 OpenGL 应用程序
- 制作透明窗体/始终位于最上层的窗体
- gif的动画图片,可否实现文字水印和图片水印的效果呢?
- 回到原来 - 林忆莲
- 猜一猜: Console.WriteLine(5000.88 + 5000 == 10000.88); 结果为True还是False?
- 一位人事经理对中国职业人的批判
- OpenGL之应用程序框架
- 把需要报表的数据送往EXCEL通用报表组件
- Linux下将Tomcat配置成为系统服务
- Oracle维护常用SQL语句
- Grady Booch 先生简介
- James Rumbaugh 先生简介
- Ivar Jacobson 先生简介
- OracleDBA新手经常碰到的10个Oracle错误
- Oracle 快速删除数据字典管理的表空间