В настоящее время я работаю над созданием моей первой игры FPS с использованием JOGL. (Java-привязки для OpenGL).
До сих пор мне удавалось генерировать «мир» (серию кубов) и модель игрока. У меня обнаружение столкновений между игроком и кубами работает отлично.
Теперь я пытаюсь добавить оружие. Я правильно нарисовал модели оружия и загружаю их на модель игрока. Первый пистолет, который я пытаюсь реализовать, - это лазерный пистолет, который стреляет и мгновенный лазер прямой видимости во все, к чему вы стремитесь. Прежде чем приступить к реализации моделей противника, я бы хотел, чтобы обнаружение столкновений между лазером и работающими стенами.
Мой лазер, в настоящее время, нарисован рядом маленьких кубиков, один за другим. Первый куб вытягивается в конце оружия игроков, затем он непрерывно вытягивает оттуда. Идея состояла в том, чтобы продолжать рисовать кубы лазера, пока не будет обнаружено столкновение с чем-то, а именно с кубами в мире.
Я знаю расположение кубиков в мире. Проблема в том, что мне нужно вызвать glMatrixPush, чтобы нарисовать мою модель персонажа. Лазер затем рисуется в рамках этой модели. Это означает, что я потерял свою старую систему координат - поэтому я рисую мир в одной системе, а затем лазер в другой. В этой матрице игроков я несколько раз вызывал glRotate и glTranslate, чтобы синхронизировать все с тем, как вращается камера. Лазер затем строится путем перемещения вдоль оси Z этой новой системы.
Моя проблема заключается в том, что после всех этих преобразований у меня больше нет представления о том, где находится мой лазер в системе координат карты, в первую очередь из-за поворотов камеры.
Кто-нибудь знает метод - или есть идеи, как решить эту проблему? Я считаю, что мне нужен способ конвертировать новые координаты лазера в старые координаты карты, но я не уверен, что делать, чтобы отменить все преобразования, которые были сделаны с ним. Также может быть некоторая функциональность, предоставляемая OpenGL для решения такого рода проблем, о которых я просто не знаю.