42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
#pragma once
|
|
#include "ZLMath.h"
|
|
#include "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;
|
|
Vector4f rotation;
|
|
};
|
|
|
|
struct StoneGroup {
|
|
// mesh.PositionData è ïðî÷èå áóäóò çàïîëíÿòüñÿ â inflate()
|
|
VertexDataStruct mesh;
|
|
|
|
// Âíåøíèé âåêòîð — èíäåêñ òðåóãîëüíèêà ïëàíåòû,
|
|
// âíóòðåííèé — ñïèñîê êàìíåé íà ýòîì òðåóãîëüíèêå
|
|
std::vector<std::vector<StoneInstance>> allInstances;
|
|
|
|
// Î÷èùàåò ñòàðóþ ãåîìåòðèþ è ãåíåðèðóåò íîâóþ äëÿ óêàçàííûõ èíäåêñîâ
|
|
void inflate(const std::vector<int>& triangleIndices);
|
|
};
|
|
|
|
// Òåïåðü âîçâðàùàåò çàãîòîâêó ñî âñåìè ïàðàìåòðàìè, íî áåç òÿæåëîãî ìåøà
|
|
StoneGroup CreateStoneGroupData(uint64_t globalSeed, const LodLevel& planetLodLevel);
|
|
|
|
} // namespace ZL
|