Planet.UpdateMatrix():
/// <summary>
/// Updates the transformation matrix
/// </summary>
private void UpdateMatrix()
{
rotation = Matrix.CreateRotationY((float)(state.PlanetAngle * (Math.PI / 180D)));
if (settings.OrbitPlanet == null)
{
transform =
Matrix.CreateTranslation(
new Vector3(
(float)extraMath.lengthdir_x(state.OrbitAngle * (Math.PI / 180D), settings.OrbitDistance),
(float)0,
(float)extraMath.lengthdir_y(state.OrbitAngle * (Math.PI / 180D), settings.OrbitDistance)
));
}
else
{
transform =
Matrix.CreateTranslation(
new Vector3(
(float)extraMath.lengthdir_x(state.OrbitAngle * (Math.PI / 180D), settings.OrbitDistance),
(float)0,
(float)extraMath.lengthdir_y(state.OrbitAngle * (Math.PI / 180D), settings.OrbitDistance)
))
* settings.OrbitPlanet.Transform;
}
}
和Planet.Draw:
/// <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...
但我需要的是Game.Update:
//Handle surface tracking
if (TrackSurface)
{
view.World = ???;
}
我希望能够设置一个世界变换,让它画出所有漂亮,居中和旋转等等。
照片管理: 任何人都可以帮我一把吗?它甚至可能吗?
更新:我现在让行星跟踪为特定行星工作,但系统中的其他行星不会相应地改变。
例如,假设我从太阳跟踪下一个行星,视图跟踪表面,但是太阳保持静止(应该在技术上绕行星旋转以模拟行星仍然沿着它自己的轴和轨道恒星转动)
同样,如果我尝试应用旋转,例如以特定角度跟踪行星表面,所有其他行星都会沿着自己的轴旋转,而不是围绕我正在追踪的行星。
新守则:
view.World = Matrix.Invert(TargetPlanet.TotalTransform *
Matrix.CreateRotationY(MathHelper.ToRadians((float)SurfaceOffset)));