2

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

这是我的“ 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' 左侧必须指向类/结构/联合/通用类型 c:\users\catt\desktop\deneme\d3dgeneral.cpp 74 MeshClass

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

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

我知道我不必在该函数中使用 d3dDevice 作为参考,但我也有一个函数Cleanup。我想我需要为它提供参考,因为它必须清理真正的设备本身而不是它的副本 8)。我希望我正确地解释了自己。如果你能帮助我,那就太棒了。感谢您抽出时间...

4

2 回答 2

3

你有没有试过这个:

(*PDev)->SetTransform( D3DTS_PROJECTION, &matProj ); 
于 2011-06-12T12:03:21.380 回答
2

LPDIRECT3D9DEVICE已经是一个指针。您不需要指向它的指针。只看LPDIRECT3D9DEVICE价值。

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

于 2011-06-12T12:06:18.190 回答