58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
#pragma once
|
|
#include "render/Renderer.h"
|
|
#include "PlanetData.h"
|
|
|
|
namespace ZL {
|
|
|
|
struct StoneParams
|
|
{
|
|
static const float BASE_SCALE; // Îáùèé ðàçìåð êàìíÿ
|
|
static const float MIN_AXIS_SCALE; // Ìèíèìàëüíîå ðàñòÿæåíèå/ñæàòèå ïî îñè
|
|
static const float MAX_AXIS_SCALE; // Ìàêñèìàëüíîå ðàñòÿæåíèå/ñæàòèå ïî îñè
|
|
static const float MIN_PERTURBATION; // Ìèíèìàëüíîå ðàäèàëüíîå âîçìóùåíèå âåðøèíû
|
|
static const float MAX_PERTURBATION; // Ìàêñèìàëüíîå ðàäèàëüíîå âîçìóùåíèå âåðøèíû
|
|
static const int STONES_PER_TRIANGLE;
|
|
|
|
};
|
|
|
|
struct StoneInstance {
|
|
uint64_t seed;
|
|
Vector3f position;
|
|
Vector3f scale;
|
|
Eigen::Quaternionf rotation;
|
|
};
|
|
|
|
enum class ChunkStatus {
|
|
Empty, // Äàííûõ íåò
|
|
Generating, // Çàäà÷à â TaskManager (CPU)
|
|
ReadyToUpload, // Äàííûå â ïàìÿòè, æäóò î÷åðåäè â ãëàâíûé ïîòîê
|
|
Live // Çàãðóæåíî â GPU è ãîòîâî ê îòðèñîâêå
|
|
};
|
|
|
|
struct StoneGroup {
|
|
// mesh.PositionData è ïðî÷èå áóäóò çàïîëíÿòüñÿ â inflate()
|
|
VertexDataStruct mesh;
|
|
|
|
std::vector<std::vector<StoneInstance>> allInstances;
|
|
|
|
// Î÷èùàåò ñòàðóþ ãåîìåòðèþ è ãåíåðèðóåò íîâóþ äëÿ óêàçàííûõ èíäåêñîâ
|
|
std::vector<VertexRenderStruct> inflate(int count);
|
|
|
|
VertexRenderStruct inflateOne(int index, float scaleModifier);
|
|
VertexDataStruct inflateOneDataOnly(int index, float scaleModifier);
|
|
|
|
std::vector<ChunkStatus> statuses;
|
|
|
|
// Èíèöèàëèçàöèÿ ñòàòóñîâ ïðè ñîçäàíèè ãðóïïû
|
|
void initStatuses() {
|
|
statuses.assign(allInstances.size(), ChunkStatus::Empty);
|
|
}
|
|
};
|
|
|
|
// Òåïåðü âîçâðàùàåò çàãîòîâêó ñî âñåìè ïàðàìåòðàìè, íî áåç òÿæåëîãî ìåøà
|
|
StoneGroup CreateStoneGroupData(uint64_t globalSeed, const LodLevel& lodLevel);
|
|
|
|
Triangle createLocalTriangle(const Triangle& sampleTri);
|
|
|
|
} // namespace ZL
|