《地形模型的三维可视化》程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《地形模型的三维可视化》程序设计

一、题目

请用OpenGL图形库,编制程序实现地形模型的三维可视化,并进行地形模型的纹理设置,并可以通过键盘进行交互操作(移动和旋转)。

(注:给定的地形模型数据是已经建好的不规则三角网。)

二、提交资料

1.程序的详细步骤和所有相关数据;

步骤:①录入三角形数据

②获得地形的范围

③绘制三角网

④设置纹理坐标

⑤计算参考点的位置

⑥移动

相关数据文件:数据文件DHS.dat

三角网文件DHS.tri

图片文件TERRAIN.BMP

2. 程序清单(包括程序说明);

#include "stdafx.h"

#include

#include

#include

#include

#include

#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;

}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;

//垂直方向视点和所要看实体的间的距离

//视点的位置

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);

//控制纹理,映射到片元(fragment)时怎样对待纹理。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

相关文档
最新文档