void Worldtoscreen(LPDIRECT3DDEVICE9 Device)
{
ModelInfo_t* pModel = new ModelInfo_t;
D3DXMATRIX ProjMatrix, ViewMatrix, WorldMatrix;
D3DXVECTOR3 VectorMiddle(0, 0, 0), ScreenMiddle(0, 0, 0);
Device->GetVertexShaderConstantF(204, ProjMatrix, 4);
Device->GetVertexShaderConstantF(223, ViewMatrix, 4);
D3DXMatrixIdentity(&WorldMatrix);
D3DXMatrixTranspose(&ViewMatrix, &ViewMatrix);
D3DXMatrixTranspose(&ProjMatrix, &ProjMatrix);
D3DXVec3Project(&VectorMiddle, &pModel->Position3D, &Viewport, &ProjMatrix, &ViewMatrix, &WorldMatrix);
if (VectorMiddle.z < 1.0f && ProjMatrix._44 < 1.0f) //not sure
{
pModel->Position2D.x = VectorMiddle.x;
pModel->Position2D.y = VectorMiddle.y;
}
}
void doDisassembleShader(LPDIRECT3DDEVICE9 pDevice,char* FileName)
{
std::ofstream oLogFile(FileName,std::ios::trunc);
if (!oLogFile.is_open())
return;
IDirect3DVertexShader9* pShader;
pDevice->GetVertexShader(&pShader);
UINT pSizeOfData;
pShader->GetFunction(NULL,&pSizeOfData);
BYTE* pData = new BYTE[pSizeOfData];
pShader->GetFunction(pData,&pSizeOfData);
LPD3DXBUFFER bOut;
D3DXDisassembleShader(reinterpret_cast<DWORD*>(pData),NULL,NULL,&bOut);
oLogFile << static_cast<char*>(bOut->GetBufferPointer()) << std::endl;
oLogFile.close();
delete[] pData;
pShader->Release();
}
in drawindexedp:
if(Stride == 40)
if (GetAsyncKeyState(VK_F9) & 1)
doDisassembleShader(pDevice, "shader1.txt");
or
if (GetAsyncKeyState(VK_F10) & 1)
if(Stride == 40)
doDisassembleShader(pDevice, "shader2.txt");
.. Device->GetViewport(&Viewport); Device->GetVertexShaderConstantF(204, ProjMatrix, 4); Device->GetVertexShaderConstantF(223, ViewMatrix, 4); ..
void Worldtoscreen(LPDIRECT3DDEVICE9 Device)
{
ModelInfo_t* pModel = new ModelInfo_t;
D3DXMATRIX ProjMatrix, ViewMatrix, WorldMatrix;
D3DXVECTOR3 VectorMiddle(0, 0, 0), ScreenMiddle(0, 0, 0);
Device->GetViewport(&Viewport);
Device->GetVertexShaderConstantF(204, ProjMatrix, 4);
Device->GetVertexShaderConstantF(223, ViewMatrix, 4);
D3DXMatrixIdentity(&WorldMatrix);
D3DXMatrixTranspose(&ViewMatrix, &ViewMatrix);
D3DXMatrixTranspose(&ProjMatrix, &ProjMatrix);
D3DXVec3Project(&VectorMiddle, &pModel->Position3D, &Viewport, &ProjMatrix, &ViewMatrix, &WorldMatrix);
// if (VectorMiddle.z < 1.0f && ProjMatrix._44 < 1.0f) //not sure
// {
pModel->Position2D.x = VectorMiddle.x;
pModel->Position2D.y = VectorMiddle.y;
//}
ModelInfo.push_back(pModel);
}
bool WorldToScreen(D3DXVECTOR3 inpos, D3DXVECTOR3 &outpos, LPDIRECT3DDEVICE9 pDevice)
{
DWORD dwRenderData = (DWORD)GetModuleHandleA("i3GfxDx.dll") + 00000;
CRenderData* RenderData = (CRenderData*)(dwRenderData);
D3DXVECTOR3 vScreen;
D3DVIEWPORT9 g_ViewPort;
pDevice->GetViewport(&g_ViewPort);
g_ViewPort.X = g_ViewPort.Y = 0;
g_ViewPort.MinZ = 0;
g_ViewPort.MaxZ = 1;
D3DXVec3Project(&vScreen, &inpos, &g_ViewPort,
&RenderData->RenderData->ProjectMatrix,
&RenderData->RenderData->ViewMatrix,
&RenderData->RenderData->WorldMatrix);
if (vScreen.z < 1.0f && vScreen.x > 0.0f && vScreen.y > 0.0f && vScreen.x < g_ViewPort.Width && vScreen.y < g_ViewPort.Height)
{
outpos.x = vScreen.x;
outpos.y = vScreen.y;
outpos.z = vScreen.z;
return true;
}
return false;
}
// ViewProjecti******** c0 4 // CameraPosition c4 1 // BoneMatrices c5 225 // LocalToWorld c230 4 // WorldToLocal c234 3
Device->GetVertexShaderConstantF(0, ProjMatrix, 4); Device->GetVertexShaderConstantF(4, ViewMatrix, 4);