如何发送D3D设备提供参考(DirectX/C++编程)

How to send D3D Device by giving reference ( DirectX/C++ Prgoramming )

本文关键字:DirectX C++ 编程 参考 D3D 何发送      更新时间:2023-10-16

H1。我正试图将代码分成不同的.cpp.h文件,以使它们更容易查找、查看和理解。以下是我现在要做的:我有一个Meshes.cpp,它是我的主.cpp源文件。在Render函数(Render())中,我必须调用一个名为SetupMatrix的函数:

这是我的"d3dGeneral.cpp"文件:

// Begining of the "d3dGeneral.cpp"
    #include "DXUT.h"
    VOID SetupMatrices( LPDIRECT3DDEVICE9 *PDev )
    {
        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveFovLH( &matProj,
                                    D3DX_PI / 4,
                                    1.777777777777778f,
                                    1.0f,
                                    1000.0f );    
        PDev->SetTransform( D3DTS_PROJECTION, &matProj ); // The problem is here......
    }
//Enging of the "d3dGeneral.cpp" 

这是我的"Meshes.cpp"文件:(这是主cpp文件)

// Begining of the "Meshes.cpp" file.
#include "DXUT.h"
#include "XMesh.h"
#include "Camera.h"
#include "d3dGeneral.cpp"
...
...
//Usualy SetupMatrices is found here.
...
...
VOID Render()
{
    SetupMatrices( &g_pd3dDevice );
    ...
    ...
    ...
}
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, int nCmdShow)
{
    ...
    ...
    ...
    Render();
    ...
    ...
    ...
}
// End of the "Meshes.cpp" file

名为DXUT.h的头文件包含其他常规包含。所以,当我这样做的时候,我会得到一个错误:

错误2错误C2227:"->SetTransform"的左侧必须指向class/struct/union/generic类型c:\users\catt\destdesk\deneme\ddgeneral.cpp 74 MeshClass

我知道这意味着什么,但我不知道如何避免。看起来我的指针有问题。我也试着这样使用PDev:

*PDev->SetTransform( D3DTS_PROJECTION, &matProj );  // ???

我知道我不必在该函数中使用d3dDevice作为参考,但我也有一个函数清理。我想我需要为它提供参考,因为它必须清洁真正的设备本身,而不是它的副本。我希望我解释得对。如果你能帮我,那就太好了。谢谢你抽出时间。。。

你试过这个吗:

(*PDev)->SetTransform( D3DTS_PROJECTION, &matProj ); 

LPDIRECT3D9DEVICE已经是指针。您不需要指向它的指针。只需按值取LPDIRECT3D9DEVICE即可。

当然,我个人更喜欢IDirect3D9Device*,因为它更清晰,此外,我喜欢将原始指针存储在智能指针中。