- 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>
156 lines
4.4 KiB
Markdown
156 lines
4.4 KiB
Markdown
# 生物群系系统使用指南
|
||
|
||
## 概述
|
||
|
||
新的生物群系系统基于温度和湿度参数来决定地形生成,提供了更加真实和多样化的地图生成体验。
|
||
|
||
## 核心特性
|
||
|
||
### 1. 生物群系类型
|
||
系统支持9种不同的生物群系,基于温度(冷/温带/热)和湿度(干燥/适中/潮湿)的组合:
|
||
|
||
| 温度\湿度 | 干燥 | 适中 | 潮湿 |
|
||
|----------|------|------|------|
|
||
| **冷** | 苔原(Tundra) | 针叶林(Taiga) | 寒带雨林(ColdRainforest) |
|
||
| **温带** | 草原(Grassland) | 落叶林(DeciduousForest) | 温带雨林(TemperateRainforest) |
|
||
| **热** | 沙漠(Desert) | 热带草原(Savanna) | 热带雨林(TropicalRainforest) |
|
||
|
||
### 2. 子区块系统
|
||
- 每个64×64的区块被划分为4×4个子区块
|
||
- 每个子区块大小为16×16瓦片
|
||
- 每个子区块具有一致的生物群系
|
||
- 生物群系基于子区块中心位置的气候值确定
|
||
|
||
### 3. 地形生成参数
|
||
每个生物群系都有独特的地形生成参数:
|
||
- **水域阈值**: 决定水体分布
|
||
- **沙地阈值**: 决定沙地区域
|
||
- **森林阈值**: 决定树木覆盖
|
||
- **山地阈值**: 决定山脉分布
|
||
- **噪声参数**: 控制地形的细节程度
|
||
|
||
## 使用方法
|
||
|
||
### 基本使用
|
||
|
||
```cpp
|
||
#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类
|
||
|
||
```cpp
|
||
// 创建生成器实例
|
||
istd::TerrainGenerator generator(config);
|
||
|
||
// 生成地图
|
||
generator.generate_map(tilemap);
|
||
// 生物群系数据会在生成完成后自动清理
|
||
```
|
||
|
||
### 获取生物群系信息
|
||
|
||
```cpp
|
||
// 获取特定位置的气候值
|
||
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结构
|
||
```cpp
|
||
istd::SubChunkPos sub_pos(2, 1); // 子区块(2,1)
|
||
```
|
||
|
||
### 坐标转换
|
||
```cpp
|
||
// 瓦片坐标转子区块坐标
|
||
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稍大,产生不同的气候模式
|
||
|
||
### 生物群系属性示例
|
||
|
||
```cpp
|
||
// 沙漠生物群系
|
||
{
|
||
.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`: 传统兼容模式演示
|
||
|
||
运行示例:
|
||
```bash
|
||
./build/tilemap/biome_demo
|
||
./build/tilemap/advanced_biome_demo
|
||
```
|