Я хочу получить вектор Collide вектора с использованием Up-Vector.C# Direct X 9.0c - Mesh Intersect
У меня есть положение и вверх вектор .. с этой будке я вычислить дальний вектор
public Vector3 SetPlayerToGround(Matrix Object, Matrix Player, Mesh GroundObject)
{
Vector3 IntersectVector = new Vector3(0, 0, 0);
if (GroundObject != null)
{
Vector3 Player_UP = new Vector3(Player.M12, Player.M22, Player.M32);
Vector3 PlayerPos = new Vector3(Player.M14, Player.M24, Player.M34);
Vector3 PlayerPos_Far = PlayerPos - Player_UP ;
gameengine.m_Device.Transform.World = Object;
IntersectInformation closestIntersection;
if (GroundObject.Intersect(PlayerPos, PlayerPos_Far, out closestIntersection))
{
IntersectVector = Player_UP + (PlayerPos_Far * closestIntersection.Dist);
}
}
return IntersectVector;
}
Ну, если я сделать
Vector3 PlayerPos_Far = PlayerPos + Player_UP;
Он всегда будет пересекаться ни с чем ... Но объект, который я хочу пересечь, всегда находится под «позицией - UpVector»
поэтому я думаю
Vector3 PlayerPos_Far = PlayerPos - Player_UP ;
является Rigth
почему я не могу пересекаться?
Вот лучше Описание:
Image of a Scene where i need the Intersect
Вот игрок, и он в корабль. Игрок всегда на 0,0,0, потому что я перемещаю мир вокруг игрока. if i Перемещение игрока вперед i Шанс векторной позиции игрока, который имеет шанс только на позиции всех других объектов. Но я думаю, что игрок не имеет ничего общего с Интерсект .. но сам корабль. Я использую позицию 0,0,0 и верхний указатель в качестве направления для получения пересекающегося вектора земли с корабля. Матрица корабль (Matrix Object):
Vector3 com = ship.position - gamemanager.player.position;
Matrix world;
world = Matrix.Identity * Matrix.Scaling(0.001f, 0.001f, 0.001f) * Matrix.Translation(com);
m_Device.Transform.World = world;
я судимое что-то и я думаю, что он обыкновение использовать мой перевод Матрицу корабля ...
хорошо и означает я должен принимать только player_up в направлении .. как это: если (GroundObject.Intersect (PlayerPos, Player_UP, из closestIntersection)). но я не разбираюсь в претрансформации. Может, дайте мне пример? – ZeraTFK
см. Отредактированный ответ –
Спасибо, много работает! После Intersect мне пришлось снова преобразовать IntersectVector с помощью обычного объекта Matrix: IntersectVector = Vector3.TransformCoordinate (IntersectVector, Object); – ZeraTFK