working on colors on the planet

This commit is contained in:
Vladislav Khorev 2026-01-02 22:01:33 +03:00
parent c9178cff3a
commit 570c96a628
3 changed files with 26 additions and 48 deletions

View File

@ -33,7 +33,8 @@ void main() {
vec4 bakedTextureColor = texture2D(BakedTexture, finalTexCoord);
vec4 textureColor = texture2D(Texture, TexCoord);
vec4 textureFlavoredColor = vec4(textureColor.rgb * Color, 1.0);
vec3 flavoredRGB = mix(textureColor.rgb, textureColor.rgb * Color, 0.7);
vec4 textureFlavoredColor = vec4(textureColor.rgb * Color, 1.0);
if (bakedTextureColor.x < 0.01 && bakedTextureColor.y < 0.01 && bakedTextureColor.y < 0.01)
{

View File

@ -332,12 +332,19 @@ namespace ZL {
lod.vertexData.ColorData.reserve(vertexCount);
const std::array<Vector2f, 3> triangleUVs = {
Vector2f(0.5f, 1.0f),
Vector2f(0.0f, 0.0f),
Vector2f(1.0f, 0.0f)
};
const Vector3f colorPinkish = { 1.0f, 0.8f, 0.82f }; // Ńëĺăęŕ đîçîâŕňűé
const Vector3f colorYellowish = { 1.0f, 1.0f, 0.75f }; // Ńëĺăęŕ ćĺëňîâŕňűé
const float colorFrequency = 4.0f; // Ěŕńřňŕá ď˙ňĺí
for (const auto& t : lod.triangles) {
// --- Âû÷èñëÿåì ëîêàëüíûé áàçèñ òðåóãîëüíèêà (êàê â GetRotationForTriangle) ---
Vector3f vA = t.data[0];
@ -364,55 +371,24 @@ namespace ZL {
lod.vertexData.TexCoordData.push_back(triangleUVs[i]);
lod.vertexData.TangentData.push_back(x_axis);
lod.vertexData.BinormalData.push_back(y_axis);
}
}
// Áŕçîâűé öâĺň č ďŕđŕěĺňđű
const Vector3f baseColor = { 0.498f, 0.416f, 0.0f };
const float colorFrequency = 5.0f;
const float colorAmplitude = 0.2f;
const Vector3f offsetR = { 0.1f, 0.2f, 0.3f };
const Vector3f offsetG = { 0.5f, 0.4f, 0.6f };
const Vector3f offsetB = { 0.9f, 0.8f, 0.7f };
for (const auto& t : lod.triangles) {
for (int i = 0; i < 3; i++) {
// ÂŔĆÍÎ: Ěű čńďîëüçóĺě ăĺîěĺňđčţ čç t.data[i] äë˙ ďîëó÷ĺíč˙ íŕďđŕâëĺíč˙,
// ŕ íĺ PositionData čç buffer, ďîńęîëüęó ňŕě ěîćĺň íĺ áűňü íóćíîăî ďîđ˙äęŕ.
Vector3f p_geometry = t.data[i];
Vector3f dir = p_geometry.normalized();
// Âű÷čńëĺíčĺ öâĺňîâîăî řóěŕ (ęŕę âű äĺëŕëč)
float noiseR = colorPerlin.noise(
(dir.v[0] + offsetR.v[0]) * colorFrequency,
(dir.v[1] + offsetR.v[1]) * colorFrequency,
(dir.v[2] + offsetR.v[2]) * colorFrequency
);
float noiseG = colorPerlin.noise(
(dir.v[0] + offsetG.v[0]) * colorFrequency,
(dir.v[1] + offsetG.v[1]) * colorFrequency,
(dir.v[2] + offsetG.v[2]) * colorFrequency
);
float noiseB = colorPerlin.noise(
(dir.v[0] + offsetB.v[0]) * colorFrequency,
(dir.v[1] + offsetB.v[1]) * colorFrequency,
(dir.v[2] + offsetB.v[2]) * colorFrequency
// Čńďîëüçóĺě îäčí řóě äë˙ âűáîđŕ ěĺćäó đîçîâűě č ćĺëňűě
Vector3f dir = t.data[i].normalized();
float blendFactor = colorPerlin.noise(
dir.v[0] * colorFrequency,
dir.v[1] * colorFrequency,
dir.v[2] * colorFrequency
);
Vector3f colorOffset = {
noiseR * colorAmplitude,
noiseG * colorAmplitude,
noiseB * colorAmplitude
};
// Ďđčâîäčě řóě čç äčŕďŕçîíŕ [-1, 1] â [0, 1]
blendFactor = blendFactor * 0.5f + 0.5f;
Vector3f finalColor = baseColor + colorOffset;
// Ëčíĺéíŕ˙ číňĺđďîë˙öč˙ ěĺćäó äâóě˙ öâĺňŕěč
Vector3f finalColor;
finalColor.v[0] = colorPinkish.v[0] + blendFactor * (colorYellowish.v[0] - colorPinkish.v[0]);
finalColor.v[1] = colorPinkish.v[1] + blendFactor * (colorYellowish.v[1] - colorPinkish.v[1]);
finalColor.v[2] = colorPinkish.v[2] + blendFactor * (colorYellowish.v[2] - colorPinkish.v[2]);
finalColor.v[0] = max(0.0f, min(1.0f, finalColor.v[0]));
finalColor.v[1] = max(0.0f, min(1.0f, finalColor.v[1]));
finalColor.v[2] = max(0.0f, min(1.0f, finalColor.v[2]));
// ÄÎÁŔÂËßĹĚ ŇÎËÜĘÎ ÖÂĹŇ, ňŕę ęŕę PositionData č NormalData óćĺ çŕďîëíĺíű!
lod.vertexData.ColorData.push_back(finalColor);
}
}

View File

@ -67,7 +67,8 @@ namespace ZL {
sandTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/sand2.png", ""));
stoneTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/rockdark2.png", ""));
stoneTexture = std::make_unique<Texture>(CreateTextureDataFromPng("./resources/rock.png", ""));
// Атмосфера
planetAtmosphereRenderStruct.data = planetData.getAtmosphereLod().vertexData;
@ -302,8 +303,8 @@ namespace ZL {
// Позиция камеры (корабля) в мире
renderer.RenderUniform3fv("uViewPos", &Environment::shipPosition.v[0]);
renderer.RenderUniform1f("uHeightScale", 0.08f);
//renderer.RenderUniform1f("uHeightScale", 0.0f);
//renderer.RenderUniform1f("uHeightScale", 0.08f);
renderer.RenderUniform1f("uHeightScale", 0.0f);
renderer.RenderUniform1f("uDistanceToPlanetSurface", dist);
renderer.RenderUniform1f("uCurrentZFar", currentZFar);