我正在使用 OpenTK for OpenGL 和 monodevelop 为 C# ide 进行简单的太阳系模拟。进展顺利,我有行星围绕太阳运行,照明正常。当我想倾斜行星的轴时,问题就开始了;无论我在我的方法中放置新的旋转,它都不会明显旋转。一旦它使我的球体的发光面以某种方式围绕它旋转。如果我在使行星绕其轴旋转的旋转之前或之后进行旋转,行星顶部会奇怪地亮起,就好像法线被破坏了一样。
public void Display (float time)
{
GL.Rotate (axialTilt, tiltAxis); // This rotation causes the issues, no matter
// where I put it
GL.PushMatrix (); // This push/pop was added later, but it
// doesn't help
rotationalPosition += rotationSpeed * time;
GL.Rotate (rotationalPosition, Vector3.UnitZ);
planet.Draw ();
GL.PopMatrix ();
if (ring != null) {
ring.Draw ();
}
if (moons != null) {
foreach (Orbit o in moons) {
o.Draw (time);
}
}
}
这被称为:
public void Draw (float time)
{
GL.PushMatrix ();
GL.Rotate (angle, orientation); // This will allow an angled axis for
// moons and other planetary orbits.
orbitPosition += orbitSpeed * time;
GL.Rotate (orbitPosition, Vector3.UnitZ);
GL.Translate (orbitDistance, 0, 0);
GL.Rotate (-orbitPosition, Vector3.UnitZ); // Rotate backward, so rotating around
// the orbit axis doesn't rotate the
// planet.
orbitingBody.Display (time);
GL.PopMatrix ();
}
因此,这很奇怪。这里没有什么应该引起法线问题,而且倾斜似乎在正确的位置。