/// 创建随机地形
void Terrain::BulidRandomTerrain(float height, UINT seed)
{
srand(seed); // 随机数发生器
struct Quad // 定义待处理的正方形结构
{
UINT index; // 左上角顶点索引
UINT length; // 边长
Quad(UINT i, UINT len) {
index = i;
length = len;
}
};
float aspect = height / (float)mSize;
std::queue<Quad> qQuad; // 待处理正方形队列
Quad quad(0, mSize - 1);
qQuad.push(quad);
while (!qQuad.empty())
{
Quad currQuad = qQuad.front();
qQuad.pop();
float maxH = currQuad.length * aspect; // 当前点最大高度
// 正方形阶段
int a = currQuad.index; // 左上角
int b = a + currQuad.length; // 右上角
int c = a + currQuad.length * mSize; // 左下角
int d = c + currQuad.length; // 右下角
int m = a + mSize * currQuad.length / 2 + currQuad.length / 2; // 中心
Vertices[m].Pos.y = (Vertices[a].Pos.y + Vertices[b].Pos.y +
Vertices[c].Pos.y + Vertices[d].Pos.y) / 4.0 + MathHelper::RandF(
随机分形地形生成算法-D3D12实现
最新推荐文章于 2020-11-24 03:06:36 发布