我一直在努力在DirectX 9中进行转换,在调试过程中,我终于在调用时发现了一个问题

D3DXMatrixPerspectiveFovLH(&projection, D3DX_PI/4, yRes/xRes, 1, 100);


投影的第一个元素(_11)是#INF,我敢肯定它不应该。这是在直接声明此矩阵之后以及在将其分配给DirectX的投影变换之前。

背景:我使用的RHW设置为1的自定义矢量,所以我得到了原本应该使用的正交视图,并且索引缓冲区也可以工作。此后发生了变化,是添加了矩阵,如Drunken HyenaDirectXTutorial.com所示,但我看不到任何模型。我尝试将相机放在另一侧(因为每个三角形的一个面都已渲染)并移开,以及放大模式(这在XNA中是我的问题),但我仍然只能看到背景图像或我清除屏幕的颜色。

添加的代码:

void setTransforms()
{
    D3DXMATRIX final;
    D3DXMATRIX translate;
    D3DXMATRIX rotate;
    D3DXMATRIX scale;

    D3DXMatrixIdentity(&final);
    D3DXMatrixTranslation(&translate, 0, 0, 1);

    static float f = 0;
    D3DXMatrixRotationY(&rotate,f++/1000);

    D3DXMatrixScaling(&scale, 100.0f, 100.0f, 100.0f);

    D3DXMatrixMultiply(&final, &final, &scale);
    D3DXMatrixMultiply(&final, &final, &rotate);
    D3DXMatrixMultiply(&final, &final, &translate);

    pd3dDevice->SetTransform(D3DTS_WORLD, &final);

    //---- Projection

    D3DXMATRIX projection;
    D3DXMatrixPerspectiveFovLH(&projection, D3DX_PI/4, yRes/xRes, 1, 100);

    pd3dDevice->SetTransform(D3DTS_PROJECTION, &projection);

    //~~~~ Projection
    //---- Camera / viewport

    D3DXMATRIX camera;
    D3DXVECTOR3 camPos(-10,0,0);
    D3DXVECTOR3 camTarget(0,0,0);
    D3DXVECTOR3 camUp(0,1,0);
    D3DXMatrixLookAtLH(&camera, &camPos, &camTarget, &camUp);

    pd3dDevice->SetTransform(D3DTS_VIEW, &camera);

    //~~~~ Camera

    pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
}


并且在执行渲染工作之前调用了此函数(我在各个阶段都尝试过begin()之前和之后)。除此以外,与之前的工作代码相比,唯一的变化是删除了RHW,其他所有方法都是正确的,包括缓冲区大小。

欢迎任何帮助或想法,谢谢!

最佳答案

yResxRes是否声明为int
在这种情况下,除y/x可能是0。尝试将变量之一强制转换为float

另外,我注意到您正在使用yRes/xRes计算纵横比。

如果将yRes用于高度,将xRes用于宽度,则必须将分度更改为xRes/(double)yRes

D3DXMatrixPerspectiveFovLH期望的宽高比是width by height,而不是相反。

10-06 04:10