glutSwapBuffers函数用法
来源:互联网 发布:凯立德端口查看 编辑:程序博客网 时间:2024/04/28 02:20
文章来源:http://baike.baidu.com/link?url=F-0esBBzkOr-JXsCG8pqUCD84ZQHWzCMbSHPTYsdtHkvZuUVGIoKmZJk6Hf9dGIwCoxqMb-5NciZ5qILzHKr2a
计算机学
1函数简介编辑
glutSwapBuffers函数是OpenGL中GLUT工具包中用于实现双缓冲技术的一个重要函数。该函数的功能是交换两个缓冲区指针。
通常, 我们所看到的窗体、文字、图像,从根本上来说都是“画”出来的。比如,制作一个简单的五子棋, 我们可能先要绘制棋盘,然后绘制棋子,我们可能还要绘制一些提示信息。虽然这些绘制操作有一定的先后顺序,通常情况下,操作系统的这些绘制速度非常的快,使人眼误认为这些绘制操作是同时完成的。
但当我们进行复杂的绘图操作时,画面便可能有明显的闪烁。解决这个问题的关键在于使绘制的东西同时出现在屏幕上。所谓双缓冲技术, 是指使用两个缓冲区: 前台缓冲和后台缓冲。前台缓冲即我们看到的屏幕,后台缓冲则在内存当中,对我们来说是不可见的。每次的所有绘图操作都在后台缓冲中进行, 当绘制完成时, 把绘制的最终结果复制到屏幕上, 这样, 我们看到所有GDI元素同时出现在屏幕上,从而解决了频繁刷新导致的画面闪烁问题。
在OpenGL中实现双缓冲技术的一种简单方法:
1.在调用glutInitDisplayMode函数时, 开启GLUT_DOUBLE,即glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);。这里将我们惯用的GLUT_SINGLE替换为GLUT_DOUBLE,意为要使用双缓冲而非单缓冲。
2. 调用glutDisplayFunc(display)注册回调函数时, 在回调函数中所有绘制操作完成后调用glutSwapBuffers()交换两个缓冲区指针。
3. 调用glutIdleFunc注册一个空闲时绘制操作函数, 注册的这个函数再调用display函数。
2程序示例编辑
#include <windows.h>
#include <GL/glut.h>
int day = 200; // 0~360
void display(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 1, 400);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -200, 200, 0, 0, 0, 0, 0, 1);
glColor3f(1.0f, 0.0f, 0.0f);
glutWireSphere(35, 30, 30);
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day / 360.0 * 360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(120, 0.0f, 0.0f);
glutWireSphere(15, 25, 25);
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(day / 30.0 * 360.0 - day / 360.0 * 360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(32, 0.0f, 0.0f);
glutWireSphere(10, 10, 10);
glFlush();
glutSwapBuffers();
}
void idle(void)
{
++day;
if( day >= 360 ) {
day = 0;
}
display();
Sleep(20);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 500);
glutCreateWindow("12");
glutDisplayFunc(display);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
词条标签:
0 0
- glutSwapBuffers函数用法
- OpenGL函数思考-glFlush和glutSwapBuffers
- OpenGL函数思考-glFlush和glutSwapBuffers
- glutSwapBuffers和glutPostRedisplay
- glFlush和glutSwapBuffers,导致帧率很低
- glFlush()和glFinish()glutSwapBuffers()区别
- 函数用法
- 函数用法
- 函数用法
- 函数用法
- 函数用法 --- memset函数
- libcurl用法 接口函数用法
- python函数函数指针用法
- numpy函数:tile函数用法
- numpy函数:tile函数用法
- scan函数函数用法详解
- Setparent函数用法技巧
- decode 函数的用法
- oracle数据库中,数据表无法执行数据操作语句,提示记录已被锁住
- 为什么不要用 StringBuffer 和 Vector
- 状态机的实现
- java 的运行机制之classload
- Regex expressions in Java \\s vs.\\s+
- glutSwapBuffers函数用法
- 开始
- onNewIntent
- string和stringstream用法总结
- 黑马程序员——java-网络编程
- eclipse基础知识
- Linux下安装Flash插件
- hdu 2089 不要62(数位dp)
- Poj 3352 Road Construction & Poj 3177 Redundant Paths(边双连通分量+缩点)