[XNA]Rotation und Translation eines Kreises

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
XeZZ
Beiträge: 1
Registriert: 07.06.2011, 01:08

[XNA]Rotation und Translation eines Kreises

Beitrag von XeZZ »

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:

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]);
            }
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:

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);
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:

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);

            }
        }
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
Antworten