[XNA]Rotation und Translation eines Kreises
Verfasst: 07.06.2011, 01:39
Hiho,
ich bin ziemlich neu in der Materie und stehe grade vor einem problem was ich leider nicht lösen kann :).
Ich habe einen Kreis aus Punkten definiert und die sehen so aus:
Dazu habe ich einen BasicEffect, wobei die "Rotation" ein Vektor ist, mit dem man die Szene mit Hilfe der Maus rotieren aknn und das funktioniert auch soweit:
So nun wird dieser Kreis in einer anderen Klasse definiert und ich möchte dort aber nicht einen Kreis drinne haben sondern mehrere um daraus einen Torus aufzubaun. Die Idee ist nun diesen Kreis zu nehmen ihn um PI/2 um die y-Achse zu rotieren und dann um den Radius des Torus in Z Richtung zu verschieben. Als Draw Methode für den Torus habe ich derzeit:
wobei die Base.Draw(fx) aus der Elternklasse im Prinzip nur mit dem übergebenen Effekt den spezifizierten Kreis malt (Schlecht ausgedrückt ich hoffe ihr wisst was ich meine)
so das problem ist nun, dass es irgendwie nicht in Z-Richtung rausbewegt wird sondern in x-Richtung. Das Problem ist nun, dass ich bedingt durch die Aufgabenstellung eigentlich nurnoch die Drawmethode verändern kann. Kopiert hab ichs übrigens, weil ich denke, dass ich den Basiseffect irgendwie nochmal brauche, da ich ja als erstes den Kreis aus dem Torus male, auf den man direkt draufguckt und ich ja irgendwann die Vershciebungsrichtung auf der Z-Achse verändern muss.
So ich hoffe ihr versteht mein problem und es ist nicht zu wirr :P Ich bin mir sicher, dass das mit dem Torus auch einfacher geht aber ich würde das problem trotzdem auch gerne auf die Art lösen, denn kann ja nicht schaden zu Wissen wies auf die Art geht :)
mfg
ich bin ziemlich neu in der Materie und stehe grade vor einem problem was ich leider nicht lösen kann :).
Ich habe einen Kreis aus Punkten definiert und die sehen so aus:
Code: Alles auswählen
for (short i = 0; i < 37; i ++)
{
indices[i] = i;
vertexList[i] = new VertexPositionNormalTexture(
new Vector3(innerRadius * (float)Math.Cos(MathHelper.ToDegrees(i * 10)), innerRadius * (float)Math.Sin(MathHelper.ToDegrees(i * 10)), 0), -Vector3.UnitZ, new Vector2(1, 1));
System.Console.WriteLine(vertexList[i]);
}
Code: Alles auswählen
basicEffect.World = Matrix.CreateRotationX(Rotation.X) * Matrix.CreateRotationY(Rotation.Y);
basicEffect.View = Matrix.CreateLookAt(new Vector3(0, 0, 5), new Vector3(0, 0,0), Vector3.Up);
basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f);
Code: Alles auswählen
public void Draw(BasicEffect effect)
{
BasicEffect fx;
fx = (BasicEffect)effect.Clone(effect.GraphicsDevice);
Matrix transform = Matrix.CreateTranslation((innerRadius + outerRadius) / rings, 0, innerRadius+outerRadius);
fx.World *= transform;
fx.World *= Matrix.CreateRotationY((float)Math.PI/2);
for (int i = 0; i < 1; i++)
{
base.Draw(fx);
}
}
so das problem ist nun, dass es irgendwie nicht in Z-Richtung rausbewegt wird sondern in x-Richtung. Das Problem ist nun, dass ich bedingt durch die Aufgabenstellung eigentlich nurnoch die Drawmethode verändern kann. Kopiert hab ichs übrigens, weil ich denke, dass ich den Basiseffect irgendwie nochmal brauche, da ich ja als erstes den Kreis aus dem Torus male, auf den man direkt draufguckt und ich ja irgendwann die Vershciebungsrichtung auf der Z-Achse verändern muss.
So ich hoffe ihr versteht mein problem und es ist nicht zu wirr :P Ich bin mir sicher, dass das mit dem Torus auch einfacher geht aber ich würde das problem trotzdem auch gerne auf die Art lösen, denn kann ja nicht schaden zu Wissen wies auf die Art geht :)
mfg