⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heightmap.h

📁 3D游戏展示程序
💻 H
字号:
//--------------------------------------------------
//  Desc: 高度图
//  Date: 2006.12.27 /update
//  Author: artsylee
//
//  Copyright (C) 2006 artsylee
//
//--------------------------------------------------

#ifndef _HEIGHTMAP_
#define _HEIGHTMAP_

#include <d3dx9.h>
#include "Frustum.h"
#include "StdHeader.h"

#define HEIGHT_MAP_SCALE	10
#define WORLD_TO_HEIGHT		0.1f	// 1/10
#define WORLD_TO_MOVE		0.025f	// 1/10/4
#define HEIGHT_TO_MOVE		0.25f	// 1/4

class CHeightmap
{
public:
	CHeightmap();
	~CHeightmap();
	void	Release(void);

	bool	LoadHeightmap(char* szFilename, int iSize);
	bool	SaveHeightmap(char* szFilename);
	bool	UnLoadHeightmap(void);
	void	UpdateHeightmap(void);

	void	Render(void);

	float   GetHeight(D3DXVECTOR3 *checked);
	float   GetHeight(float Worldxpos, float Worldzpos);
	int		GetHeightIndex(int movemapX, int movemapZ);
	int		GetHeightIndexOffset(int index, char offsetZ, char offsetX);

	POINT	ConvertToHeightmap(D3DXVECTOR3 *pos);
	POINT   ConvertToMovemap(D3DXVECTOR3 pos);
	D3DXVECTOR3  ConvertToWorld(int movemapXPos, int movemapZPos);

	bool    IsInFrustum(D3DXVECTOR3 *checked);
	bool    IsInFrustum(float x, float z);
	bool    IsInFrustum(Boundary_3D *pBoundary);

	void	SetHeight(unsigned char height, int x, int y)
	{
		m_HeightData.m_pData[y*m_Size+x] = height;
	}
	unsigned char GetHeight(int x, int y)	{ return m_HeightData.m_pData[y*m_Size+x];	}
	void	SetViewPosition(D3DXVECTOR3 viewpos);
	void	SetViewRotateY(float angle);
	float	GetYPosition(void);

	void	SetViewDistance(int distance);

private:
	void	ComputeDiffuse(D3DXVECTOR3* directionToLight);
	void	CreateVertex(void);
	bool	FillVertexBuffer(void);

private:
public:
	// 高度数据
	Height_Data		m_HeightData;
	int				m_Size;
	
	// 移动图剔除
	Move_Vertex*	m_pMovemap;
	CFrustum		m_Frustum;

	// 光照
	DWORD*			m_pLightColor;
	HeightmapVertex* m_pVertex;

	// 观察者
	D3DXVECTOR3     m_ViewPos;
	int             m_ViewOffsetX;
	int             m_ViewOffsetZ;
	float           m_ViewRotX;
	float           m_ViewRotY;
	bool			m_bViewerChange;
	// 没用到
	IDirect3DVertexBuffer9* m_Vb;
	IDirect3DIndexBuffer9*  m_Ib;
};

#endif // _HEIGHTMAP_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -