基于高程图技术和OpenGL技术的三维地形绘制系统

目 录

第一章 设计背景 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_)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/newlw/article/details/131080285