c++ - 添加变换后 DirectX 9 不渲染

标签 c++ 3d directx direct3d directx-9

到目前为止,我得到了一个没有任何变换的立方体渲染(因此它是在正交透视中渲染的),我正在处理以前的代码以将其放入透视图中,其中涉及所有矩阵。我更改了灵活的顶点格式以便没有 RHW(因此只有 XYZ 坐标和颜色,尝试了 ARGB 和 XRGB 但我认为这不重要),并且我添加了一个设置所有矩阵的函数。

调试
表明矩阵被正确创建,函数正确返回(据我所知),没有崩溃(如果出现问题,DirectX 永远不会提示,它只是不渲染)并且一般来说,逐步调试显示没有超自然现象。

现有项目(我修改并最终阻止工作):
在我前进的过程中,我还编写了各种教程,这样我就可以回去看看我上次做了什么来让它工作,这次我保留了版本,这样你就可以获得代码 here与 VS2010 解决方案一起,所有 DirectX 工作都在 3Dheader.h 和 D3DLoader.h 中完成

变化:
- 自定义顶点格式 FVF_CUSTOMVERTEX 已更改,以便不包括 RHW,据我所知,它必须被删除以便通过转换计算 - 在 Render() 中,我添加了对函数 setMatrices() 的调用,该函数执行所有矩阵和变换工作,如下所示:

void setMatrices()
{
    //--------------transformation code----------------//
    D3DXMATRIX objectM, translationM, rotationM, projectionM, lookAtM, finalM;

HRESULT hr;

D3DXMatrixIdentity(&objectM);
D3DXMatrixRotationY(&rotationM, D3DX_PI/4);
//D3DXMatrixMultiply(&finalM, &objectM, &rotationM);

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

D3DXVECTOR3 camera;
camera.x = -10;
camera.y = 0;
camera.z = 0;
D3DXVECTOR3 cameraTarget;
cameraTarget.x = 0;
cameraTarget.y = 0;
cameraTarget.z = 0;
D3DXVECTOR3 cameraUp;
cameraUp.x = 0;
cameraUp.y = 1;
cameraUp.z = 0;
D3DXMatrixLookAtLH(&lookAtM,&camera,&cameraTarget, &cameraUp);

hr = pd3dDevice->SetTransform(D3DTS_WORLD, &objectM);
hr = pd3dDevice->SetTransform(D3DTS_PROJECTION, &projectionM);
hr = pd3dDevice->SetTransform(D3DTS_VIEW, &lookAtM);

D3DVIEWPORT9 view_port;

view_port.X=0;
view_port.Y=0;
view_port.Width=xRes;
view_port.Height=yRes;
view_port.MinZ=0.0f;
view_port.MaxZ=1.0f;

pd3dDevice->SetViewport(&view_port);
}

当然请注意,有些元素可能不需要,放在那儿只是为了以防万一,这是我目前拥有的代码,因此我们有一个共同的引用。

提前感谢您的任何回答和/或尝试回答。

最佳答案

在您的代码(已下载)中,xResyRes 是整数。由于整数除法,yRes/xRes 将为零,因为 xRes > yRes。您将其作为纵横比传递给 D3DXMatrixPerspextiveFovLH 函数,这将产生无效矩阵。相反,先将它们转换为 float ,然后再进行除法,然后将结果传入。

关于c++ - 添加变换后 DirectX 9 不渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630872/

相关文章:

Python:由数据点列表制作的 3D 绘图可以有渐变配色方案吗?

ios - opengles在iphone中显示人脸

地形上的 C++ DirectX11 纹理无法正确渲染

c++ - QT Creator - 在我自己的库中使用外部库

c++ - 用于测试对象是否与 boost 范围兼容的元函数

python - 在 matplotlib python 中以 3D 形式动画绘制两种不同的颜色和形状

c++ - 哪里有好的 DirectX (3D) DirectWrite 教程?

.net - 使用托管组件链接到静态库

c++ - 将 double 组转换为仅具有 double 成员的结构数组而不复制数据

windows - DirectX 11 SDK - 我可以在哪里下载它?