#pragma once // Sahne aydınlatma durumu: ortam (ambient) + yönsel ışıklar. Değerler shader'ın // ModelItme push-constant'ına yazılır (model.frag okur). Ürün ağacındaki "Işıklar" // grubu ve ışık pencereleri bu durumu düzenler. Varsayılanlar eski sabit shader // değerlerini birebir üretir (görsel değişmeden geçiş). #include "fiko/core/mat/vec.hpp" #include "fiko/core/temel.hpp" namespace fiko { // Tek yönsel ışık (key/fill). kameraTakip: yön kameradan türetilir (headlight). struct YonselIsik { Vec3f yon{0.5f, 0.3f, 0.8f}; // dünya yönü (normalize edilir) Vec3f renk{1.0f, 1.0f, 1.0f}; // ışık rengi f32 siddet = 0.85f; // parlaklık çarpanı bool aktif = true; bool kameraTakip = false; // true → yön = kamera bakış yönü (headlight) }; // Sahne aydınlatması: ortam rengi/şiddeti + 2 yönsel ışık (key + fill). struct IsikDurum { Vec3f ortamRenk{1.0f, 1.0f, 1.0f}; f32 ortamSiddet = 0.32f; // taban zemin (grazing yüzeyler kararmasın) // Key ışık = HEADLIGHT (kameraTakip): baktığın yüzey daima aydınlık → hangi açıdan // bakarsan bak renk kaybolmaz; yüz-görüş açısına göre gölge → düz tek-renk olmaz. YonselIsik isik1{{0.5f, 0.3f, 0.8f}, {1.0f, 1.0f, 1.0f}, 0.95f, true, true}; // key (headlight) YonselIsik isik2{{-0.6f, -0.4f, 0.2f}, {1.0f, 1.0f, 1.0f}, 0.30f, true, false}; // fill (sabit, biraz form) }; // Bir yönsel ışığın efektif dünya yönünü ver (kameraTakip ise kamera bakışı). inline Vec3f isikEtkinYon(const YonselIsik& y, const Vec3f& kameraBakis) { return y.kameraTakip ? kameraBakis : y.yon; } } // namespace fiko