Files
lity3d/Engine/Terrain/terrain_manager.h
T

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);