程序有关介绍请参考图书3.6.1节内容
程序运行结果如下图:
#include <iostream>
#include <fstream>
#include<vector>
#include <GL/glut.h>
using namespace std;
class MapPoint
{
public:
double longitude;
double latitude;
};
class Polygon
{
public:
vector<MapPoint> points; //多边形的顶点序列
};
vector<Polygon*> polys; //多边形集合
vector<Polygon*> ReadMapData(char* filename)
{
int PointCount;
vector<Polygon*> polygons;
ifstream fs(filename);
while(fs.eof()!=true)
{
Polygon* poly=new Polygon;
fs>>PointCount;
cout<<PointCount<<endl;
for(int i=0;i<PointCount;i++)
{
MapPoint p;
fs>>p.longitude>>p.latitude;
poly->points.push_back(p);
}
polygons.push_back(poly);
}
return polygons;
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
//用蓝色色绘制各省边界
glColor3f (0.0, 0.0, 1.0);
glPolygonMode(GL_BACK, GL_LINE);
for(int i=0;i<polys.size();i++)
{
vector<MapPoint> points=polys[i]->points;
glBegin(GL_LINE_STRIP);
for(int j=0;j<points.size();j++)
{
glVertex3f (points[j].longitude, points[j].latitude, 0.0);
}
glEnd();
}
glFlush();
}
void init (void)
{
//设置背景颜色
glClearColor (1.0, 1.0, 1.0, 0.0);
//初始化观察值
glMatrixMode(GL_PROJECTION); //将矩阵模式设为投影
glLoadIdentity(); //对矩阵进行单位化
glOrtho(110.0, 118.0, 30.0, 38.0, -1.0, 1.0); //构造平行投影矩阵
}
int main(int argc, char** argv)
{
//数据文件请到http://files.cnblogs.com/opengl/HenanCounty.rar下载放到D盘根目录下并解压
char* filename="D:/HenanCounty.txt";
polys=ReadMapData(filename);
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); //单缓存和RGB
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("地图绘制");
init ();
glutDisplayFunc(display); //显示回调函数
glutMainLoop();
return 0;
}