求d3d达人

不知你们在d3d编程里有没有使用"模型标识"一词呢

引用:

C/C++ code
所以要实现人物透视就必须找到游戏中的人物模型表示,例如,穿越火线人物模型表示为44


嗯 我是在研究透视 说白了 我是在写外挂。。。

在MyDrawIndexedPrimitive(原DrawIndexedPrimitive 前面的my 就是我HOOK到了DrawIndexedPrimitive这函数 程序若调用就会执行 MyDrawIndexedPrimitive函数) 这函数里判断要渲染是对象是不是人物呢

C/C++ code
    
HRESULT MyDrawIndexedPrimitive(....)
{
IDirect3DVertexBuffer9* pStreamData = NULL; 
    UINT iOffsetInBytes,iStride;
    Device->GetStreamSource(0,&pStreamData,&iOffsetInBytes,&iStride); 
    pStreamData->Release();
         if (iStride == 32 && Wallhack==1) //iStride人物模型标示值  Wallhack透视开关
         {
            //如果要渲染的是人物 和 透视开关键为开启
             Device->SetRenderState(D3DRS_ZENABLE,FALSE);  //禁用Z缓存
        SysDrawIndexedPrimitive(.....)//系统函数      //
             Device->SetRenderState(D3DRS_ZENABLE,TRUE);  //开启Z缓存
             
         }
}


这样就达到了透视效果 比如说我想渲染里面的人物为红色 

因为我一点点的d3d知识 我看了一篇文章的方法:

C/C++ code

IDirect3DTexture9* texRed=NULL; //全局
IDirect3DTexture9* texGreen =NULL;//全局
            //下面这个是My创建纹理函数
HRESULT GenerateTexture(IDirect3DDevice9 *pD3Ddev,IDirect3DTexture9 **ppD3Dtex, DWORD colour32)  
{   
                 if( FAILED(pD3Ddev->CreateTexture(8, 8, 1, 0, 
                                D3DFMT_A4R4G4B4, 
                                D3DPOOL_MANAGED, 
                               ppD3Dtex, NULL)) )   
                      return E_FAIL;   
  WORD colour16 = 
((WORD)((colour32>>28)&0xF)<<12)   
|(WORD)(((colour32>>20)&0xF)<<8)   
|(WORD)(((colour32>>12)&0xF)<<4)   
|(WORD)(((colour32>>4)&0xF)<<0);   
D3DLOCKED_RECT d3dlr; 
(*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0);   
WORD *pDst16 = (WORD*)d3dlr.pBits;   
for(int xy=0; xy < 8*8; xy++)   
*pDst16++ = colour16;   
(*ppD3Dtex)->UnlockRect(0);   
return S_OK; 
} 
//下面是个MyEndScene 是HOOK 也就是如果程序执行EndScene函数就会执行MyEndScene 
  HRESULT MyEndScene (...)
{
      GenerateTexture(Device, &texRed,D3DCOLOR_ARGB(255,255,0,0)); //创建纹理
    GenerateTexture(Device, &texGreen,D3DCOLOR_ARGB(255,0,255,0))//创建纹理;
}

//最后到了MyDrawIndexedPrimitive渲染函数
HRESULT MyDrawIndexedPrimitive(......)
{
       IDirect3DVertexBuffer9* pStreamData = NULL; 
    UINT iOffsetInBytes,iStride;
    Device->GetStreamSource(0,&pStreamData,&iOffsetInBytes,&iStride); 
    pStreamData->Release();
         if(iStride == 32)//如果是人物
         {
           Device->SetRenderState(D3DRS_ZENABLE,FALSE);//禁用Z
           Device->SetTexture( 0, texRed); //设置纹理
           hr=SysDrawIndexedPrimitive(......) //系统DrawIndexedPrimitive函数
           Device->SetRenderState(D3DRS_ZENABLE,TRUE);//启用Z 
           return SysDrawIndexedPrimitive(.....);//返回再次调用SysDrawIndexedPrimitive函数
         }
}


为什么到了里面全是红色的呢?

我想这是没错的呀 为什么呢

作者: dengchaozhu   发布时间: 2011-06-15

求哪位会的帮个忙啦

作者: dengchaozhu   发布时间: 2011-06-15

麻烦各位大哥帮个忙啦

作者: dengchaozhu   发布时间: 2011-06-15