之前介绍过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; //Line
int 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 model
glutInitWindowPosition(200, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("demo"); // name of window
init();
Load();
glutDisplayFunc(Display); //Register
glutMainLoop(); // Enter main loop to deal
if (test.tris)
free(test.tris);
return 0;
} //end main
void 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 Load
void 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 beginning
while (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 end
glFlush();
}// end Display
void 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中调试成功。