日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

OpenGL中实现双缓冲技术

發布時間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 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中实现双缓冲技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。