- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 1
《地形模型的三维可视化》程序设计
一、题目
请用OpenGL图形库,编制程序实现地形模型的三维可视化,并进行地形模型的纹理设置,并可以通过键盘进行交互操作(移动和旋转)。
(注:给定的地形模型数据是已经建好的不规则三角网。)
二、提交资料
1.程序的详细步骤和所有相关数据;
步骤:①录入三角形数据
②获得地形的范围
③绘制三角网
④设置纹理坐标
⑤计算参考点的位置
⑥移动
相关数据文件:数据文件DHS.dat
三角网文件DHS.tri
图片文件 TERRAIN.BMP
2. 程序清单(包括程序说明);
#include stdafx.h
#include windows.h
#include GL/gl.h
#include GL/glu.h
#include GL/glaux.h
#include fstream.h
#include math.h
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 struct
{
long id; //三角形号
long p[3]; //三角形三个顶点的序号
long xl[3]; //拓扑关系
}TRIANGLE;
//顶点变量
POINTXYZ *pPt;
//三角形变量
TRIANGLE *pTri;
//顶点总数
int iTotalNum;
//三角形总数
int iTotalTriNum;
//外围结构
typedef struct vrtagBOX
{
double 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]; //存储三角网的纹理数据
//视点参考点的偏移量
double lookx, looky, lookz;
//移动的速度
float _speed;
//垂直方向视点和所要看实体的间的距离
float _height;
//视点的位置
double _eyeposition[3];
//参考点的位置
double _referencepoint[3];
//鼠标位移与象素之比的分母,即象素数
int _Pixels;
//设置纹理坐标
void SetTextureCoord();
//读取纹理数据
bool LoadTriangleBMP( LPSTR szFileNameD);
//向前移动
void Move(bool is_forward);
//获得鼠标在x,y方向的相对位移量
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* szFileName)
{
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);
//控制纹理,映射到片元(f
文档评论(0)