working on colors on the planet
This commit is contained in:
parent
c9178cff3a
commit
570c96a628
@ -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)
|
||||
{
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user