初识OpenGL

来源:互联网 发布:linux管道符号怎么打 编辑:程序博客网 时间:2024/06/04 19:58

之前介绍过OpenGL在VS2010上的安装,相信这个不难,不过需要记得每次在建立OpenGL工程的时候需要加载相关的lib库文件,如opengl32.lib;glu32.lib;glut32.lib

这次看看OpenGL在画二维图形的时候的基本构成。


#include <windows.h>#include <gl/glut.h>#include <cstdlib>#include <iostream>#pragma comment(lib, "glut32.lib")void Display();void Load();void init();struct vertex //x,y,z points{float x;float y;float z;};struct tri   //Endpoint definition{struct vertex a;struct vertex b;};struct model  //Global structure{struct tri* tris;  //Lineint tris_num;  //Number of input vertex};model test;int main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  //Single cache and RGBA modelglutInitWindowPosition(200, 100);glutInitWindowSize(500, 500);glutCreateWindow("demo");  // name of windowinit();Load();glutDisplayFunc(Display);  //RegisterglutMainLoop(); // Enter main loop to dealif (test.tris)free(test.tris);return 0;}  //end mainvoid Load()   // Read the data of Coord{if (test.tris)free(test.tris);FILE* file = fopen("coord.txt", "r");int i = 0;if (!file)return;fscanf(file, "%d", &test.tris_num);test.tris = (tri*)malloc(sizeof(struct tri) * test.tris_num);while (i < test.tris_num){fscanf(file, "%f%f%f", &test.tris[i].a.x, &test.tris[i].a.y, &test.tris[i].a.z);fscanf(file, "%f%f%f", &test.tris[i].b.x, &test.tris[i].b.y, &test.tris[i].b.z);++i;}fclose(file);} //end Loadvoid Display()  //OpenGL display{int i = 0;glClear(GL_COLOR_BUFFER_BIT); //Clear all pixels//glMatrixMode(GL_PROJECTION);//gluPerspective(45.f, 1.f, 0.f, 100.f);//glMatrixMode(GL_MODELVIEW);//gluLookAt(0.f, 0.f, 5.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f);glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES);   //Draw line beginningwhile (i < test.tris_num){glVertex3f(test.tris[i].a.x, test.tris[i].a.y, test.tris[i].a.z);glVertex3f(test.tris[i].b.x, test.tris[i].b.y, test.tris[i].b.z);++i; }glEnd();  //Draw line endglFlush();}// end Displayvoid init()  //OpenGL init{glClearColor(0.0, 0.0, 0.0, 0.0) ; //Clear color specified/*   Init view frustum      */glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0) ;} // end init

我自定义了三个函数Dispaly(), Load(), init(),分别用来显示图形,加载数据,初始化界面的。


Display函数里面主要实现渲染场景的操作;

Load函数是用来从外界读取数据以实现画图;

init函数里面主要实现背景颜色和坐标系统的操作。


另外,各个函数里面的函数调用都已经做了注释,应该很容易看明白,已经在VS2010中调试成功。




原创粉丝点击