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
und hier eine mit der ich die Kamera steuere (umsehen und auf der z und x achse bewegen)
umsehen mit der Kamera
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
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

Zuletzt bearbeitet: