Hikayeler

Reklam vermek için turkmmo@gmail.com

Metin2 directx 8.1 su grafik c++ gemini ai

apikomt2

Level 6
Uzman
Developer
Katılım
11 May 2023
Konular
237
Mesajlar
1,032
Online süresi
1ay 23g
Reaksiyon Skoru
678
Altın Konu
1
Başarım Puanı
176
TM Yaşı
2 Yıl 11 Ay 14 Gün
MmoLira
503
DevLira
315

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

1766311882828.png




Kod:
#include "StdAfx.h"
#include "../eterLib/StateManager.h"
#include "../eterLib/ResourceManager.h"

#include "MapOutdoor.h"
#include "TerrainPatch.h"

void CMapOutdoor::LoadWaterTexture()
{
    UnloadWaterTexture();
    char buf[256];
    for (int i = 0; i < 30; ++i)
    {
        sprintf(buf, "d:/ymir Work/special/water/%02d.dds", i+1);
        m_WaterInstances[i].SetImagePointer((CGraphicImage *) CResourceManager::Instance().GetResourcePointer(buf));
    }
}

void CMapOutdoor::UnloadWaterTexture()
{
    for (int i = 0; i < 30; ++i)
        m_WaterInstances[i].Destroy();
}

void CMapOutdoor::RenderWater()
{
    if (m_PatchVector.empty() || !IsVisiblePart(PART_WATER))
        return;

    // Zaman Değişkeni
    float fTime = ELTimer_GetMSec() / 1000.0f;

    //////////////////////////////////////////////////////////////////////////
    // BERRAKLIK AYARLARI
    //////////////////////////////////////////////////////////////////////////
    // ARGB: 140 Alpha (Şeffaflık), 0 Red, 210 Green, 255 Blue (Turkuaz-Cam Göbeği)
    D3DCOLOR crystalColor = D3DCOLOR_ARGB(140, 0, 210, 255);
    float fWaveHeight = 10.0f; // Hafif ve temiz dalgalanma
    float fWaveSpeed = 1.0f;  // Dinlendirici hız
    //////////////////////////////////////////////////////////////////////////

    D3DXMATRIX matTexTransformWater;

    // Render States - Temel Ayarlar
    STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
    STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
    STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    STATEMANAGER.SaveRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
    STATEMANAGER.SaveRenderState(D3DRS_COLORVERTEX, TRUE);
    
    // Berrak parlamalar için Specular aktif
    STATEMANAGER.SaveRenderState(D3DRS_SPECULARENABLE, TRUE);
    STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, crystalColor);

    // Doku Ayarı (Daha pürüzsüz geçiş için 60ms)
    STATEMANAGER.SetTexture(0, m_WaterInstances[((ELTimer_GetMSec() / 60) % 30)].GetTexturePointer()->GetD3DTexture());

    // Doku Matrisi
    D3DXMatrixScaling(&matTexTransformWater, m_fWaterTexCoordBase, -m_fWaterTexCoordBase, 0.0f);
    D3DXMatrixMultiply(&matTexTransformWater, &m_matViewInverse, &matTexTransformWater);

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

    // --- BULANIKLIĞI SİLEN FİLTRELEME ---
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
    STATEMANAGER.SaveTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    
    // Uzaktaki bulanıklığı engellemek için Anisotropic zorluyoruz
    STATEMANAGER.SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_MAXANISOTROPY, 8);

    // Cam gibi berrak harmanlama
    STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);

    STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
    STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR);

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

    // --- Dinamik Dalga (Sarsıntısız Salınım) ---
    m_matWorldForCommonUse._41 = 0.0f;
    m_matWorldForCommonUse._42 = 0.0f;
    m_matWorldForCommonUse._43 = sinf(fTime * fWaveSpeed) * fWaveHeight;
    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;

    // Restore States
    STATEMANAGER.RestoreVertexShader();
    STATEMANAGER.RestoreTransform(D3DTS_TEXTURE0);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_MINFILTER);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_MAGFILTER);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_TEXCOORDINDEX);
    STATEMANAGER.RestoreTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS);
    STATEMANAGER.RestoreRenderState(D3DRS_SPECULARENABLE);
    STATEMANAGER.RestoreRenderState(D3DRS_DIFFUSEMATERIALSOURCE);
    STATEMANAGER.RestoreRenderState(D3DRS_COLORVERTEX);
    STATEMANAGER.RestoreRenderState(D3DRS_ZWRITEENABLE);
    STATEMANAGER.RestoreRenderState(D3DRS_ALPHABLENDENABLE);
    STATEMANAGER.RestoreRenderState(D3DRS_CULLMODE);
}
void CMapOutdoor::DrawWater(long patchnum)
{
    assert(NULL!=m_pTerrainPatchProxyList);
    if (!m_pTerrainPatchProxyList)
        return;

    CTerrainPatchProxy& rkTerrainPatchProxy = m_pTerrainPatchProxyList[patchnum];

    if (!rkTerrainPatchProxy.isUsed())
        return;

    if (!rkTerrainPatchProxy.isWaterExists())
        return;

    CGraphicVertexBuffer* pkVB=rkTerrainPatchProxy.GetWaterVertexBufferPointer();
    if (!pkVB)
        return;

    if (!pkVB->GetD3DVertexBuffer())
        return;

    UINT uPriCount=rkTerrainPatchProxy.GetWaterFaceCount();
    if (!uPriCount)
        return;

    STATEMANAGER.SetStreamSource(0, pkVB->GetD3DVertexBuffer(), sizeof(SWaterVertex));
    STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLELIST, 0, uPriCount);

    ms_faceCount += uPriCount;
}
// vaffanculo a chi t'e morto martysama
 
directx9 da şöyle bir fark var.
directx8 cpuya yükler.
directx9 ekran kartınada yükler.

directx 8 kod bloğu yazazarsın
direct9 1 kod hepsini karşılar.

burda directx8.1 yapılacak şey olduğu için açtım konuyu
 
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 2, Üye: 0, Misafir: 2)

Geri
Üst