【问题标题】:Mesh.Effects input XNAMesh.Effects 输入 XNA
【发布时间】:2012-12-29 13:24:11
【问题描述】:

我不太明白 effect.World 和 effect.View 等是什么以及为什么我们将矩阵放入其中?

foreach (ModelMesh mesh in model1.Meshes)
        {
            foreach (BasicEffect effect in mesh.Effects)
            {
                effect.World = Matrix.CreateWorld(Vector3.Zero, Vector3.Forward, Vector3.Up);
                effect.View = Matrix.CreateLookAt(Vector3.Zero, Vector3.Zero, Vector3.Up);
            }
        }

【问题讨论】:

    标签: c# .net matrix xna


    【解决方案1】:

    effect.World 不是代表世界的矩阵。它是一个矩阵,表示 3d 对象(网格、模型)相对于 3d 游戏世界的位置和方向。每个对象都会有不同的效果。如果它们的位置不同和/或指向不同,则世界矩阵。

    effect.View 是一个矩阵,表示(以倒置形式)相机相对于同一个 3d 游戏世界的位置和方向。大多数时候,只有一个摄像头,但可以有更多(例如,后视镜将拥有自己的视图矩阵,而不是显示赛车游戏挡风玻璃视图的主屏幕)。

    1. 模型的顶点很难对局部空间进行建模。
    2. 然后 effect.World 将它们转换为游戏世界空间。
    3. 然后 effect.View 将它们转换为相机空间。
    4. 然后 effect.Projection 将它们转换为 2d 屏幕空间和“volia”,您的像素着色器知道在哪里绘制什么。

    【讨论】:

    • 所以对于游戏中的每个模型(假设每个模型都放置在不同的位置)我应该创建自己的矩阵来代表它的位置?
    • 是的,它的位置和方向(旋转)在同一个矩阵中表示。这个矩阵被传递给 effect.World。即使放置在同一个位置,最好为每个模型提供自己的矩阵。
    • 谢谢!在一个不相关的主题中,Vector3.Transform 是什么以及它是如何工作的?
    【解决方案2】:

    来自 MSDN;

    BasicEffect.World

    获取或设置世界矩阵。 使用这个矩阵来改变位置 模型,使用世界坐标。

    BasicEffect.View

    获取或设置视图矩阵。 使用这个矩阵来改变位置 和相机的方向。

    我认为粗线可以解释它们的区别。我还发现了一些有用的文章;

    【讨论】:

    • 但是这个矩阵不应该是游戏本身的通用矩阵吗?我的意思是,任何模型怎么可能有不同的相机位置和方向?应该只有 1 个摄像头和 1 个世界吧?
    • 我不是 XNA 开发人员,但可能有很多相机?为什么不同意相机数量?
    • 你怎么能同时看到多个东西?我仍然不明白这一点,您将游戏的世界、视图和投影应用于每个效果,以“告诉”模型应该在哪里以及如何表示他?如果我错了,请纠正我,但是我们例如通过为每个模型创建自己的世界矩阵来移动模型,并创建对其矩阵的转换?如果是这样,那么如果游戏中的每个模型都没有实际世界但有很多世界,为什么我们称它为“世界”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多