
«ECS — like» вектор на с++
Desertoad 12 часов назад «ECS — like» вектор на с++ Уровень сложности Простой Время на прочтение 13 мин Охват и читатели 8.9K 3D-графика * C++ * Проектирование API * Кейс Из песочницы В программировании частая задача...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Desertoad 12 часов назад «ECS — like» вектор на с++ Уровень сложности Простой Время на прочтение 13 мин Охват и читатели 8. 9K 3D-графика * C++ * Проектирование API * Кейс Из песочницы В программировании частая задача это работа с последовательными элементами. В этой, порой непростой задаче, нам часто помогают вектора.
Вектора бывают самыми разными от queue и set до unordered_map и обычных массивов. Все они позволяют работать с данными по разному, где то быстрее вставка, где то быстрее доступ, но все они выполняют одну важную задачу это хранение данных. И не смотря на их всеобъемлющую вариативность, в жизни встречаются ситуации когда один вектор не может решить задачу.
Технические детали
Точнее может, но через костыли... мальчик пнул мяч Странная на первый взгляд картинка, не о чем. Как она связана со статьей?
Я вставил ее с одной целью, я хочу чтобы вы ответили на вопрос: что вы можете сказать о мяче? значит у него есть позиция в каждый момент времени график высоты мяча от времени однако у него также имеется скорость, ускорение, и прочие параметры, которые приходится хранить для каждого момента времени, если объект, тело или прочее имеет что имеет дискретный характер. И ладно если использовать сохраненные данные один раз, использовать их очень редко, и вообще их никак не модифицировать, то в целом можно обойтись парой векторов.
Однако когда речь заходит о прямой и частой работе с такими данными появляются сложности. Надо следить за синхронным состоянием данных: std::vector pos; std::vector velocity; std::vector time; // Удаляем пятую точку из pos... и забыли удалить этот элемент из velocity и time // Данные рассинхронизированы = баги за типобезопасным доступом std::vector pos; std::vector velocity; // Что хранится в 3-м векторе?
Отраслевые последствия
velocity = glm::vec4(1. 0f); // Ок, а что это за индекс 5? за соответствием ответственности: class GameObject { glm::vec3 position; // есть всегда glm::vec3 velocity; // есть у всего?
Light light; // неужто все объекты могут светиться? }; //лишнии потраченные ресурсы На самом деле, что-то из этого можно решить упорством, жертвами, однако есть ресурс который гораздо важнее всего — время. Собственно начну с причины, которая заставила меня этим заняться.
Условно представим вертекс (вертекс - точка в пространстве, в графике — контейнер атрибутов, что не мешает ему хранить позицию подстать обыкновенной точке с позицией). У него есть атрибуты, основной — позиция. Теперь заглянем чуть дальше, вертексы привязаны к основному объекту в графике — к сеткам.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





