Я новичок в программировании и программировании игр. Я читал кое-что о векторах и математике, но у меня есть вопрос - где я могу использовать векторы в программировании игр? Может быть, кто-нибудь может привести простой пример, где вы используете векторы (в 2D)?
Я нашел примеры, но в основном они находятся в консоли, где они выводят числа, и большие примеры, которые я не понимаю.
class Star
здесьPoint2D
использоватьсяclass ResizeRectangle
Ответы:
Какие векторы?
Векторы - это наборы координат различного размера. Каждая координата в векторе представляет некоторую абсолютную позицию в том направлении пространства, в котором находится вектор.
Обратите внимание, что во всех случаях мы присваивали значения векторам нашей задачи. Хотя вы обычно найдете векторы, используемые для геометрии в играх, нет причин, по которым вы не можете делать с ними что-то еще.
Почему я использую векторы?
Во-первых, вам никогда не придется использовать векторы. Пока вы отслеживаете x и y или любые другие координаты, которые вас интересуют, в некотором смысле вы в порядке.
Однако преимущество использования векторов заключается в том, что они аккуратно представляют такие вещи, как направление и положение, а также имеют несколько математических операций, которые облегчают вашу жизнь.
Для простого примера рассмотрим точечное произведение .
Предположим, у вас есть радарная система в стиле сверху вниз. Каждый враг, который появляется в секторе радара (какой-то клиновидный клин в 2D), должен получить маленькую красную точку на вашем экране. Итак, вам нужно выяснить, какие враги в вашем разделе радара.
Вы можете проверить, находятся ли враги внутри треугольника. Вы также можете проверить, содержатся ли враги на пересечении двух полупространств плоскостей / линий, определяющих две стороны сектора радара.
Или вы можете просто использовать точечный продукт для проверки. Вот как:
Это очень удобно, а также позволяет вам легко иметь радары, которые указывают в разных направлениях (просто измените прямой вектор) и имеют разную ширину (просто измените угол ширины радара) - и вы можете повторно использовать один и тот же код для этих случаев !
Почему еще я использую векторы?
Если вы находитесь в 2D, возможно, лучший способ достижения сложных эффектов и движений (вращение, масштабирование и т. Д.) - это использование графа сцены. У планеты есть орбитальный корабль, у корабля есть орбитальный дрон. Расчет для этого без использования векторной математики действительно, очень уродлив.
С векторной математикой мы представляем каждый как имеющий точку и матрицу преобразования 3x3. Планета использует свое преобразование, корабль использует свое преобразование и преобразование планеты, а дрон использует свое преобразование и преобразование корабля и преобразование планеты.
Когда планета движется, вы меняете ее трансформацию, и корабль и дрон автоматически позиционируются «бесплатно». Гораздо чище код.
Все еще не убежден. Векторы также являются родным представлением для положения, геометрии и движения, используемым почти во всех графических библиотеках - и, конечно, OpenGL и DirectX. Вы вряд ли уйдете без использования их.
Заключение Векторы - это мощный инструмент для написания понятного кода, который решает геометрические проблемы чисто и элегантно.
источник
Пример 2D - это экранные координаты, он идентифицирует пиксель на экране и имеет x- и y-компоненту [x, y], т.е. левую верхнюю позицию экрана [0, 0]
Другой пример: представьте, что текст прокручивается от правой границы экрана к левой границе экрана. Теперь вам нужно определить скорость прокручиваемого текста в пикселях в секунду, т.е. [-20, 0], что означает, что текст прокручивается на 20 пикселей влево в секунду и никогда не меняет высоту.
Еще один более сложный пример: представьте себе 2D-игру, которая должна работать на разных разрешениях экрана 800x600, 1024x768 и т. Д. Это легко сделать, используя внутреннюю ширину экрана от 0,0 до 1,0 и высоту от 0,0 до 1,0, чтобы отделить игровую логику. от фактического разрешения экрана. Теперь, когда вы рисуете на экране, вы просто умножаете внутренний вектор на вектор разрешения:
обратите внимание, что все 3 переменные здесь являются двумерными векторами, они имеют x- и y-компоненту, то есть для этого internal_pos [0.5, 0.25]:
Таким образом, внутренняя позиция [0,5, 0,25] преобразуется в фактическую позицию экрана [400, 150].
Это был основной материал. Настоящим преимуществом векторов является приложение в линейной алгебре, где вы можете использовать матрицы для преобразования ваших вершин (поворота, масштабирования, зеркала и т. Д.), То есть, чтобы легко повернуть все ваше внутреннее положение на 90 градусов, или вам нужно поменять местами экран. позиция 0 сверху вниз, потому что сторонняя библиотека, которую вы используете, использует это соглашение.
источник
screen_pos = internal_pos * screen_resolution
является координатно-инвариантной, как вы ее написали, ее можно было бы более уместно записать , где есть линейное отображение (которое может быть записано как матрица, в данном случае диагональное).screen_pos = map_to_screen * internal_pos
map_to_screen
Вот отличное объяснение векторов в разработке игр в блоге Wolfire Games:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
источник
Вектор - это объект, который имеет значение и направление. Примеры векторов в реальном мире и основанные на физике игры включают в себя скорость и импульс. Свойства, которые имеют только значения, но не имеют направления, называются скалярами и включают местоположение, массу, плотность и так далее.
Векторы необходимы для игр, которые имитируют физические свойства, подобные вектору (как уже упоминалось - скорость, ускорение и т. Д.). Математика, которая используется для векторных вычислений, называется линейной алгеброй .
источник
Везде, где у вас есть число для каждого измерения, чтобы представить что-то, коллекция этих чисел может рассматриваться как вектор. Положение, скорость и ускорение являются основными примерами векторов. В некоторых случаях также может быть целесообразно представлять направление столкновения в виде вектора.
Для базовых вещей не имеет значения, считаете ли вы эти числа векторами, но если вы хотите заниматься какой-либо физикой, вам следует изучить векторную математику.
источник
Очень просто, что-нибудь с позицией или направлением, которое везде в игре, они используют векторы. Вектор как точка
Однако разница действительно сводится к этому. Точка - это просто точка, а вектор - стрелка.
если у вас есть
Вы говорите, что я имею в виду в этом месте х 5 и у 10.
Однако, когда вы объявляете вектор ...
Вы действительно говорите, что я объявляю стрелку от 0,0 до х 5, у 10;
у вас даже может быть точка, из которой ваш вектор указывает из какой-либо точки в пространстве, например, позволяет использовать точку и вектор для перемещения нашего объекта, мы будем использовать Point2 для хранения его местоположения и vector2 для его перемещения ,
Теперь вы можете использовать вектор, чтобы переместить эту точку, скажем, мы хотим переместить эту точку вверх по оси X на 10 единиц, чтобы вы имели
Теперь точка переместилась туда, куда указала ваша векторная стрелка.
точка сейчас
И последнее, на что следует обратить внимание: иногда вектор используется как точка, и наоборот, только потому, что он содержит данные одного типа.
источник
v = pos - origin
такv != pos
как origin является точкой{0, 0, 0, 1}