📄 heightmap.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 + -