目 录
第一章 设计背景 1
1.1 计算机仿真 1
1.2 OpenGL绘图技术介绍 1
1.3 开发平台 2
1.4 相关设计与算法…3
1.5 课题目标 6
第二章 基于高程图技术的地形绘制 7
2.1 LOD技术原理 7
2.2 地形模型构造 9
2.3 视场裁剪 11
2.4 算法实现 13
第三章 程序实现与实验测试 15
3.1 总体架构 15
3.2 程序流程图 15
3.3 实验数据与成果展示…17
参考文献 19
附录… 20
外文资料
中文译文
致谢
第三章程序实现与实验测试
3.1 总体架构
程序的总体架构是很重要的,总体架构包含题目分析、算法选择、流程设计、程序实现四个部分。
他们之间的先后顺序如图3-1:
图3-1 总体结构示意图
拿到课题之后,题目分析的任务主要是弄清楚要做什么,大致通过什么方案解决问题,大致达到什么样的效果。在这一阶段,通过阅读大量相关文献,大致有了关于实现高程图的背景知识,心中有了候选解决方案。比如,采用LOD技术便是解决方案的一部分。
接下来便是算法选择,在本课题中,采用了四叉树数据结构和基于此数据结构上的算法。
流程设计的主要是任务是想清楚,设计怎样的流程,使得顺利绘制出地形,同时又可以在界面上通过按键控制等交互方式来生成新的地形。当然,也有许多问题要考虑,比如漫游如何解决,内存如何分配和释放,如何进行纹理贴图和裂缝消除等等。
最后,基于VC6.0平台,我们用MFC开发出高程图地形绘制的界面程序
3.2 程序流程图
每个程序都有自己的流程,流程直接决定算法的实现,流程的设计结构也直接影响程序的执行效率。一个程序的流程设计是最能直接表观一个程序设计过程的地方,也是最能展示算法核心思想的环节。在算法想清楚之后,在程序开始设计之前,很大的时间实际上被用来考虑流程怎么实现。
// BMPLoad.h: interface for the CBMPLoad class.
//
//
#if !defined(AFX_BMPLOAD_H__A7A2B09D_8283_4DA1_8A5C_C023D4DDB6D0__INCLUDED_)
#define AFX_BMPLOAD_H__A7A2B09D_8283_4DA1_8A5C_C023D4DDB6D0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define INDEX_TEXTURE_NAME(x, z) ((x) + ((z)*8))
#ifndef PI
#define PI 3.1415926535
#endif PI
#ifndef f4
#define f4(a, b, c, d) ((a) + (b) + (c) + (d)) / 4
#endif
#define IX(x, z) (((x)&255) + (((z)&255) << 8)) // 将2D坐标转换为1D坐标
#define M_SIZE 256
typedef unsigned char BYTE;
typedef short int SHORT;
typedef long int LONG;
typedef unsigned short int WORD;
typedef unsigned long int DWORD;
typedef struct TEXTURE{
int w, h;
unsigned char *data;
} TEXTURE;
typedef struct _Win3xBitmapHeader
{
WORD ImageFileType;
DWORD FileSize;
WORD Reserved1;
WORD Reserved2;
DWORD ImageDataOffset;
} WIN3XHEAD;
typedef struct _Win3xBitmapInfoHeader
{
DWORD HeaderSize;
LONG ImageWidth;
LONG ImageHeight;
WORD NumberOfImagePlanes;
WORD BitsPerPixel;
DWORD CompressionMethod;
DWORD SizeOfBitmap;
LONG HorzResolution;
LONG VertResolution;
DWORD NumColorsUsed;
DWORD NumSignificantColors;
} WIN3XINFOHEAD;
typedef struct _Win3xPixelData
{
BYTE r;
BYTE g;
BYTE b;
} PAL;
class CBMPLoad
{
public:
CBMPLoad();
virtual ~CBMPLoad();
TEXTURE *load_bitmap(char *);
void destroy_bmp(TEXTURE *);
void texture_terrain(TEXTURE *t, int *hf);
int IX_MAP(int x, int z);
float texture_factor(int h1, int h2);
int limit255(int a);
TEXTURE *new_bitmap(int x, int y);
void SET_COLOR(TEXTURE *tex, int x, int y, BYTE r, BYTE g, BYTE b);
void GET_COLOR(TEXTURE *tex, int x, int y, BYTE *r, BYTE *g, BYTE *b);
};
#endif // !defined(AFX_BMPLOAD_H__A7A2B09D_8283_4DA1_8A5C_C023D4DDB6D0__INCLUDED_)