Наша команда и я пытались отобразить наше оружие на экране в течение недели, без успеха: нам действительно нужна помощь в этом. То, что мы хотели бы получить, это, как и в каждом FPS, отображение оружия с небольшим горизонтальным смещением на экране, как будто игрок держал его.Оружие от первого лица
Мы уже пытались использовать матрицу, но безуспешно: оружие даже не видно, оно, кажется, позади, и даже если мы попытаемся немного сыграть со значениями, мы не сможем его получить работает должным образом.
Мы знаем, что нам нужно использовать поворот камеры, а также ее положение, но мы не можем понять формулу, чтобы получить матрицу мира оружия.
То, что у нас есть, положение камеры как Vector3, поворот камеры как Vector3 тоже, при этом координата y является горизонтальным вращением между pi и -pi, а x - вертикальным вращением. Оружие масштабируется на 0.1f. Что нам делать?
Большое спасибо за помощь.
EDIT: Вот код по отношению к моей проблеме:
public void Update()
{
weapon.Rotation = ThisPlayer.Rotation;
weapon.WorldMatrix = WeaponWorldMatrix(
ThisPlayer.Position,
ThisPlayer.Rotation.Y,
ThisPlayer.Rotation.X
);
}
private Matrix WeaponWorldMatrix(Vector3 Position, float updown, float leftright)
{
Vector3 xAxis;
Vector3 yAxis;
xAxis.X = SceneManager.Game.Camera.View.M11;
xAxis.Y = SceneManager.Game.Camera.View.M21;
xAxis.Z = SceneManager.Game.Camera.View.M31;
yAxis.X = SceneManager.Game.Camera.View.M12;
yAxis.Y = SceneManager.Game.Camera.View.M22;
yAxis.Z = SceneManager.Game.Camera.View.M32;
Position += new Vector3(1, 0, 0)/5; //How far infront of the camera The gun will be
Position += xAxis * 1f; //X axis offset
Position += -yAxis * 0.5f; //Y axis offset
SceneManager.Game.DebugScreen.Debug(Position.ToString());
return Matrix.CreateScale(0.1f) //Size of the Gun
* Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(5), 0, 0) //Rotation offset
* Matrix.CreateRotationX(updown)
* Matrix.CreateRotationY(leftright)
* Matrix.CreateTranslation(Position);
}
Не могли бы вы выслать соответствующий код? – davidsbro
Я только что опубликовал образец нашего кода. Второй метод найден на google, но мы не можем найти, как заставить его работать. Спасибо вам большое за ваш ответ. –