43 lines
1.2 KiB
C
43 lines
1.2 KiB
C
#pragma once
|
|
|
|
// ============================================================================
|
|
// terrain_manager.h - 地形分块流式加载
|
|
// ============================================================================
|
|
|
|
#include "terrain.h"
|
|
#include "../Rendering/material.h"
|
|
#include "../Rendering/renderer.h"
|
|
#include "../ASM/math_c_fallback.h"
|
|
|
|
#define TERRAIN_MAX_CHUNKS 64
|
|
|
|
typedef struct {
|
|
int cx;
|
|
int cz;
|
|
Terrain* terrain;
|
|
Material* material;
|
|
int loaded;
|
|
} TerrainChunk;
|
|
|
|
typedef struct {
|
|
TerrainConfig config;
|
|
TerrainChunk chunks[TERRAIN_MAX_CHUNKS];
|
|
int chunk_count;
|
|
int load_radius;
|
|
int seed;
|
|
ID3D11Device* device;
|
|
Material* base_material;
|
|
} TerrainManager;
|
|
|
|
TerrainManager* terrain_manager_create(ID3D11Device* dev, const TerrainConfig* config, Material* base_material);
|
|
void terrain_manager_destroy(TerrainManager* tm);
|
|
|
|
// 根据观察者位置更新分块
|
|
void terrain_manager_update(TerrainManager* tm, Vec3 observer_pos);
|
|
|
|
// 渲染所有已加载分块
|
|
void terrain_manager_render(TerrainManager* tm, Renderer* renderer);
|
|
|
|
// 从世界坐标获取地形高度(在所有已加载分块中采样)
|
|
float terrain_manager_get_height(TerrainManager* tm, float world_x, float world_z);
|