[C# Directx SDK]

Zera Kakkade

Grünschnabel
[C# Directx SDK] - Kamera Example

Hallo,

ich wollte mich mal an einem kleinen Raumschiffspiel üben und habe schon das erste Problem.
Es geht hierbei um die Kamera.
Noch habe ich kein Raumschiff sondern nur eine Kamera mit der man sich durchs all bewegen kann.

ich habe hier die Funktion mit der ich die Kamera Rendere

Code:
public void SetKammere()
        {
            m_Device.Transform.World = Matrix.Identity;
            m_Device.Transform.View = Matrix.LookAtLH(new Vector3(WorldInformation.xWorldPos, WorldInformation.yWorldPos, -5.0f + WorldInformation.zWorldPos),
                new Vector3(WorldInformation.xWorldPos, WorldInformation.yWorldPos, WorldInformation.zWorldPos),
                new Vector3(0.0f, 1.0f, 0.0f)) * Matrix.RotationYawPitchRoll(WorldInformation.fAngleX, WorldInformation.fAngleY, 0.0f);
            m_Device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, GetAufloesung, 1.0f, 250.0f);

           // m_Device.Transform.World.RotateY(WorldInformation.fAngle);
        }

und hier eine mit der ich die Kamera steuere (umsehen und auf der z und x achse bewegen)

Code:
public void MoveForward()
        {
            float ZAchse = 1;
            float XAchse = 1;

            //neue Variablen zum rechnen mit den zwei winkeln x und y
            float neuXWinkelOld = Geometry.RadianToDegree(WorldInformation.fAngleX);
            float neuYWinkelOld = Geometry.RadianToDegree(WorldInformation.fAngleY);
            float neuXWinkel = neuXWinkelOld;
            float neuYWinkel = neuYWinkelOld;
            float neuYWinkelZAchseOld = neuXWinkelOld + 90;
            if (neuYWinkelZAchseOld > 180)
                neuYWinkelZAchseOld -= 360;
            float neuYWinkelZAchse = neuYWinkelZAchseOld;

            //zurechtlegen der Achsen

            //für ZAchse
            if (neuXWinkel < 0)
                neuXWinkel *= -1;
            if (neuYWinkel < 0)
                neuYWinkel *= -1;

            if (neuXWinkel > 90)
                neuXWinkel -= 90;
            if (neuYWinkel > 90)
                neuYWinkel -= 90;
            //für XAchse

            if (neuYWinkelZAchse < 0)
                neuYWinkelZAchse *= -1;

            if (neuYWinkelZAchse > 90)
                neuYWinkelZAchse -= 90;



            float xProzent = neuXWinkel * 100 / 90;
            float yProzent = neuYWinkel * 100 / 90;
            float yProzentXAchse = neuYWinkelZAchse * 100 / 90;


            ZAchse -= ZAchse / 100 * xProzent;
            ZAchse -= ZAchse / 100 * yProzent;
            XAchse -= XAchse / 100 * xProzent;
            XAchse -= xProzent / 100 * yProzentXAchse;

            if (neuXWinkelOld > 90 || neuXWinkelOld < -90)
            {
                ZAchse -= 1;
            }

            if (neuYWinkelZAchseOld > 90 || neuYWinkelZAchseOld < -90)
            {
                XAchse -= 1;
            }
            

            WorldInformation.zWorldPos += ZAchse;
            WorldInformation.xWorldPos += XAchse;
            
        }


umsehen mit der Kamera

Code:
if (Eingabe.MouseButtons[1] != 0)
            {
                WorldInformation.fAngleX -= Eingabe.xMouseMovement / 100;
                WorldInformation.fAngleY -= Eingabe.yMouseMovement / 100;

                if (Geometry.RadianToDegree(WorldInformation.fAngleX) > 180)
                    WorldInformation.fAngleX = Geometry.DegreeToRadian(-180);
                if (Geometry.RadianToDegree(WorldInformation.fAngleX) < -180)
                    WorldInformation.fAngleX = Geometry.DegreeToRadian(180);


                if (Geometry.RadianToDegree(WorldInformation.fAngleY) > 180)
                    WorldInformation.fAngleY = Geometry.DegreeToRadian(-180);
                if (Geometry.RadianToDegree(WorldInformation.fAngleY) < -180)
                    WorldInformation.fAngleY = Geometry.DegreeToRadian(180);
}

Das umsehen klappe hab wegs solange ich mich nicht von der position bewegt habe.. doch nun wenn ich mich fortbewege stimmt die z rotation welche ich ja auch nicht gemacht habe weil ich der meinung bin das diese nicht benötigt wird weggelassen habe.



So nur ich steuer in die komplett falsche richtung.
kann mir jemand schritt für schritt erklären wie ich eine richtige kamera führung durchs all erstellen kann?

Wäre sehr nett :)
Danke schon mal leute :D
 
Zuletzt bearbeitet:
Zurück