- Introduced a new biome system with various biome types and properties. - Implemented terrain generation using Perlin noise to create diverse landscapes. - Added examples for basic tilemap generation and biome analysis. - Created helper functions for displaying tiles and biomes in the console. - Enhanced the TileMap class to support chunk-based tile management. - Developed a PerlinNoise class for generating smooth noise patterns. - Updated generation configuration to include climate parameters for biomes. - Implemented error handling for out-of-bounds access in TileMap. Signed-off-by: szdytom <szdytom@qq.com>
4.4 KiB
4.4 KiB
生物群系系统使用指南
概述
新的生物群系系统基于温度和湿度参数来决定地形生成,提供了更加真实和多样化的地图生成体验。
核心特性
1. 生物群系类型
系统支持9种不同的生物群系,基于温度(冷/温带/热)和湿度(干燥/适中/潮湿)的组合:
温度\湿度 | 干燥 | 适中 | 潮湿 |
---|---|---|---|
冷 | 苔原(Tundra) | 针叶林(Taiga) | 寒带雨林(ColdRainforest) |
温带 | 草原(Grassland) | 落叶林(DeciduousForest) | 温带雨林(TemperateRainforest) |
热 | 沙漠(Desert) | 热带草原(Savanna) | 热带雨林(TropicalRainforest) |
2. 子区块系统
- 每个64×64的区块被划分为4×4个子区块
- 每个子区块大小为16×16瓦片
- 每个子区块具有一致的生物群系
- 生物群系基于子区块中心位置的气候值确定
3. 地形生成参数
每个生物群系都有独特的地形生成参数:
- 水域阈值: 决定水体分布
- 沙地阈值: 决定沙地区域
- 森林阈值: 决定树木覆盖
- 山地阈值: 决定山脉分布
- 噪声参数: 控制地形的细节程度
使用方法
基本使用
#include "generation.h"
#include "tilemap.h"
// 创建地图
istd::TileMap tilemap(10);
// 配置生成参数
istd::GenerationConfig config;
config.seed = 12345;
config.temperature_scale = 0.005; // 温度变化尺度
config.humidity_scale = 0.007; // 湿度变化尺度
// 生成地图
istd::map_generate(tilemap, config);
使用TerrainGenerator类
// 创建生成器实例
istd::TerrainGenerator generator(config);
// 生成地图
generator.generate_map(tilemap);
// 生物群系数据会在生成完成后自动清理
获取生物群系信息
// 获取特定位置的气候值
double global_x = chunk_x * 64 + sub_x * 16 + 8;
double global_y = chunk_y * 64 + sub_y * 16 + 8;
// 使用噪声获取气候
istd::PerlinNoise temp_noise(seed + 1000);
istd::PerlinNoise humidity_noise(seed + 2000);
double temperature = temp_noise.octave_noise(
global_x * temperature_scale, global_y * temperature_scale, 3, 0.5);
double humidity = humidity_noise.octave_noise(
global_x * humidity_scale, global_y * humidity_scale, 3, 0.5);
// 确定生物群系
istd::BiomeType biome = istd::determine_biome(temperature, humidity);
// 获取生物群系属性
const istd::BiomeProperties& props = istd::get_biome_properties(biome);
坐标系统
SubChunkPos结构
istd::SubChunkPos sub_pos(2, 1); // 子区块(2,1)
坐标转换
// 瓦片坐标转子区块坐标
istd::SubChunkPos sub_pos = istd::tile_to_subchunk(local_x, local_y);
// 子区块坐标转瓦片起始坐标
auto [start_x, start_y] = istd::subchunk_to_tile_start(sub_pos);
配置参数详解
GenerationConfig参数
- seed: 随机种子,控制整体地图布局
- temperature_scale: 温度噪声的缩放因子
- 较小值 (0.001-0.005): 大规模气候区域
- 较大值 (0.01-0.02): 小规模气候变化
- humidity_scale: 湿度噪声的缩放因子
- 建议比temperature_scale稍大,产生不同的气候模式
生物群系属性示例
// 沙漠生物群系
{
.water_threshold = 0.1, // 很少水体
.sand_threshold = 0.7, // 大量沙地
.wood_threshold = 0.85, // 很少植被
.mountain_threshold = 0.9, // 适中山地
.scale = 0.03, // 地形噪声尺度
.octaves = 3, // 噪声层数
.persistence = 0.4, // 噪声持续性
.name = "Desert"
}
最佳实践
1. 气候尺度设置
- 对于大陆级地图:
temperature_scale = 0.001-0.003
- 对于区域级地图:
temperature_scale = 0.005-0.01
- 对于局部地图:
temperature_scale = 0.01-0.02
2. 生物群系多样性
- 使用不同的种子可以产生完全不同的气候分布
- 调整温度和湿度尺度的比例可以改变生物群系的形状和分布
3. 性能考虑
- 生物群系数据仅在生成过程中存储,生成完成后自动释放
- 大地图建议分块生成以控制内存使用
演示程序
biome_demo
: 基础生物群系演示advanced_biome_demo
: 高级生物群系分析和可视化tilemap_demo
: 传统兼容模式演示
运行示例:
./build/tilemap/biome_demo
./build/tilemap/advanced_biome_demo