更新 2:现在看来,这更像是一个建模问题而不是编程问题。哎呀。
我是 XNA 开发的新手,尽管我有 C# 经验,但我已经被困在一个地方两天了。
情况:我在 3D Studio Max 2010 中创建了一个模型,它使用两种材质,都是 DirectX 着色器类型。模型无错误地导出到 FBX,Visual Studio 可以正确编译它。当我最初运行 Draw() 方法时,它在我的一个循环的“BasicEffect”部分引发了异常,表明(至少对我而言)它正在正确加载 .fx 文件,该文件必须嵌入到 FBX文件什么的。
问题:使用以下代码时
foreach (ModelMesh mesh in map.Meshes)
{
foreach (Effect effect in mesh.Effects)
{
effect.CurrentTechnique = effect.Techniques["DefaultTechnique"];
effect.Begin();
effect.Parameters["World"].SetValue(Matrix.CreateTranslation(Vector3.Zero));
effect.Parameters["View"].SetValue(ActiveCamera.ViewMatrix);
effect.Parameters["Projection"].SetValue(ActiveCamera.ProjectionMatrix);
effect.Parameters["WorldViewProj"].SetValue(Matrix.Identity * ActiveCamera.ProjectionMatrix);
effect.Parameters["WorldView"].SetValue(Matrix.Identity * ActiveCamera.ViewMatrix);
foreach (EffectPass ep in effect.CurrentTechnique.Passes)
{
ep.Begin();
// something goes here?
ep.End();
}
effect.End();
}
mesh.Draw();
}
唯一发生的事情是出现一个覆盖屏幕下半部分的白框,无论相机位置或角度如何。我得到了在 Max 中指定的 default.fx 文件的效果参数的名称(它位于 [program files]\autodesk\3ds Max 2010\maps\fx)。
我觉得我错误地设置了其中一个或所有这些。我试图查找教程并遵循他们的代码,但似乎没有一个适用于我的模型。
有什么帮助或想法吗?
更新: 通过进行这些更改:
effect.Parameters["WorldViewProj"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix * Conductor.ActiveCamera.ProjectionMatrix);
effect.Parameters["WorldView"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix);
该模型能够绘制。然而,一切都是白色的:(