İlan
05 Haz 2026 23 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python "Suların Gerçek Rönesansı: Sular Durgun Olmam...
İlan Yan banner placeholder

"Suların Gerçek Rönesansı: Sular Durgun Olmaması için Çözüm"

HellorDTR 29.04.2026 20:55 985 görüntüleme 3 cevap
Son Mesaj
HellorDTR
Üye
Üye
Katılım12 Mar 2026
Konular10
Mesajlar62
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
29.04.2026 20:55 #1


mapotudorwater.cpp ilgili yeri değiştir.
Kod:
#include <cmath>
void CMapOutdoor::RenderWater()
{
    if (m_PatchVector.empty())
        return;

    if (!IsVisiblePart(PART_WATER))
        return;

    // Zamanı C++20 mantığıyla alıp saniyeye çeviriyoruz (Hem dalga hem akıntı için kullanılacak)
    const float fCurrentTimeSec = static_cast<float>(CTimer::Instance().GetCurrentMillisecond()) / 1000.0f;

    //////////////////////////////////////////////////////////////////////////
    // RenderState
    STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
    STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    STATEMANAGER.SaveRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
    STATEMANAGER.SaveRenderState(D3DRS_COLORVERTEX, TRUE);

    STATEMANAGER.SetTexture(0, m_WaterInstances[((ELTimer_GetMSec() / 70) % 30)].GetTexturePointer()->GetD3DTexture());

    // --- 1. YENİLİK: Akıntı (UV Scrolling) Efekti ---
    constexpr float kWaterFlowSpeedU = 0.03f; // X eksenindeki akış hızı (sağ-sol)
    constexpr float kWaterFlowSpeedV = 0.05f; // Y eksenindeki akış hızı (ileri-geri)
    
    D3DXMATRIX matTexScale, matTexTranslate, matTexTransformWater;
    
    // Kaplamayı boyutlandırıyoruz
    D3DXMatrixScaling(&matTexScale, m_fWaterTexCoordBase, -m_fWaterTexCoordBase, 0.0f);
    
    // Kaplamayı zamana bağlı olarak kaydırıyoruz (Akıntı hissi verir)
    D3DXMatrixTranslation(&matTexTranslate, fCurrentTimeSec * kWaterFlowSpeedU, fCurrentTimeSec * kWaterFlowSpeedV, 0.0f);
    
    // Matrisleri birleştirip View matrisi ile çarpıyoruz
    D3DXMatrixMultiply(&matTexTransformWater, &matTexScale, &matTexTranslate);
    D3DXMatrixMultiply(&matTexTransformWater, &m_matViewInverse, &matTexTransformWater);
    // ------------------------------------------------

    STATEMANAGER.SaveTransform(D3DTS_TEXTURE0, &matTexTransformWater);
    STATEMANAGER.SaveVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE);

    STATEMANAGER.SaveTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);

    STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

    STATEMANAGER.SetTexture(1, NULL);
    STATEMANAGER.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
    STATEMANAGER.SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
    //////////////////////////////////////////////////////////////////////////


    // --- 2. YENİLİK: C++20 Trigonometrik Okyanus Dalgası (Smooth Wave) ---
    // Eski random_range ile zıplayan sistem yerine, sinüs dalgası kullanarak suyun yavaşça inip kalkmasını sağlıyoruz.
    constexpr float kWaveAmplitude = 7.0f; // Dalganın maksimum yüksekliği
    constexpr float kWaveSpeed     = 1.5f; // Dalganın inip çıkma hızı
    
    // Sinüs dalgası oluştur: -kWaveAmplitude ile +kWaveAmplitude arasında yumuşakça gidip gelir
    const float fWaterHeightCurrent = std::sin(fCurrentTimeSec * kWaveSpeed) * kWaveAmplitude;

    m_matWorldForCommonUse._43 = fWaterHeightCurrent; // Z ekseni (Yükseklik)
    m_matWorldForCommonUse._41 = 0.0f;
    m_matWorldForCommonUse._42 = 0.0f;
    STATEMANAGER.SetTransform(D3DTS_WORLD, &m_matWorldForCommonUse);
    // ----------------------------------------------------------------------


    float fFogDistance = __GetFogDistance();

    std::vector<std::pair<float, long> >::iterator i;

    for(i = m_PatchVector.begin(); i != m_PatchVector.end(); ++i)
    {
        if (i->first < fFogDistance)
            DrawWater(i->second);
    }

    STATEMANAGER.SetTexture(0, NULL);
    STATEMANAGER.SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);

    for(i = m_PatchVector.begin(); i != m_PatchVector.end(); ++i)
    {
        if (i->first >= fFogDistance)
            DrawWater(i->second);
    }

    m_matWorldForCommonUse._43 = 0.0f;

    //////////////////////////////////////////////////////////////////////////
    // RenderState Restore (Değişmedi)
    STATEMANAGER.RestoreVertexShader();
    STATEMANAGER.RestoreTransform(D3DTS_TEXTURE0);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_MINFILTER);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_MAGFILTER);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_MIPFILTER);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ADDRESSU);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ADDRESSV);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_TEXCOORDINDEX);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS);

    STATEMANAGER.RestoreRenderState(D3DRS_DIFFUSEMATERIALSOURCE);
    STATEMANAGER.RestoreRenderState(D3DRS_COLORVERTEX);
    STATEMANAGER.RestoreRenderState(D3DRS_ZWRITEENABLE);
    STATEMANAGER.RestoreRenderState(D3DRS_ALPHABLENDENABLE);
    STATEMANAGER.RestoreRenderState(D3DRS_CULLMODE);
}
LiyanexDigital
Üye
Üye
Katılım31 Ara 2025
Konular4
Mesajlar51
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
01.05.2026 18:05 #2
Paylaşım için teşekkürler
Hesef
Üye
Üye
Katılım20 Şub 2026
Konular4
Mesajlar39
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
03.05.2026 08:52 #3
Paylaşım için teşekkürler
MafyAlemi
Üye
Üye
Katılım27 Kas 2025
Konular5
Mesajlar36
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
05.05.2026 05:43 #4
Paylaşım için teşekkürler Elinize sağlık.
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder