Перейти к содержанию
    

Подскажите какую-нибудь платформонезависимую библиотеку 3д графики

Коллеги, планирую проект на stm32f746 с дисплеем и touchgfx.

Необходимо будет на экран выводить 3д модельки из примитивов. Скорость большая не требуется,  так как анимации не будет. Картинку нужно будет просто нарисовать и вывести, то есть скажем скорость в 0.2 fps вполне устроит.

Текстурирования не будет. Нужно только чтобы примитив был подобающе освещен источником света.

В итоге что хотелось бы - библиотеку, в которой прописана вся математика и формирование картинки, что оставалось только прописать, как именно, на низком уровне, осуществляется вывод точки на экран.

По аналогии с fatfs - в ней прописаны все функции, а в отдельном файле пустые функции readbyte и writebyte, в которые остается только добавить специфический для устройства код.

Посоветуйте что-нить.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://github.com/avem-labs/ol3d - язык СИ, принимает формат Obj, рисует в буфер. Для вывода на дисплей нужно реализовать свою функцию, отображающую буфер на экран.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть в буфере готовая картинка, я правильно понял?

Хм... как то скриншот не очень. Она что, делает модель из точек, без расчета освещенности? Вы с этим работали? Собачка, такая как на скриншоте это ее потолок?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, MementoMori said:

Коллеги, планирую проект на stm32f746 с дисплеем и touchgfx.

А в директорию tinygl-0.4-ugfx не заглядывали? 
Это же и есть библиотека работы с 3D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, AlexandrY said:

А в директорию tinygl-0.4-ugfx не заглядывали? 
Это же и есть библиотека работы с 3D

Так то ugfx, а у меня touchgfx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, MementoMori сказал:

То есть в буфере готовая картинка, я правильно понял?

Хм... как то скриншот не очень. Она что, делает модель из точек, без расчета освещенности? Вы с этим работали? Собачка, такая как на скриншоте это ее потолок?

Да, в буфере вся картинка, её вывести только остаётся.  Без освещённости. Рисует полигонами или просто линиями. Вот примеры для этой модели:

Спойлер

3.png.20de5d78ff70f771981b130ebb2614f3.png

4.png.468426e722e6ae4805a65c5c2b02ce8d.png

А вам нужно с освещённостью? вроде этого?

Спойлер

1.png.0a0426103fdcabaf80c66f1427fd293b.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, вроде этого. Причем не лучше, а то боюсь дальнейшее наращивание крутизны отрицательно скажется на быстродействии.

Изменено пользователем MementoMori

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно прямо эту библиотеку доработать. Например, вот что получается, если добавить в неё около десяти строчек кода (под спойлером).

Для получения освещения в функции ol3d_draw_Element в вектор color записываю нормаль от треугольника a,b,c. Потом в функции ol3d_getColor из этой нормали получаю интенсивность освещённости. Вся теория очень хорошо расписана в этой статье, все функции для работы с векторами уже есть в библиотеке.

Артефакты отрисовки на стыке плоскостей тоже можно убрать - это ещё около 10 строчек кода изменить. Для этого реализацию функций ol3d_draw_Line и ol3d_draw_Triangle нужно немного поправить, как и зачем - описано в этой статье.

Можете почитать тот цикл статей + комментарии к ним и за день-два доработать эту библиотеку под своё применение.

 

Спойлер

5.png.8be019dcd08e24879f92656544993600.png6.png.214cba19c0aa8c50b68d10533ebb25ad.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже лучше. Спасибо!

 

Во! Нашел картинку, максимально приближенную к тому, что мне нужно. Можно достичь такой графики, если допилить?

 

3d760a.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, пробовать нужно. Может быть под конкретно ваше применение придётся много переписывать, а может и нет. Проще всего взять и самому попробовать - там код простейший и к платформе не привязан, можете прямо на ПК отлаживаться (например, скриншоты которые я выше выкладывал - просто в Qt вывел из буфера картинку через  QImage, вы можете использовать любой другой вариант).

Просто сделать модельку не серой а, например, зелёной легко - при вычислении цвета зануляете R и B каналы, а канал G - меняете значение в зависимости от освещённости. Или нужно несколько цветов одновременно? Скругления - это просто увеличение количества полигонов на модели. Если полигонов будет слишком много то для ускорения отрисовки (точнее, расчёта освещённости) можно хранить нормали прямо в obj файле, а библиотеку добавить их чтение. Кстати, про форматы входных фалов вы тоже ничего не указали. Полноценного парсера obj в ol3d нет, там просто применяется формат хранения данных модели как в obj. Правда формат простой, примеров, как его разбирать - много.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...