Войти
ПрограммированиеФорумОбщее

ZenGL Update (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#165
(Правка: 3:11) 2:27, 29 июня 2022

ArtProg
Я не встречал, если только Mirrel вдруг не реализовал:)
Конечно, педивикия любит нагнать тумана чтобы сбить с толку и примеры дать только на плюсах, и писать не на людском языке, а на языке каких-то алкогольных мутантов в режиме сепуляции. По факту в массивах имеем избыточную бурду для нужд неназванной процедуры на не названном ЯП, а в статье про это ни слова. И при этом количество столбцов вообще нигде не указано - с правого края может быть хоть миллиард пустых.
Заинтриговал ты меня этим г. форматом данных (намного проще было просто x и y координаты в массивы писать, или запирающий 0 не писать, если так важно сократить объём байтов) Или просто зиповать большие матрицы.
Счас набросаю примерчик:

+ Показать
#166
2:31, 29 июня 2022

MrShoor
Это же 2Д для не очень больших миров, тут про такие количества эмиттеров даже сам изначальный автор движка мечт не излагал. Здесь главное чтобы красивые картинки впихнуть, а с этим особых проблем нет. Как говорил Андру: тебе нужен другой движок:)

#167
4:13, 29 июня 2022

MrShoor
> Дай угадаю, на 1000 эммитерах всё загнется насмерть?
если он сделает не через прорисовку, то жить будет.

#168
(Правка: 7:35) 6:54, 29 июня 2022

  Skvoznjak, да, спасибо за код(улыбнули названия идентификаторов)). Правда у себя реализовал по-другому: хранятся лишь смещения между элементами и началом в строке и для каждой строки количество элементов у них. Выгоднее тем, что не нужно хранить вторую компоненту y, плюс если маршировать сканлайнами по таким сжатым массивам, то нужно всего лишь каждый раз инкрементировать нужные указатели вместо дополнительного умножения на y([x,y]:=x+y*bmp_width). Причем выбирать формат CSR/CSC нужно в зависимости от того каким способом осуществляется пробег по пикселям - по строкам или столбцам соответственно(поскольку обычно в мониторах горизонтальная развертка, то и логичнее сделать выбор за CSR).
  Сам формат CS(Compressed Sparse) довольно любопытный, но реализовать обработку данных в таком формате задача та еще(то и дело будете как Джек Воробей натыкаться на подводные камни). Сложность реализации аффинных преобразований по возрастанию: отдельно масштабирование, отдельно поворот, масштабирование и поворот одновременно. Клиппинг или нетривиальные для такого формата эффекты вроде горизонтального градиента(если говорить о CSR) это вобще отдельная песня).
  Теоретически обработка CS-изображения поддается распараллеливанию. ZenGL, насколько я понял, базируется на OpenGL, поэтому и интересовался хардварной реализацией(софтварная без многопоточки у меня уже готова примерно на четверть). Кстати, было бы интересно имплементировать растеризацию треугольников/полигонов таким методом. И тогда не было бы нужды артистам заниматься маразмом и экономить пространство на текстуре(что-то подобное используется в диснеевском Ptex-е, но в играх оно вроде как неприменимо пока что).
  P.S.0. Пустые строки можно также перескакивать, храня смещения во вертикали между непустыми. Не помню уже по какой причине отказался от использования данного способа.
  P.S.1. Мог бы еще много говорить на эту тему, но обсуждение уже будет выходить за рамки данного топика.

#169
10:43, 29 июня 2022

ArtProg, если ты взглянешь как реализована загрузка и работа с текстурами, то вполне возможно ты свой способ сможешь реализовать и применить для себя в ZenGL.
zgl_textures - основной файл, и как производится реализация можно посмотреть для определённых расширений в zgl_textures_png, zgl_textures_jpg и других.

#170
21:45, 29 июня 2022

  Mirrel Как-то надо будет попробовать, но на это уйдет немало времени(несколько месяцев точно). Без Вашей помощи скорее всего никак не обойтись(в OpenGL я нуб, а уж в ZenGL тем более).

#171
23:31, 29 июня 2022

ArtProg, в ZenGL не обязательно знать OpenGL (единственно, это будет "устаревший" OpenGL, под шейдеры я пока не переделывал, только создал возможность ими пользоваться). В нём есть примитивы основные и загрузки текстур разных форматов.
Если известен способ загрузки определённого формата графических данных и работы с этими данными, то сложности присоединить этот формат к ZenGL не будет. Остальное он сделает автоматически.

Можно данный формат и присоединить. Но ZenGL идёт под свободной лицензией ZLib. И если это тебя устроит, то можно будет добавить данный формат.

Но немного позже, я сейчас немного занят. На следующей неделе можно будет посмотреть.

#172
23:55, 29 июня 2022

Mirrel>Можно данный формат и присоединить. Но ZenGL идёт под свободной лицензией ZLib. И если это тебя устроит, то можно будет добавить данный формат.
  Я только за. Могу даже помочь с этой нелегкой задачей. Будет по крайней мере без преобразований поворота и масштабирования. Клиппинг для обычного случая уже есть, градиенты в разработке(есть небольшой набросок по масштабированию и совсем немного тестов для поворота CSR-спрайта). Ну, а потом надеюсь и остальное подтянется.
Mirrel>Но немного позже, я сейчас немного занят. На следующей неделе можно будет посмотреть.
  Ok.

