Porting to web

This commit is contained in:
Vladislav Khorev committed 2026-01-07 15:14:13 +03:00
1 parent 6961152d34
commit 723b973c7f
16 files changed
+182 -22

No files matched your search

+3
View File
@@ -51,9 +51,12 @@ namespace ZL {
planetMeshLods[i].Move(PLANET_CENTER_OFFSET);
}
#ifndef SIMPLIFIED
planetAtmosphereLod = generateSphere(5, 0);
planetAtmosphereLod.Scale(PLANET_RADIUS * 1.03);
planetAtmosphereLod.Move(PLANET_CENTER_OFFSET);
#endif
}
const LodLevel& PlanetData::getLodLevel(int level) const {
+6 -2
View File
@@ -25,8 +25,12 @@ namespace ZL {
VertexID generateEdgeID(const VertexID& id1, const VertexID& id2);
constexpr static int MAX_LOD_LEVELS = 6;
//constexpr static int MAX_LOD_LEVELS = 2;
#ifdef SIMPLIFIED
constexpr static int MAX_LOD_LEVELS = 1;
#else
constexpr static int MAX_LOD_LEVELS = 6;
#endif
struct Triangle
{
+21 -4
View File
@@ -5,8 +5,16 @@
#include "Environment.h"
#include "StoneObject.h"
namespace ZL {
#ifdef EMSCRIPTEN
using std::min;
using std::max;
#endif
extern const char* CONST_ZIP_FILE;
Matrix3f GetRotationForTriangle(const Triangle& tri) {
Vector3f vA = tri.data[0];
@@ -66,16 +74,18 @@ namespace ZL {
planetRenderStruct.RefreshVBO();
sandTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/sand2.png", ""));
stoneTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/rock.png", ""));
sandTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/sand2.png", CONST_ZIP_FILE));
stoneTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/rock.png", CONST_ZIP_FILE));
#ifndef SIMPLIFIED
// Атмосфера
planetAtmosphereRenderStruct.data = planetData.getAtmosphereLod().vertexData;
if (planetAtmosphereRenderStruct.data.PositionData.size() > 0)
{
planetAtmosphereRenderStruct.RefreshVBO();
}
#endif
planetStones = CreateStoneGroupData(778, planetData.getLodLevel(lodIndex));
@@ -195,6 +205,7 @@ namespace ZL {
void PlanetObject::draw(Renderer& renderer) {
#ifndef SIMPLIFIED
{
if (stoneMapFB == nullptr)
{
@@ -210,6 +221,7 @@ namespace ZL {
stoneMapFB->GenerateMipmaps();
}
#endif
//bakeStoneTexture(renderer);
@@ -220,7 +232,9 @@ namespace ZL {
drawPlanet(renderer);
drawStones(renderer);
#ifndef SIMPLIFIED
drawAtmosphere(renderer);
#endif
}
void PlanetObject::drawPlanet(Renderer& renderer)
@@ -291,8 +305,10 @@ namespace ZL {
playerLightFactor = max(0.0f, (playerLightFactor + 0.2f) / 1.2f);
renderer.RenderUniform1f("uPlayerLightFactor", playerLightFactor);
#ifndef SIMPLIFIED
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, stoneMapFB->getTextureID());
#endif
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, sandTexture->getTexID());
@@ -357,7 +373,7 @@ namespace ZL {
Vector3f playerDirWorld = Environment::shipPosition.normalized();
float playerLightFactor = max(0.0f, (playerDirWorld.dot(-sunDirWorld) + 0.2f) / 1.2f);
renderer.RenderUniform1f("uPlayerLightFactor", playerLightFactor);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_BLEND);
@@ -365,6 +381,7 @@ namespace ZL {
glBindTexture(GL_TEXTURE_2D, stoneTexture->getTexID());
for (int i : triangleIndicesToDraw)
//for (int i = 0; i < stonesToRender.size(); i++)
{
if (stonesToRender[i].data.PositionData.size() > 0)
{
+20 -2
View File
@@ -9,20 +9,38 @@
namespace ZL {
#ifdef EMSCRIPTEN
using std::min;
using std::max;
#endif
#ifdef SIMPLIFIED
const float StoneParams::BASE_SCALE = 1000.0f; // Общий размер камня
const float StoneParams::MIN_AXIS_SCALE = 1.0f; // Минимальное растяжение/сжатие по оси
const float StoneParams::MAX_AXIS_SCALE = 1.0f; // Максимальное растяжение/сжатие по оси
const float StoneParams::MIN_PERTURBATION = 0.0f; // Минимальное радиальное возмущение вершины
const float StoneParams::MAX_PERTURBATION = 0.0f; // Максимальное радиальное возмущение вершины
const int StoneParams::STONES_PER_TRIANGLE = 2;
#else
const float StoneParams::BASE_SCALE = 10.0f; // Общий размер камня
const float StoneParams::MIN_AXIS_SCALE = 1.0f; // Минимальное растяжение/сжатие по оси
const float StoneParams::MAX_AXIS_SCALE = 1.0f; // Максимальное растяжение/сжатие по оси
const float StoneParams::MIN_PERTURBATION = 0.0f; // Минимальное радиальное возмущение вершины
const float StoneParams::MAX_PERTURBATION = 0.0f; // Максимальное радиальное возмущение вершины
const int StoneParams::STONES_PER_TRIANGLE = 40;
#endif
/*const float StoneParams::MIN_AXIS_SCALE = 0.5f; // Минимальное растяжение/сжатие по оси
const float StoneParams::MAX_AXIS_SCALE = 1.5f; // Максимальное растяжение/сжатие по оси
const float StoneParams::MIN_PERTURBATION = 0.05f; // Минимальное радиальное возмущение вершины
const float StoneParams::MAX_PERTURBATION = 0.25f; // Максимальное радиальное возмущение вершины
*/
const int StoneParams::STONES_PER_TRIANGLE = 40;
//const int StoneParams::STONES_PER_TRIANGLE = 1;
// Вспомогательная функция для получения случайного числа в диапазоне [min, max]
float getRandomFloat(std::mt19937& gen, float min, float max) {
std::uniform_real_distribution<> distrib(min, max);