基于OpenGL的随机图动画演示框架与代码

基于Opengl的实时动画,为可视化科学计算过程提供了有利的工具。

然而,对于初学者来说,相关知识的学习仍需经历一个过程。

将Opengl的初始化等进行适当封装,建立了Opengl的动画框架,用户可以直接应用C语言的知识或Matlab知识,定义框架中相应的函数,即可实现实时动画程序开发,为科学计算和可视化计算提供了便利。

下面给出了Ubuntu14.04下,基于OpenGL的点线随机图动画框架。

通过分析该程序,,用户可以方便地定制程序,以达到用户算法的期望。

代码如下:

//第三方库: sudo apt-get install freeglut3-dev//其中,用到了glut.h文件//编译命令:g++ test.cpp -lglut -lGL -lGLU#include <iostream>#include <stdlib.h>#include <time.h>#include <vector>#include <math.h> #include <GL/glut.h>using namespace std;#define Width 600#define Height 600typedef struct Point {GLfloat x, y;Point() : x(0), y(0) {};Point(GLfloat x, GLfloat y) : x(x), y(y) {}} Point;typedef struct Line {Point lbegin, lend;Line(Point& pa, Point& pb) {lbegin.x = pa.x;lbegin.y = pa.y;lend.x = pb.x;lend.y = pb.y;}} Line;typedef vector<Point> Points;typedef vector<Line> Lines;Points points;//Lines lines;//用户自定义初始化函数—用于初始化点的坐标void myinit() {srand(time(NULL));//随机产生50个点的坐标points.resize(50);for(int i = 1; i < 50; i++) {points[i].x = (rand() * 1.0 / RAND_MAX) * Width – Width / 2;points[i].y = (rand() * 1.0 / RAND_MAX) * Height – Height/2;}}//用户自定义屏幕绘制和计算函数void myDraw() {GLfloat x = rand() * 1.0 / RAND_MAX * 30, y = rand() * 1.0 / RAND_MAX * 30;//绘制点的集合glColor3f(0.0, 1.0, 0);glPointSize(5.0);glBegin(GL_POINTS); for(int i = 0; i < points.size(); i++)glVertex3f(points[i].x, points[i].y, 0);glEnd();//绘制随机线—模拟可能的计算过程glColor3f(0.0, 0.0, 1.0);glBegin(GL_LINES); for(int i = 0; i < points.size(); i++) {int id1 = (rand() % 1024) / 1024.0 * points.size();int id2 = (rand() % 1024) / 1024.0 * points.size();glVertex3f(points[id1].x, points[id1].y, 0);glVertex3f(points[id2].x, points[id2].y, 0);}glEnd();}//==========以下代码无需变动======================void display(void){//清除屏幕内容glClear(GL_COLOR_BUFFER_BIT);myDraw();//刷新结果glFlush() ;glutSwapBuffers();}void idleDisplay(void){glutPostRedisplay();}void initOpenGL(void) {glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_FLAT);}void reshapeWindow(int w, int h){glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();//设置xmin-xmax, ymin-ymax, zmin-zmaxglOrtho(-w/2, w/2, -h/2, h/2, -1.0, 1.0); //-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}int main(int argc, char** argv){myinit();//调用用户初始化数据函数glutInit(&argc, argv);glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize (Width, Height); glutInitWindowPosition (0, 0);glutCreateWindow (argv[0]);initOpenGL();//设置显示函数glutDisplayFunc(display);//设置窗口大小调整时的函数glutReshapeFunc(reshapeWindow);//闲暇时的后台处理程序—可用于修改数据glutIdleFunc(idleDisplay);//主循环glutMainLoop();return 0; }

效果图如下:

后来逐渐有广州花城的,

基于OpenGL的随机图动画演示框架与代码

相关文章:

你感兴趣的文章:

标签云: