OpenGL中实现双缓冲技术
生活随笔
收集整理的這篇文章主要介紹了
OpenGL中实现双缓冲技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在OpenGL中實現雙緩沖技術的一種簡單方法:
1.在調用glutInitDisplayMode函數時, 開啟GLUT_DOUBLE,即glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);。這里將我們慣用的GLUT_SINGLE替換為GLUT_DOUBLE,意為要使用雙緩沖而非單緩沖。
2. 調用glutDisplayFunc(display)注冊回調函數時, 在回調函數中所有繪制操作完成后調用glutSwapBuffers()交換兩個緩沖區指針。
3. 調用glutIdleFunc注冊一個空閑時繪制操作函數, 注冊的這個函數再調用display函數。
#include <GL/glut.h>
#include <stdlib.h>
static GLfloat spin = 0;
void init(void)
{
glClearColor(0, 0, 0, 0); // 設置清除背景顏色
glShadeModel(GL_FLAT); //設置著色模式
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); // 用當前緩沖區清除值,
glPushMatrix(); //將當前矩陣壓入棧
glRotatef(spin, 0, 0, 1); //旋轉角度
glColor3f(1, 1, 0);
glRectf(-25, -25, 25, 25);
glPopMatrix();
glutSwapBuffers(); //交換雙緩沖區指針
}
void spinDisplay(void)
{
spin = (spin + 2.0) >= 360 ? spin-358 : spin + 2.0;
glutPostRedisplay();
}
void spinRightDisplay(void)
{
spin = (spin - 2.0) < 0 ? spin + 360 : spin -2.0;
glutPostRedisplay();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50, 50, -50, 50, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void mouse(int button, int state, int x, int y)
{
switch(button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
{
glutIdleFunc(spinDisplay);
}
break;
case GLUT_MIDDLE_BUTTON:
if (state == GLUT_DOWN)
{
glutIdleFunc(NULL);
}
break;
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
{
glutIdleFunc(spinRightDisplay);
}
default:
break;
}
}
int main(int argc ,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
總結
以上是生活随笔為你收集整理的OpenGL中实现双缓冲技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php实现随机获取人名
- 下一篇: keystore密钥文件使用的算法-PB