Files
Client/GameTools/Zallad3D SceneClass/WBEnvPlaneTex.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

255 lines
7.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// WBEnvPlaneTex.cpp: implementation of the WBEnvPlaneTex class.
//
//////////////////////////////////////////////////////////////////////
#include "WBEnvPlaneTex.h"
#include "SceneManager.h"
#include "BaseGraphicsLayer.h"
#include "SceneStateMgr.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
WBEnvPlaneTex::WBEnvPlaneTex()
{
m_pEnvPlaneTexture = NULL;
// m_pEnvPlaneDepthTexture = NULL;
m_pEnvPlaneSurf = NULL;
m_pEnvDepthSurf= NULL;
m_pBackColorSurf = NULL;
m_pBackDepthSurf = NULL;
memset(m_vecPlaneVertex,0,(sizeof(D3DXVECTOR3) * 4));
m_vecEyePos = D3DXVECTOR3(0.0f,0.0f,0.0f);
m_pDevice = NULL;
D3DXMatrixIdentity(&m_matReflect);
m_iTexSizeX = m_iTexSizeY = 256;
}
WBEnvPlaneTex::~WBEnvPlaneTex()
{
if(m_pEnvPlaneTexture != NULL)
m_pEnvPlaneTexture->Release();
/* if(m_pEnvPlaneDepthTexture != NULL)
m_pEnvPlaneDepthTexture->Release();
*/
if(m_pEnvPlaneSurf != NULL)
m_pEnvPlaneSurf->Release();
if(m_pEnvDepthSurf != NULL)
m_pEnvDepthSurf->Release();
}
/////////////////////
/*
vecA --------- vecB
| |
| |
| |
vecC --------- vecD
*/
void WBEnvPlaneTex::Init(LPDIRECT3DDEVICE8 pDevice,int iSizeX,int iSizeY)
{
m_pDevice = pDevice;
if(m_pDevice != NULL)
{
m_iTexSizeX = iSizeX;
m_iTexSizeY = iSizeY;
m_pDevice->GetRenderTarget( &m_pBackColorSurf );
m_pDevice->GetDepthStencilSurface( &m_pBackDepthSurf );
if(m_pEnvPlaneTexture != NULL)
m_pEnvPlaneTexture->Release();
m_pDevice->CreateTexture(m_iTexSizeX,m_iTexSizeY,1,D3DUSAGE_RENDERTARGET,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&m_pEnvPlaneTexture);
m_pEnvPlaneTexture->GetSurfaceLevel(0,&m_pEnvPlaneSurf);
m_pDevice->CreateDepthStencilSurface(m_iTexSizeX,m_iTexSizeY,D3DFMT_D16, D3DMULTISAMPLE_NONE, &m_pEnvDepthSurf );
/*HRESULT hr = m_pDevice->CreateTexture(m_iTexSizeX,m_iTexSizeY,1, D3DUSAGE_DEPTHSTENCIL,
D3DFMT_D24S8,D3DPOOL_DEFAULT,&m_pEnvPlaneDepthTexture);
m_pEnvPlaneDepthTexture->GetSurfaceLevel(0,&m_pEnvDepthSurf);
*/
//BaseGraphicsLayer::m_d3dpp.AutoDepthStencilFormat
m_TexViewPort.X = m_TexViewPort.Y = 0;
m_TexViewPort.Width = iSizeX;
m_TexViewPort.Height = iSizeY;
m_TexViewPort.MinZ = 0.0f;
m_TexViewPort.MaxZ = 1.0f;
}
}
void WBEnvPlaneTex::InitClipRange( D3DXVECTOR3 vecA,D3DXVECTOR3 vecB,D3DXVECTOR3 vecC,D3DXVECTOR3 vecD)
{
m_vecPlaneVertex[0] = vecA;
m_vecPlaneVertex[1] = vecB;
m_vecPlaneVertex[2] = vecC;
m_vecPlaneVertex[3] = vecD;
D3DXPlaneFromPoints( &m_Plane,&(m_vecPlaneVertex[0]),
&(m_vecPlaneVertex[1]),
&(m_vecPlaneVertex[2]));
m_Plane.a *= 1.0f;
m_Plane.b *= 1.0f;
m_Plane.c *= 1.0f;
D3DXMatrixReflect( &m_matReflect,&m_Plane);
}
void WBEnvPlaneTex::RenderBegin(D3DXVECTOR3 vecEye,D3DXMATRIX matWorld,float fWaterHeight)
{
DWORD dwCull;
DWORD dwBlend;
D3DXMATRIX matOriginView;
D3DXMATRIX matOriginProject;
m_pDevice->GetTransform(D3DTS_VIEW,&matOriginView);
m_pDevice->GetTransform(D3DTS_PROJECTION,&matOriginProject);
// Set Mirror Camera
D3DXMATRIX matMirrorView = matOriginView;
D3DXMATRIX matMirrorProject = matOriginProject;
D3DXMATRIX matTransform;
D3DXMatrixIdentity(&matTransform);
matTransform._22 = -1.0f;
matTransform._42 = 2.0f* fWaterHeight;
D3DXMatrixMultiply(&matMirrorView,&matTransform,&matMirrorView);
// D3DXMatrixMultiply(&matMirrorView,&matMirrorView,&matTransform);
m_pDevice->SetTransform(D3DTS_VIEW,&matMirrorView);
m_pDevice->SetTransform(D3DTS_PROJECTION,&matMirrorProject);
D3DVIEWPORT8 m_OriginViewPort;
m_pDevice->GetViewport(&m_OriginViewPort);
m_pDevice->GetRenderTarget( &m_pBackColorSurf );
m_pDevice->GetDepthStencilSurface( &m_pBackDepthSurf );
// Set RenderTarget
m_pDevice->SetRenderTarget(m_pEnvPlaneSurf,m_pEnvDepthSurf);//m_pEnvDepthSurf);
// Set New Viewport
m_pDevice->SetViewport(&m_TexViewPort);
m_pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER , 0x00000000, 1.0f, 0 );
m_pDevice->GetRenderState(D3DRS_ALPHABLENDENABLE,&dwBlend);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
m_pDevice->GetRenderState(D3DRS_CULLMODE,&dwCull);
m_Plane.a = 0.0f;
m_Plane.b = 1.0f;
m_Plane.c = 0.0f;
m_Plane.d = -fWaterHeight + 0.25f;
// Clip Plane
CSceneStateMgr::_SetD3DRenderState( D3DRS_CLIPPLANEENABLE,D3DCLIPPLANE1 );
//CSceneStateMgr::_SetD3DRenderState( D3DRS_CLIPPLANEENABLE, 0x00 );
m_pDevice->SetClipPlane(1,m_Plane);
// <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> cullmode Setting <20><><EFBFBD>ִ°͵<C2B0> <20><> <20>ݴ<EFBFBD><DDB4><EFBFBD> <20><><EFBFBD>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.<2E>Ѥ<EFBFBD>;
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CW);
CSceneManager::m_WeatherManager.Render(CSceneManager::GetDevice());
CSceneManager::m_HeightField.Render(CSceneManager::GetDevice());
CSceneManager::m_CharacterManager.Render(CSceneManager::GetDevice());
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,dwCull);
CSceneStateMgr::_SetD3DRenderState( D3DRS_CLIPPLANEENABLE, 0x00 );
// Back Render Target
m_pDevice->SetRenderTarget(m_pBackColorSurf,m_pBackDepthSurf);
m_pDevice->SetViewport(&m_OriginViewPort);
m_pDevice->SetTransform(D3DTS_VIEW,&matOriginView);
m_pDevice->SetTransform(D3DTS_PROJECTION,&matOriginProject);
// Texture Transform Matrix
D3DXMatrixIdentity(&m_matReflect);
// Clear
m_matReflect._11 = 0.0f;
m_matReflect._22 = 0.0f;
m_matReflect._33 = 0.0f;
m_matReflect._44 = 0.0f;
m_matReflect._11 = 0.5f;
m_matReflect._22 = -0.5f;
m_matReflect._41 = 0.5f;
m_matReflect._42 = 0.5f;
m_matReflect._43 = 1.0f;
m_matReflect._44 = 1.0f;
D3DXMatrixMultiply(&m_matReflect,&matMirrorProject,&m_matReflect);
D3DXMatrixMultiply(&m_matReflect,&matMirrorView,&m_matReflect);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,dwBlend);
}
/*
void WBEnvPlaneTex::RenderBegin(D3DXVECTOR3 vecEye,D3DXMATRIX matWorld)
{
m_matBackup = matWorld;
m_vecEyePos = vecEye;
m_pDevice->GetViewport(&m_BackViewPort);
m_pDevice->SetTransform( D3DTS_WORLD,&m_matReflect);
// Reflect <20>̹Ƿ<CCB9> reverse
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE,D3DCULL_CCW);
m_pDevice->SetClipPlane(0,*D3DXPlaneFromPoints(&m_Plane,&m_vecPlaneVertex[1],&m_vecPlaneVertex[0],&m_vecEyePos));
m_pDevice->SetClipPlane(1,*D3DXPlaneFromPoints(&m_Plane,&m_vecPlaneVertex[3],&m_vecPlaneVertex[1],&m_vecEyePos));
m_pDevice->SetClipPlane(2,*D3DXPlaneFromPoints(&m_Plane,&m_vecPlaneVertex[2],&m_vecPlaneVertex[3],&m_vecEyePos));
m_pDevice->SetClipPlane(3,*D3DXPlaneFromPoints(&m_Plane,&m_vecPlaneVertex[0],&m_vecPlaneVertex[2],&m_vecEyePos));
CSceneStateMgr::_SetD3DRenderState( D3DRS_CLIPPLANEENABLE,D3DCLIPPLANE0 | D3DCLIPPLANE1 | D3DCLIPPLANE2 | D3DCLIPPLANE3 );
m_pDevice->SetPixelShader(NULL);
m_pDevice->SetRenderTarget(m_pEnvPlaneSurf,NULL);//m_pEnvDepthSurf);
//m_pDevice->SetRenderTarget(m_pEnvPlaneSurf,m_pEnvDepthSurf);
m_pDevice->SetViewport(&m_TexViewPort);
m_pDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0 );
//m_pDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0 );
}*/
void WBEnvPlaneTex::RenderEnd()
{
m_pDevice->SetRenderTarget(m_pBackColorSurf,m_pBackDepthSurf);
m_pDevice->SetViewport(&m_BackViewPort);
m_pDevice->SetTransform( D3DTS_WORLD, &m_matBackup);
CSceneStateMgr::_SetD3DRenderState( D3DRS_CLIPPLANEENABLE, 0x00 );
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE, D3DCULL_CCW);
}