- 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!
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
- 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
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
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
- Katılım
- 10 Mar 2015
- Konular
- 3
- Mesajlar
- 146
- Online süresi
- 14g 18879s
- Reaksiyon Skoru
- 12
- Altın Konu
- 0
- Başarım Puanı
- 103
- TM Yaşı
- 11 Yıl 1 Ay 13 Gün
- MmoLira
- 5,490
- DevLira
- 0
file cpp. for inp
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 177
- Cevaplar
- 8
- Görüntüleme
- 260
- Cevaplar
- 18
- Görüntüleme
- 2K
- Cevaplar
- 14
- Görüntüleme
- 1K
- Cevaplar
- 2
- Görüntüleme
- 77