《地形模型的三维可视化》程序设计(共11页).doc
《《地形模型的三维可视化》程序设计(共11页).doc》由会员分享,可在线阅读,更多相关《《地形模型的三维可视化》程序设计(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上地形模型的三维可视化程序设计一、题目请用OpenGL图形库,编制程序实现地形模型的三维可视化,并进行地形模型的纹理设置,并可以通过键盘进行交互操作(移动和旋转)。 (注:给定的地形模型数据是已经建好的不规则三角网。)二、提交资料 1程序的详细步骤和所有相关数据;步骤:录入三角形数据获得地形的范围绘制三角网设置纹理坐标计算参考点的位置移动相关数据文件:数据文件DHS.dat三角网文件DHS.tri图片文件 TERRAIN.BMP2. 程序清单(包括程序说明);#include stdafx.h#include #include #include #include #in
2、clude #include void CALLBACK elbowAdd (void);void CALLBACK elbowSubtract (void);void CALLBACK shoulderAdd (void);void CALLBACK shoulderSubtract (void);/点结构定义typedef struct long id; double x; double y; double z;POINTXYZ;/三角形结构定义typedef structlong id;/三角形号long p3;/三角形三个顶点的序号long xl3;/拓扑关系TRIANGLE;/顶点变
3、量POINTXYZ *pPt;/三角形变量TRIANGLE *pTri;/顶点总数int iTotalNum;/三角形总数int iTotalTriNum;/外围结构typedef struct vrtagBOXdouble minx;double miny;double minz;double maxx;double maxy;double maxz;vrBOX;/外围结构vrBOX _box;unsigned int m_nID;/存储纹理的索引号int m_nWidth;/纹理图片的宽度int m_nHeight;/纹理图片的高度float (*_ptexture)2;/存储三角网的纹理
4、数据/视点参考点的偏移量double lookx, looky, lookz;/移动的速度float _speed;/垂直方向视点和所要看实体的间的距离float _height;/视点的位置double _eyeposition3;/参考点的位置double _referencepoint3;/鼠标位移与象素之比的分母,即象素数int _Pixels;/设置纹理坐标void SetTextureCoord();/读取纹理数据bool LoadTriangleBMP( LPSTR szFileNameD);/向前移动void Move(bool is_forward);/获得鼠标在x,y方向的
5、相对位移量bool Rotate(int dx, int dy);/计算视点与参考点的位置void _CalcuEyePositionAndReferencePoint(int type,float amount);void myinit(void);/读取点坐标、三角形数据void ReadData();void Render();/获得外围void SetBOX();void CALLBACK myReshape(GLsizei w, GLsizei h);void CALLBACK display(void);/读取纹理数据bool LoadTriangleBMP(char* szFil
6、eName)AUX_RGBImageRec *pBitmap = NULL;if(!szFileName) return false;/装载数据并存储pBitmap = auxDIBImageLoad(szFileName);if(pBitmap = NULL) return false;glGenTextures(1, &m_nID);/ 绑定纹理到纹理数组,并进行初始化。glBindTexture(GL_TEXTURE_2D, m_nID);/控制纹理,映射到片元(fragment)时怎样对待纹理。glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP
7、_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);/定义二维纹理glTexImage2D(GL_TEXTURE_2D, 0, 3, pBitmap-sizeX, pBitmap-sizeY, 0, GL_RGB, GL_UNSIGNED_
8、BYTE, pBitmap-data);m_nWidth = pBitmap-sizeX;m_nHeight = pBitmap-sizeY;if (pBitmap)delete pBitmap;return true;int main(int argc, char* argv)/* 设置双缓存和RGBA颜色模式*/ auxInitDisplayMode (AUX_DOUBLE|AUX_RGBA); auxInitPosition (0, 0, 1600, 800); auxInitWindow (作业); myinit(); auxReshapeFunc (myReshape); auxKe
9、yFunc (AUX_LEFT, shoulderSubtract); auxKeyFunc (AUX_RIGHT, shoulderAdd); auxKeyFunc (AUX_UP, elbowAdd); auxKeyFunc (AUX_DOWN, elbowSubtract); auxMainLoop(display);return 0;void CALLBACK elbowAdd (void) Move(true);void CALLBACK elbowSubtract (void) Move(false);void CALLBACK shoulderAdd (void)Rotate(5
10、0,0);void CALLBACK shoulderSubtract (void)Rotate(-50,0);/读取点坐标、三角形数据void ReadData()ifstream ifile(f:qqDHS.dat);ifile iTotalNum;pPt =new POINTXYZiTotalNum;/循环读入定顶点坐标数据;for (int i=0;ipPti.id pPti.x pPti.y pPti.z;ifile.close();ifstream ifile2(f:qqDHS.tri);ifile2 iTotalTriNum;pTri =new TRIANGLEiTotalTri
11、Num;/循环读入定顶点坐标数据;for ( i=0;ipTrii.id pTrii.p0 pTrii.p1 pTrii.p2;ifile2.close();SetBOX();/功 能:获得地形的范围void SetBOX()_box.minx = ;_box.miny = ;_box.minz = ;_box.maxx = -;_box.maxy = -;_box.maxz = -;/对所有的顶点循环for (int i = 0; i pPti.x) _box.minx = pPti.x;if(_box.miny pPti.y) _box.miny = pPti.y;if(_box.minz
12、 pPti.z) _box.minz = pPti.z;if(_box.maxx pPti.x) _box.maxx = pPti.x;if(_box.maxy pPti.y) _box.maxy = pPti.y;if(_box.maxz pPti.z) _box.maxz = pPti.z;void myinit(void)/读取点坐标、三角形数据 ReadData();char *_bmpfilename; /纹理图片的文件名_bmpfilename=f:qqTERRAIN.BMP; /terrain.bmp; /suban_1.bmp;/读取纹理数据LoadTriangleBMP(_b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地形模型的三维可视化 地形 模型 三维 可视化 程序设计 11
限制150内