到目前为止,我已经获得了一个没有任何变换的多维数据集渲染(因此,它是在正交透视图中呈现的),并且我正在使用先前的代码将其放入包含所有矩阵的透视图中。我更改了“灵活顶点格式”,以使其不具有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);
}
当然,请注意可能不需要一些元素,以防万一,以防万一,这是我目前拥有的代码,因此我们有一个共同的参考。
预先感谢您的任何回答和/或尝试回答。
最佳答案
在您的代码(已下载)中,xRes
和yRes
是整数。由于整数除法,由于xRes> yRes,yRes/xRes
将为零。您将其作为长宽比传递给D3DXMatrixPerspextiveFovLH
函数,这将产生无效的矩阵。相反,在进行除法之前,先将它们转换为浮点数,然后将结果传递给。
关于c++ - 添加转换后DirectX 9无法渲染,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30630872/