Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XNA中的变换矩阵_C#_Xna_Transform_Matrix Multiplication - Fatal编程技术网

C# XNA中的变换矩阵

C# XNA中的变换矩阵,c#,xna,transform,matrix-multiplication,C#,Xna,Transform,Matrix Multiplication,好吧,我有点被难住了。我正在做一个2D游戏,游戏中有行星围绕其他天体运行,并且也沿着它们的轴旋转。我决定使用矩阵,因为我讨厌用其他方法制作的东西有多笨重。现在的问题是,我希望能够专注于表面的某个部分,并能够跟踪它。以下是迄今为止的代码: Planet.UpdateMatrix(): 我希望能够设置一个世界变换,让它画得漂亮,居中,旋转等等 图片: 谁能帮我一下吗?有可能吗 更新:我现在有一个特定的行星跟踪工作,但系统中的其他行星没有相应的变化 例如,假设我从太阳跟踪下一颗行星,视图跟踪表面,但太

好吧,我有点被难住了。我正在做一个2D游戏,游戏中有行星围绕其他天体运行,并且也沿着它们的轴旋转。我决定使用矩阵,因为我讨厌用其他方法制作的东西有多笨重。现在的问题是,我希望能够专注于表面的某个部分,并能够跟踪它。以下是迄今为止的代码:

Planet.UpdateMatrix():

我希望能够设置一个世界变换,让它画得漂亮,居中,旋转等等

图片: 谁能帮我一下吗?有可能吗

更新:我现在有一个特定的行星跟踪工作,但系统中的其他行星没有相应的变化

例如,假设我从太阳跟踪下一颗行星,视图跟踪表面,但太阳保持静止(从技术上讲,应该围绕行星旋转,以模拟行星仍然沿着其自身的轴和绕恒星旋转)

同样,如果我尝试应用旋转,比如以特定角度跟踪行星的表面,所有其他行星都会沿着自己的轴旋转,而不是围绕我跟踪的行星旋转

新代码:

view.World = Matrix.Invert(TargetPlanet.TotalTransform *
    Matrix.CreateRotationY(MathHelper.ToRadians((float)SurfaceOffset)));

所以你想设置行星的
总变换的倒数
?嗯。它很好地跟踪了行星,但假设我跟踪行星2,行星的起源行星(即太阳)不移动(如果我们跟踪表面,它应该移动)…然后你可以尝试
效果。世界=总变换*视图。世界
,现在行星在移动,但视图没有跟踪它。脸掌:P
/// <summary>
/// Draws this planet
/// </summary>
/// <param name="device">The graphics device to draw with</param>
/// <param name="view">The ViewParameters to use</param>
public void Draw(GraphicsDevice device, ViewParamaters view)
{
    effect.View = view.View;
    effect.Projection = view.Projection;
    effect.World = view.World  *  TotalTransform; //TotalTransform is rotation * translation

    draw stuff...
//Handle surface tracking
if (TrackSurface)
{
    view.World = ???;
}
view.World = Matrix.Invert(TargetPlanet.TotalTransform *
    Matrix.CreateRotationY(MathHelper.ToRadians((float)SurfaceOffset)));