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

📄 terrain.h

📁 java实现的简单的分形树。简单易学!是学习分形知识的很好的例子。其java语法简单
💻 H
字号:
#ifndef __TERRAIN_H
#define __TERRAIN_H

#include <dingus/renderer/RenderableMesh.h>
#include <dingus/gfx/Vertices.h>
#include "Resources.h"


enum {
	CHUNK_SEGMENTS = 32,
	TERRAIN_SEGMENTS = 512,
	TERRAIN_VERTS = TERRAIN_SEGMENTS+1,
	TERRAIN_CHUNKS = TERRAIN_SEGMENTS / CHUNK_SEGMENTS,
	TOTAL_CHUNKS = TERRAIN_CHUNKS * TERRAIN_CHUNKS,
	LOD_COUNT = 6, // whatever 2^N is CHUNK_SEGMENTS, plus one
};

class CTerrain;


class CTerrainRenderable : public CRenderable {
public:
	CTerrainRenderable( CTerrain& terrain ) : mTerrain(&terrain), mLOD(0) { };
	void	setLOD( int lod ) { mLOD = lod; }

	virtual void render( const CRenderContext& ctx );
	virtual const CD3DVertexBuffer*	getUsedVB() const;
	virtual const CD3DIndexBuffer*	getUsedIB() const;

private:
	CTerrain*	mTerrain;
	int			mLOD;
};



class CTerrain {
public:
	typedef SVertexXyzDiffuse	TVertex;
public:
	CTerrain( const char* hmapTex, float height );
	~CTerrain();
	
	void render( int lod, eRenderMode renderMode );

	SVector3 getNormal( int y, int x ) const;

	CEffectParams& getParams( eRenderMode rm ) { return mTerrRenderable[rm]->getParams(); }

private:
	CTerrainRenderable*	mTerrRenderable[MAX_MODES-1]; // base, color, normal/z

public:
	float		mHeightMap[TERRAIN_VERTS][TERRAIN_VERTS];
	CAABox		mChunkAABBs[TERRAIN_CHUNKS][TERRAIN_CHUNKS];
	SVector3	mChunkCenters[TERRAIN_CHUNKS][TERRAIN_CHUNKS];
	int			mTrisPerStaticLOD[LOD_COUNT];
	int			mStartIndexForStaticLOD[LOD_COUNT];
};


#endif

⌨️ 快捷键说明

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