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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

glut实现动画

發(fā)布時間:2025/4/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 glut实现动画 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

glut的回調(diào)函數(shù),實現(xiàn)動畫??


//下面是控制臺程序
//創(chuàng)建一個空的控制臺程序,在菜單的項目\屬性\鏈接\輸入\附加依賴項,添加glut32.lib
//在解決方案源文件中新建main.cpp,將下面的代碼復(fù)制粘貼到main.cpp中
#include <iostream>
#include <cmath>
#include <GL/glut.h>

using namespace std;

static void?
key(unsigned char key, int x, int y)
{
?switch (key)?
?{
?case 27 : //按ESC
?case 'q': //按q鍵程序都會退出
??exit(0);
??break;
?}

?glutPostRedisplay();? //產(chǎn)生重繪回調(diào)
}

static void?display(void)
{???
?static long counter = 0;

?//動畫實現(xiàn)是用雙緩存,現(xiàn)在用背景色擦除后緩存
?glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

?cout<<counter<<": clear color buffer"<<endl;

?//設(shè)置MODELVIEW矩陣,先設(shè)為單位陣,再乘上觀察矩陣,即從z軸正向100處向 (0,0,0)
?//看,上方向(0,1,0)
?glLoadIdentity();
?gluLookAt(0,0,100,0,0,0,0,1,0);

?//在后緩存繪制圖形,就一個點
?glPointSize(2.0f);//缺省是1
?glBegin(GL_POINTS);
?glColor3f(1,1,1);
?glVertex3f(0,0,0);
?glEnd();

?cout<<counter<<": draw point"<<endl;

?counter++;

?//然后前后緩存交換?
?glutSwapBuffers();

?//可以在控制臺窗口看到dispaly被連續(xù)的調(diào)用,一直在不斷的在后緩存擦了畫,然后交換前后緩存
?//由于每次點的位置大小和顏色沒變,看起來點是靜止的
}

static void?idle(void)
{

?glutPostRedisplay(); //空閑時強制重繪,這樣不斷的調(diào)用display

}

static void?resize(int width, int height)
{

?const float ar = (float) width / (float) height;

?glViewport(0, 0, width, height);

?glMatrixMode(GL_PROJECTION);

?glLoadIdentity();

?double ratio = 0.1;

?//glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);

?glOrtho(-width*0.5*ratio, width*0.5*ratio, -height*0.5*ratio, height*0.5*ratio, 2.0, 100.0); //這里使用正視投影

?glMatrixMode(GL_MODELVIEW);

?glLoadIdentity() ;

}

int main(int argc, char** argv)
{
?glutInit(&argc, argv);
?glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
?glutInitWindowSize (800, 600);?
?glutInitWindowPosition (60, 60);
?glutCreateWindow ("draw a point");

?glClearColor(0.2,0.2,0.4,1); //openscenegraph背景的藍色
?glShadeModel (GL_FLAT);

?glutKeyboardFunc(key);?????? //鍵盤按下去時
?
glutIdleFunc(idle);????????? //空閑時
?glutReshapeFunc(resize);???? //改變窗口大小時
?glutDisplayFunc(display);??? //繪制窗口顯示時

?glutMainLoop();
?return 0;?
}

轉(zhuǎn)載于:https://www.cnblogs.com/Vulkan/archive/2012/07/23/7530285.html

總結(jié)

以上是生活随笔為你收集整理的glut实现动画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。