我在使用SlimDX(DirectX 11)渲染一个简单的旋转立方体时遇到了问题。立方体正在旋转,这些是我得到的图像:
我使用这个顶点着色器:
float4x4 WorldViewProj : register(c0);
float4 VShader(float4 position : POSITION) : SV_POSITION
{
return mul(float4(position.xyz, 1.0), WorldViewProj);
}
这就是我准备WorldViewProj的方式:
ProjectionMatrix = Matrix.PerspectiveFovLH((float)(Math.PI / 4.0), 1f, -1, 20);
ViewMatrix = Matrix.LookAtLH(new Vector3(0f, 0, ypos), new Vector3(0f, 0, 10), new Vector3(0f, 1f, 0f));
Matrix positionMatrix = Matrix.Translation(position);
Matrix rotationMatrix = Matrix.RotationYawPitchRoll(rotation.X, rotation.Y, rotation.Z);
Matrix scaleMatrix = Matrix.Scaling(scale);
Matrix worldMatrix = rotationMatrix * scaleMatrix * positionMatrix;
worldMatrix = Matrix.Transpose(worldMatrix);
Matrix WorldViewProj = ViewMatrix * ProjectionMatrix * worldMatrix;
首先,我看到了这个问题:Incorrect Clipping and 3D Projection when using SlimDX
而且,可能,矩阵有问题(因为我既没有转换视图也没有投影但是转置世界 - 相反的情况下没有渲染任何东西)。但即使我将视图和投影矩阵都设置为单位矩阵,“洞”仍然存在。
请提前帮助和谢谢!
答案 0 :(得分:0)
发现了问题。它只是索引缓冲区中顶点的错误顺序。对我感到羞耻:)谢谢大家的帮助!