中国矿业大学地学可视化与景观模拟实验报告.docx
- 文档编号:18519311
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:43
- 大小:5.79MB
中国矿业大学地学可视化与景观模拟实验报告.docx
《中国矿业大学地学可视化与景观模拟实验报告.docx》由会员分享,可在线阅读,更多相关《中国矿业大学地学可视化与景观模拟实验报告.docx(43页珍藏版)》请在冰点文库上搜索。
中国矿业大学地学可视化与景观模拟实验报告
中国矿业大学
ChinaUniversityofMiningandTechnology
《地学可视化与景观模拟实验报告》
学号:
姓名:
指导老师:
余接情
班级:
测绘13-2班
中国矿业大学环境与测绘学院
实验一ArcGIS地形可视化
实验目的
了解地形可视化的基本方法,学会使用ArcGIS进行地形可视化增强。
实验内容
对给定的DEM分别做如下操作:
1)制作等高线
2)立体等高线
3)分成设色法显示地形
4)明暗等高线法显示地形
5)晕渲法显示地形
6)混合显示
实验要求
学号尾数为经度,班级为纬度每人下载一份DEM数据。
每人提交一份实验报告。
实验步骤及实验结果
1)DEM数据下载——strm.csi.cgiar.org在下载过程中输入网址会进入下载网页。
如下图所示:
下载第2行第24列。
2)用ArcGIS打开下载好的DEM如下图(由于原始的DEM比较大,所以我从原始数据中剪切一部分DEM作为本次实验数据)。
3)提取等高线;
4)制作立体等高线
5)分层设色法显示地形;
6)提取坡向;
7)提取背光面与受光面;
8)将受光与背光区域转为矢量;
9)将矢量受光与背光区域与等高线叠加;
10)明暗显示设置
11)明暗等高线结果图。
12)提取阴影。
13)设置透明度60%,结果如下。
实验结果
1、等高线+分层设色法
2、晕眩法+高度映射法
3、立体等高线+高度映射法+分层设色法
4、明暗等高线+高度映射法
实验体会
初步了解了Arcgis软件的使用,对简单的操作技能有所加深,同时深刻体会到arcgis软件的强大。
在实验过程中会遇到很多不懂得地方,一定要虚心请教老师和同学的帮助。
实验二OpenGL编程入门
实验目的
了解OpenGL程序基本结构,掌握基本图元的创建及颜色的定义方法。
实验内容
1)采用指定图元及颜色绘制下列物体。
2)图示如下:
实验要求
每人一份独立完成实验,每人提交一份实验报告(封面、实验目的、实验内容、实验步骤、实验结果、实验体会)。
实验过程和实验结果
新建项目与文件配置
#ifndefGLUT_DISABLE_ATEXIT_HACK
#defineGLUT_DISABLE_ATEXIT_HACK
#endif
#include
#include
#include
#include
#pragmacomment(lib,"glu32.lib")
#pragmacomment(lib,"glut32.lib")
#pragmacomment(lib,"glut32.lib")
voiddisplay(void);
voidinit(void);
intmain(intargc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(0,0);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return0;
}
voidinit(void)
{
glClearColor(0.0,0.0,0.0,0.0);//用当前颜色清屏幕
glMatrixMode(GL_PROJECTION);//设置矩阵的模式
glLoadIdentity();//将当前堆栈矩阵清零
glOrtho(0,1,0,1,-1,1);//设置平行投影矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();//将当前堆栈矩阵清零
}
voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存区
glColor3f(1.0,1.0,1.0);//定义颜色
glBegin(GL_POLYGON);//构造几何图元
glVertex3f(0.25,0.25,0);
glVertex3f(0.75,0.25,0);
glVertex3f(0.75,0.75,0);
glVertex3f(0.25,0.75,0);
glEnd();
glFlush();//强制刷新
}
#ifndefGLUT_DISABLE_ATEXIT_HACK
#defineGLUT_DISABLE_ATEXIT_HACK
#endif
#include
#include
#include
#include
#pragmacomment(lib,"glu32.lib")
#pragmacomment(lib,"glut32.lib")
#pragmacomment(lib,"opengl32.lib")
voiddisplay(void);
voidinit(void);
intmain(intargc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(0,0);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return0;
}
voidinit(void)
{
glClearColor(0.0,0.0,0.0,0.0);//用当前颜色清屏幕
glMatrixMode(GL_PROJECTION);//设置矩阵的模式
glLoadIdentity();//将当前堆栈矩阵清零
glOrtho(0,1,0,1,-1,1);//设置平行投影矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();//将当前堆栈矩阵清零
}
voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存区
glColor3f(1.0,0.0,0.0);//定义颜色
glBegin(GL_POLYGON);//构造几何图元
glVertex3f(0.25,0.25,0);
glVertex3f(0.75,0.25,0);
glVertex3f(0.75,0.75,0);
glVertex3f(0.25,0.75,0);
glEnd();
glFlush();//强制刷新
}
//openGL.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include
#include
voidbackground(void)
{
glClearColor(0.0,0.0,0.0,0.0);
}
voidmyDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
/**************图形1***********/
glBegin(GL_LINE_STRIP);
glVertex3f(-10,8,0);
glVertex3f(-1,8,0);
glVertex3f(-1,6,0);
glVertex3f(-4,6,0);
glVertex3f(-4,4,0);
glVertex3f(-7,4,0);
glVertex3f(-7,6,0);
glVertex3f(-10,6,0);
glVertex3f(-10,8,0);
glEnd();
/******图形2*************/
glBegin(GL_LINES);
glVertex3f(1,8,0);
glVertex3f(10,8,0);
glVertex3f(10,8,0);
glVertex3f(10,6,0);
glVertex3f(10,6,0);
glVertex3f(7,6,0);
glVertex3f(7,6,0);
glVertex3f(7,4,0);
glVertex3f(7,4,0);
glVertex3f(4,4,0);
glVertex3f(4,4,0);
glVertex3f(4,6,0);
glVertex3f(4,6,0);
glVertex3f(1,6,0);
glVertex3f(1,6,0);
glVertex3f(1,8,0);
glEnd();
/********图形3***********/
glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex3f(-10,2,0);
glVertex3f(-7,2,0);
glVertex3f(-7,0,0);
glVertex3f(-10,0,0);
glVertex3f(-7,0,0);
glVertex3f(-7,2,0);
glVertex3f(-4,2,0);
glVertex3f(-4,0,0);
glVertex3f(-7,0,0);
glVertex3f(-4,0,0);
glVertex3f(-4,-2,0);
glVertex3f(-7,-2,0);
glVertex3f(-4,0,0);
glVertex3f(-4,2,0);
glVertex3f(-1,2,0);
glVertex3f(-1,0,0);
glEnd();
/***********图形4**********/
glBegin(GL_POLYGON);
glColor3f(0,0,1);
glVertex3f(4,0,0);
glVertex3f(1,0,0);
glVertex3f(1,2,0);
glVertex3f(10,2,0);
glVertex3f(10,0,0);
glVertex3f(7,0,0);
glVertex3f(7,-2,0);
glVertex3f(4,-2,0);
glEnd();
/*********图形5**********/
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0,0,1);
glVertex3f(-4,-8,0);
glVertex3f(-4,-6,0);
glVertex3f(-7,-8,0);
glVertex3f(-7,-6,0);
glVertex3f(-5.5,-4,0);
glVertex3f(-1,-4,0);
glVertex3f(-1,-6,0);
glVertex3f(-5.5,-4,0);
glVertex3f(-7,-6,0);
glVertex3f(-10,-4,0);
glVertex3f(-10,-6,0);
glEnd();
/**********图形6*********/
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex3f(1,-6,0);
glVertex3f(4,-6,0);
glVertex3f(1,-4,0);
glColor3f(0,0,1);
glVertex3f(4,-6,0);
glVertex3f(1,-4,0);
glVertex3f(5.5,-4,0);
glColor3f(1,0,0);
glVertex3f(4,-6,0);
glVertex3f(5.5,-4,0);
glVertex3f(7,-6,0);
glColor3f(0,0,1);
glVertex3f(7,-6,0);
glVertex3f(5.5,-4,0);
glVertex3f(10,-4,0);
glColor3f(1,0,0);
glVertex3f(7,-6,0);
glVertex3f(10,-4,0);
glVertex3f(10,-6,0);
glColor3f(0,0,1);
glVertex3f(4,-6,0);
glVertex3f(7,-6,0);
glVertex3f(4,-8,0);
glColor3f(1,0,0);
glVertex3f(4,-8,0);
glVertex3f(7,-6,0);
glVertex3f(7,-8,0);
glEnd();
glFlush();
}
voidmyReshape(GLsizeiw,GLsizeih)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0.15,0.1,0.0);//平移
glScalef(0.1,0.1,0.0);//缩放
}
intmain(intargc,char*argv[])
{/*初始化*/
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);/*创建窗口¨²*/
glutCreateWindow("实验二");/*绘制与显示*/
background();
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
return0;
}
实验结果
实验体会
理解图元定义,并基于图元绘制各种复杂图形,理解各种图元定义函数并能灵活运用。
学习到了很多知识,非常不错的一次实验。
实验三/四/五利用OpenGL绘制三维地形
实验目的
利用OpenGL对给定的DEM数据进行三维可视化。
实验内容
分别做如下操作:
1)用ARCGIS将DEM.tif转换为ASCII格式
2)使用C语言将DEM数据读入
3)显示地形
4)使用投影变换、几何变换并设置各参数。
5)通过gluLookAt改变默认视点位置
6)增加光照效果,设置光源。
实验要求
每人提交一份实验报告(封面、实验目的、实验内容、实验步骤、实验结果、实验体会)。
实验步骤
Dem数据转换
编程将转换的数据载入
实验代码
#ifndefGLUT_DISABLE_ATEXIT_HACK
#defineGLUT_DISABLE_ATEXIT_HACK
#endif
#include"stdio.h"
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#pragmacomment(lib,"glu32.lib")
#pragmacomment(lib,"glut32.lib")
#pragmacomment(lib,"opengl32.lib")
voiddisplay(void);
voidinit(void);
voidreshape(intw,inth);
voidkeyboard(unsignedcharkey,intx,inty);
intdx=0,dy=0,bigger=0,smaller=0,MAX=0;
longncols;
longnrows;
long**data;//定义为全局变量,方便display调用
intmain(intargc,char*argv[])
{
ifstreamifile("abc.txt");//abc.txt为原始DEM数据经处理后得到的文本数据,可自己定义路径
stringtemp;
doublexllcorner,yllcorner,cellsize,NODATA_value;
ifile>>temp>>ncols;
ifile>>temp>>nrows;
ifile>>temp>>xllcorner;
ifile>>temp>>yllcorner;
ifile>>temp>>cellsize;
ifile>>temp>>NODATA_value;//读取头文件数据
data=(long**)malloc(ncols*sizeof(long*));
for(longj=0;j { data[j]=(long*)malloc(nrows*sizeof(long)); }//动态二维数组定义 for(longi=0;i { //printf("\n\n\n"); for(longj=0;j { ifile>>data[i][j]; //printf("%d",data[i][j]); } }//读取灰度值数据,初始化 ifile.end; glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(50,50); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop();return0; } voidinit(void) { glClearColor(0,0,0,0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,1,0,1,-1,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glShadeModel(GL_SMOOTH);//设置着色模式 glEnable(GL_DEPTH_TEST);//开启深度测试 glEnable(GL_LIGHTING);//开启光照 glEnable(GL_NORMALIZE);//开启法向量自动规范化 //创建一个白色光源 GLfloatlight_position[]={-1.0,-1.0,0.0,0.0}; GLfloatlight_ambient[]={1,1,1,1.0}; GLfloatlight_diffuse[]={1.0,1.0,1.0,1.0}; GLfloatlight_specular[]={1.0,1.0,1.0,1.0}; glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glEnable(GL_LIGHT0); //启用第0个光源 } voiddisplay(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //glColor3f(1,0,1); glPolygonMode(GL_FRONT_AND_BACK,GL_LINES); glPushMatrix(); glRotatef((GLfloat)dx,1.0,0.0,0.0); glRotatef((GLfloat)dy,0.0,1.0,0.0); glTranslatef(0,0,bigger); glTranslatef(0,0,smaller); glTranslatef(-nrows/2,ncols/2,-MAX/2); glPushMatrix(); GLfloatmat_ambient1[]={0.2,0.2,0.2,1.0}; GLfloatmat_diffuse1[]={0.8,0.8,0.8,1.0}; GLfloatmat_specular1[]={0.0,0.0,0,1.0}; glMaterialfv(GL_FRONT,G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 矿业大学 地学 可视化 景观 模拟 实验 报告