#173
(Правка: 16:52) 16:45, 5 июля 2022

ArtProg
есть уже что-то готовое по данному формату?

И где вообще применяется. Желательно пример.

#174
(Правка: 20:23) 20:19, 5 июля 2022

  Привет! Конечно есть. Куча процедур по компрессии-декомпрессии и отрисовки изображений в CS- формате(далее буду говорить исключительно о его построчной вариации, а именно CSR или Compressed Sparse Row).
  Что интересно, подобные структуры данных широко используются в прикладных областях, а вот в геймдеве что-то почти и не встречал. Из тех применений, которые мне удалось открыть для себя это быстрые операции над сплайнами, в том числе очень экономное и скорее алгоритмически предельно быстрое выделение точек и прилегающих линий, без перерисовки всех точек/линий сплайна.
  Второе применение это конечно же отрисовка самих спрайтов. Так, для достаточно разреженных спрайтов отрисовка происходит намного быстрее, если хранить спрайт как CSR-изображение.
  Еще стоит отметить, что такие изображения просто идеально подходят для тайловых карт(Tilemap). И таким образом можно рисовать огромные миры, тратя на это минимим вычислительных ресурсов(как по памяти так и по скорости).
  Ну и как некоторе приложение к отрисовке спрайтов можно еще упомянуть про почти халявный контурный анти-алиасинг. И это из того, что навскидку удалось вспомнить.
  Как уже отмечал ранее, проблема при реализации может возникнуть только с основными преобразованиями на плоскости(масштабирование, поворот), ну и с контурным анти-алиасингом придется заморочится конкретно, так что работу с данным форматом отнюдь нельзя назвать легкой. Но думаю, оно того стоит.
  Также, если интересно более подробно посмотреть имплементацию алгоритмов для данного типа структур, то можете заглянуть в репозиторий моего собственного 2D-движка. Там есть много готовых процедур(а по сути немаленький такой класс с нужными данными и методами).

#175
20:52, 5 июля 2022

ArtProg
мне нужен пример использования. Мне надо знать, это будет считаться графикой или это будет считаться данными?!
Что конкретно мы будем загружать. Если это данные или графика определённого формата (в данном случае CSR) то я должен для себя определить, как я буду с этими данными работать.
Опять же - если это графика, то прицепить к графической составляющей ZenGL, загружать как текстуру, об остальном можно вообще не беспокоится и просто работать с графикой.
Если это данные (файл данных), и его надо будет загружать/изменять/сохранять, то это не будет относится к графике. И надо будет как-то соотнести это с графической составляющей движка, чтобы можно было использовать данные как графику.

ArtProg
> Также, если интересно более подробно посмотреть имплементацию алгоритмов для
> данного типа структур, то можете заглянуть в репозиторий моего собственного
> 2D-движка. Там есть много готовых процедур(а по сути немаленький такой класс с
> нужными данными и методами).
куда посмотреть? ))) На гите?

#176
(Правка: 21:22) 21:16, 5 июля 2022

  Mirrel
  >куда посмотреть? ))) На гите?
  Если вкратце, то сам формат описывается несколькими массивами:
1. Одномерный массив типа array of longword, содержащий цвет каждого "непустого"(то есть c отличным от нуля значением альфа канала) пикселя;
2. Одномерный массив смещений от начала строки и к следующему "непустому пикселю", тоже имеет тип array of longword;
3. Одномерный массив количества "непустых" пикселей для каждой строки, имеет тот же тип array of longword;
4. Одномерный массив частичных сумм элементов предыдущего массива(для моментального доступа к любой строке), array of longword или array of integer(несущественно).
  Можно использовать, где нужна работа с "разреженными" массивами, в том числе и изображениями(спрайтами). Есть некоторые идеи как применить к 3D-графике для, скажем, растеризации треугольников. Но его рассмотрение у меня точно нет в близкой перспективе.
  >куда посмотреть? ))) На гите?
+. Там даже экзешник уже есть чтобы пощупать воочию, ну и устроить небольшой бенчмарк). За одно и сможете по достоинству оценить потенциал данного формата.

#177
21:36, 5 июля 2022

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

да, я смотрю данный формат. То что описывается на вики - это лишь маленький обрезок.
И пришлось вспоминать матрицы... я оказывается их практически совсем забыл...

#178
(Правка: 22:39) 22:35, 5 июля 2022

  Там на самом деле из знаний о матрицах/линейной алгебры мало что нужно будет. Ну разве что поворот и масштабирование, но они тоже весьма элементарны даже в контексте этой "сжатой" структуры данных. Кстати видео неплохо освещает лишь сами понятия ну и малоприменимые для графики какие-то умножения Лиу и Нагасаки). Но честно говоря, еще не встречал, чтобы подробно рассматривали все аффинные преобразования, которые нужны, например, для тех же масштабирования и поворота спрайтов(а уж одновременное масштабирование с поворотом кажется чем-то из раздела фантастики)).

#179
23:01, 5 июля 2022

ArtProg, мне это надо больше для понимания, с чем я работаю. Плюс там объяснено по распаковке/упаковке данных. Поворот изображения зачастую вообще не требуется.
При работе с графикой, в основном нужна загрузка и очень редко сохранение данных. Когда данные распакуются, мы отдаём их на видеокарту и забываем об них. Дальше с ними работает видеокарта.

Страницы: 18 9 10 11 12 13 Следующая »
ПрограммированиеФорумОбщее