Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5

ТЕМА:

Реализация 3D графики на плате marsohod2 10 года 3 нед. назад #6218

В каком виде представлены 3D данные?


Я нарисовал домик в блендере, экспортировал в fbx и написал скрипт для конвертации в свой ассемблер ( 3д данные домика ).
Отдельно хранится список треугольников (v1, v2, v3, цвет) и список вершин (x, y, z, u, v). Получается по 8 байт на треугольник и по 10 байт на вершину.

Есть ли возможность передавать 3D модели с компьютера по виртуальному последовательному порту?


Есть. По пропускной способности -- с большим запасом.
Но если нужно получать новую 3Д модель на каждом кадре одновременно с рисованием, то придется ухищряться: нет механизма прерываний, а буфер последовательного порта -- всего 8 байт. Поэтому нужно будет вставлять чтение внутрь цикла рисования.

На картинке помимо домика есть текст. Расскажите об API для вывода текста.


Текст и графика выводятся независимо.
Символы имеют размер 6х12 пикселов. С таким размером они хорошо выглядят и очень удачно влезают во внутреннюю память ПЛИС.
Выводится 40 строк по 106 символов. Каждый символ кодируется одним 16-битным словом (байт на код и байт на цвет). Сейчас есть только ASCII, но при желании можно легко добавить кириллицу.
Чтобы вывести надпись, нужно записать её в оперативную память (адрес видеопамяти настраивается, так что можно делать двойную буферизацию).
В загрузчике удалось помимо, собственно, загрузчика уместить функцию форматирования текста, похожую на printf. Любая программа может её использовать без дополнительного кода.

Пример (вывод числа в разных системах счисления):
CCMOV [r15], 0        // адрес в кэше для форматированного текста
CCMOV [r15+1], multiline_str  // шаблон форматирования
CCMOV [r15+2], 0xff00 // color|flags      белый цвет, форматирование включено
MOV [r15+3], r1 // 1-ый подставляемый параметр
MOV [r15+4], r1 // 2-ой подставляемый параметр
MOV [r15+5], r1 // 3-ий подставляемый параметр
DCALL printf_func // вызов функции форматирования
CMOV MEM_ADDR_LO, LO(TEXT_ADDR) // адрес в оперативной памяти, на который настроена видеопамять текстового режима
CMOV MEM_ADDR_HI, HI(TEXT_ADDR)
WRITE r0, 128*3 // запись 384-x (3 строки) ячеек из кэша в оперативную память
// ***
multiline_str: .ascii "Timer  Decimal: %u\n       Hex: 0x%x\n       Binary: %b\n" // вывод числа в разных системах счисления
usb_status: .ascii "[USB] Vendor:  0x000%X\n      Product: 0x000%X\n      Device:  0x000%X\n" // вывод в 16-ричной системе с фиксированной шириной числа (4 цифры) и ведущими нулями

Если соединить USB-порт платы расширения Марсохода с другим Марсоходом. Допустим, ваш usb_controller.sv запустится на USB Full-speed (12 Мбит/с), хватит ли этой скорости чтобы передавать 3D данные по этому интерфейсу между Марсоходами?


Хватит. Особенно если учесть, что отрисовать больше двухсот треугольников за раз вряд ли получится по производительности.

Не думали ли об эмуляции терминала VT-102?


Т.е. что-то вроде этого ?
В miksys это сделать достаточно легко (особенно если взять одноцветный фон и обойтись без мигающих символов), но у меня пока не появлялось такого желания.

Простаивают ли арифметические устройства при выполнении обычного кода, не относящегося к графике?


Смотря как программу написать. Если заморочиться, то не простаивают.
Там нет больших блоков, нацеленных исключительно на графику.
Спасибо сказали: alman

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от petrmikheev.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6219

Ещё вопросы созрели. Почему именно 108 Мгц? Это как-то связано с таймингами видео? Как называется устройство/проект?

Устройство интересное. Пожалуй, мне бы даже было интересно его использовать при выполнении нескольких условий. Например, если скорости последовательного порта достаточно для вывода текста и 2D и 3D графики, то оно интересно как внешний терминал. Насколько я понял, вы предоставляете программное API для вывода текста. Интересен был бы некоторый протокол, с помощью которого можно посылая инструкции в последовательный порт установить курсор, установить цвет текста и вывести текст. Нарисовать точку, линию, круг, прямоугольник, залитый прямоугольник, картинку и 3D объект. А так же получить коды нажатых клавиш клавиатуры, подключённой к Марсоходу (и, возможно, данные от мыши).

Более привлекательными такое устройство станет если прошивка будет залита в флеш EPCS4 шилда разъёмов.

Наконец, интересно расширение протокола, позволяющее иметь несколько терминалов, допустим, шесть алфавитно-цифровых и один графический. С переключением между терминалами подобным Linux - ALT+F1, Alt+F2, Alt+F3 и т.д.

Что касается использования вашего проекта в составе "большой ПЛИС" в виде компонента "графический адаптер и ускоритель 3D-графики", то это тоже интересно, но тут возникает проблема арбитража SDRAM между вашей SoC и другими устройствами. (Имхо, это большая тема для обсуждения)

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6220

Ещё вопросы созрели. Почему именно 108 Мгц? Это как-то связано с таймингами видео? Как называется устройство/проект?


Частота должна быть кратна частоте USB (12mhz) и частоте последовательного порта (6mhz). Частота последовательного порта в свою очередь должна быть делителем частоты FTDI (60mhz), иначе не получится сделать высокую скорость передачи данных.
Изначально хотелось использовать 132mhz (133mhz - предел для sdram), но добиться такой скорости не удалось.
Проект -- miksys.

Устройство интересное. Пожалуй, мне бы даже было интересно его использовать при выполнении нескольких условий. Например, если скорости последовательного порта достаточно для вывода текста и 2D и 3D графики, то оно интересно как внешний терминал. Насколько я понял, вы предоставляете программное API для вывода текста. Интересен был бы некоторый протокол, с помощью которого можно посылая инструкции в последовательный порт установить курсор, установить цвет текста и вывести текст. Нарисовать точку, линию, круг, прямоугольник, залитый прямоугольник, картинку и 3D объект. А так же получить коды нажатых клавиш клавиатуры, подключённой к Марсоходу (и, возможно, данные от мыши).


Вроде, сделать можно. Но хочу уточнить: а какой в этом практический смысл? Если подключать к компьютеру, то было бы проще подключить напрямую второй экран и управлять им программно. Или вы хотите соединять с другим устройством, у которого нет своей графики? Будет ли достаточно разрешения экрана 640 на 480?

Более привлекательными такое устройство станет если прошивка будет залита в флеш EPCS4 шилда разъёмов.


Это без проблем. Программа с домиком вполне помещается в EPCS4. Загрузка с флешки в данном случае не необходимость, а демонстрация фичи.

Что касается использования вашего проекта в составе "большой ПЛИС" в виде компонента "графический адаптер и ускоритель 3D-графики", то это тоже интересно, но тут возникает проблема арбитража SDRAM между вашей SoC и другими устройствами. (Имхо, это большая тема для обсуждения


Да, было бы интересно такое сделать.
Одно из возможных решений с SDRAM, которое не потребует переделок в моём проекте -- помимо графического ускорителя использовать в том числе и мою реализацию контроллера SDRAM, в которой арбитраж уже есть .
Если использовать мой проект в качестве составной части проекта для марсоход3, то возникнет еще одна задача -- переделать vga_controller.sv на работу с HDMI.

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


Да, это интересно. Но тут еще много чего нужно обсудить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6221

petrmikheev пишет: Проект -- miksys.

Я дал ссылку на эту тему на ixbt в теме "Отечественные процессоры".

Интересен был бы некоторый протокол, с помощью которого можно посылая инструкции в последовательный порт установить курсор, установить цвет текста и вывести текст. Нарисовать точку, линию, круг, прямоугольник, залитый прямоугольник, картинку и 3D объект. А так же получить коды нажатых клавиш клавиатуры, подключённой к Марсоходу (и, возможно, данные от мыши).


Вроде, сделать можно. Но хочу уточнить: а какой в этом практический смысл? Если подключать к компьютеру, то было бы проще подключить напрямую второй экран и управлять им программно. Или вы хотите соединять с другим устройством, у которого нет своей графики? Будет ли достаточно разрешения экрана 640 на 480?


Когда-то было достаточно 320х240 при 256 цветах :) А если устройство интересное, то можно достать из чулана старый ЭЛТ монитор. Да, я хочу соединить вашу SoC с устройством, у которого нет своей графики и с этой точки зрения miksys в качестве графического терминала мне кажется очень перспективным.

Вот с чем не согласен, так это с тем, что второй монитор способен заменить терминал. Дополнительный монитор, в отличие от терминала, не позволит разделить компьютер между несколькими пользователями. Например, вероятно вы сможете наладить продажи, если бы продавали "устройство в коробке" и драйвером ядра для Linux, который был создавал в /dev/mikTTY. А для Windows могла бы быть популярна DLL, предоставляющая высокоуровневый протокол работы с терминалом. Т.е. мне кажется что вот где-то тут реальные пользователи.

Более привлекательными такое устройство станет если прошивка будет залита в флеш EPCS4 шилда разъёмов.

Это без проблем. Программа с домиком вполне помещается в EPCS4. Загрузка с флешки в данном случае не необходимость, а демонстрация фичи.


Вот ежели бы была возможность проброса внешнего USB порта, куда подключается флешка, по последовательному порту на ведущее устройство, то получился бы терминал с USB разъёмом.

Одно из возможных решений с SDRAM, которое не потребует переделок в моём проекте -- помимо графического ускорителя использовать в том числе и мою реализацию контроллера SDRAM, в которой арбитраж уже есть .

В настоящий момент мне интереснее взаимодействие по последовательному каналу.

Если использовать мой проект в качестве составной части проекта для марсоход3, то возникнет еще одна задача -- переделать vga_controller.sv на работу с HDMI.

А какая глубина цвета в версии для Марсохода-2?

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


Да, это интересно. Но тут еще много чего нужно обсудить.


Задача - передавать информацию для отображения, информацию от устройств ввода, проброс порта USB (в некотором виде). Нужен некий стандарт, описывающий семейство протоколов для обмена информацией между устройствами (Марсоходами и т.д.). Если Вам это интересно, то предлагаю оформить это как-то документально в виде стандарта. Вопрос лишь в том, как это оформит - нужна какая-то площадка для дискуссий. При этом, в случае разработки такого стандарта, мне бы очень хотелось видеть Ynicky и других активных участников форума Марсохода.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6222

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

alman пишет: ...вот где-то тут реальные пользователи.

Это где, в системе Альфа Центавра?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6224

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


В линуксе ничего не мешает запустить второй Х-сервер для второго монитора.
В любом случае, настроить ПО всегда проще, чем делать что-то аппаратное.

Например, вероятно вы сможете наладить продажи, если бы продавали "устройство в коробке" и драйвером ядра для Linux, который был создавал в /dev/mikTTY. А для Windows могла бы быть популярна DLL, предоставляющая высокоуровневый протокол работы с терминалом. Т.е. мне кажется что вот где-то тут реальные пользователи.


Не верю. Скорее всего можно по цене марсохода купить одноплатный компьютер с нужным набором разъемов. А потом использовать его в качестве тонкого клиента.

А какая глубина цвета в версии для Марсохода-2?


16 бит. 5R+6G+5B

Задача - передавать информацию для отображения, информацию от устройств ввода, проброс порта USB (в некотором виде). Нужен некий стандарт, описывающий семейство протоколов для обмена информацией между устройствами (Марсоходами и т.д.). Если Вам это интересно, то предлагаю оформить это как-то документально в виде стандарта. Вопрос лишь в том, как это оформит - нужна какая-то площадка для дискуссий. При этом, в случае разработки такого стандарта, мне бы очень хотелось видеть Ynicky и других активных участников форума Марсохода.


Не думаю, что тут имеет смысл придумывать универсальный протокол. Это чревато чрезмерным усложнением и впустую потраченными усилиями. Пока что вы -- единственный гипотетический пользователь протокола, поэтому давайте ориентироваться конкретно под ваши нужды (оставив, разумеется, возможность для расширения протокола в дальнейшем). Не могли бы вы рассказать, что у вас за устройство, и какая информация будет визуализироваться? Важна ли здесь именно 3д графика? А, к примеру, текстурирование и освещение?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6226

petrmikheev пишет: Не верю. Скорее всего можно по цене марсохода купить одноплатный компьютер с нужным набором разъемов. А потом использовать его в качестве тонкого клиента.

Да, цену Марсохода-2 я не учёл. Определённо тут изъян в моих рассуждениях. Хотя, если Марсоход-2 использовать только для прототипирования и отладки, а само устройство реализовать в ASIC большим тиражом, то могло бы и получиться. Ну, я не утверждаю, а просто предполагаю.

petrmikheev пишет: Не думаю, что тут имеет смысл придумывать универсальный протокол. Это чревато чрезмерным усложнением и впустую потраченными усилиями. Пока что вы -- единственный гипотетический пользователь протокола, поэтому давайте ориентироваться конкретно под ваши нужды (оставив, разумеется, возможность для расширения протокола в дальнейшем). Не могли бы вы рассказать, что у вас за устройство, и какая информация будет визуализироваться? Важна ли здесь именно 3д графика? А, к примеру, текстурирование и освещение?

Моё устройство в некотором роде конкурент вашему, поэтому было бы неэтично рекламировать его в этой теме. Лучше рассматривать его как некоторое абстрактное устройство, способное передавать данные и управляющие команды.

Что касается возможности расширения протокола, то это обязательное условие.

На самом деле мне нужен алфавитной-цифровой терминал, подключаемый к шилду разъемов по USB. Ну как нужен - интересуюсь таким устройством. Возможность иметь несколько консолей на терминале очень приветствуется. Что касается графики, то здесь любопытство скорее праздное, из разряда: "А вдруг получится и будет удобно". Насколько понимаю, без поддержки векторных шрифтов говорить о графическом терминале смысла нет, но если рассматривать именно 3D, то интересует возможность динамического отображения чего-нибудь вот такого:



Что касается протокола, то некоторые мысли по этому поводу есть. Например, "аппаратный терминал" предлагает четыре консоли - три алфавитно цифровые и одну графическую. Соответственно, заголовок исходящего пакета должен содержать информацию о номере консоли. Первые три - нечто стандартное, типа VT102, а четвёртый для графической информации.

Насколько я понимаю, текстурирование для вывода графики Doom это обязательное условие и без него затея смысла не имеет. Что касается освещения, то это интересная, но (имхо) необязательная возможность.

В общем, для начала интересно - рассматриваете вообще вышесказанное как выполнимые желания? Тут как бы вариант получить "странного" пользователя в моём лице или ждать других, более адекватных пользователей. :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6227

В общем, для начала интересно - рассматриваете вообще вышесказанное как выполнимые желания? Тут как бы вариант получить "странного" пользователя в моём лице или ждать других, более адекватных пользователей. :)

А я не жду пользователей. Проект не предназначался для практического применения. Мне просто было интересно сделать свой процессор.
Но раз уж вы заинтересовались, я что-нибудь в этом направлении попробую сделать.

Моё устройство в некотором роде конкурент вашему, поэтому было бы неэтично рекламировать его в этой теме.

Опять же, я не рекламирую продукт, я хвастаюсь в духе "смотрите, оно работает". И на конкурента как раз было бы интересно посмотреть и сравнить.

На самом деле мне нужен алфавитной-цифровой терминал, подключаемый к шилду разъемов по USB.

Т.е. ваше устройство содержит хост-контроллер USB и будет взаимодействовать с микросхемой FTDI?
Или вы хотите соединить два марсохода через шилды разъемов? В этом случае проще всего будет соединить два шилда разъемов USB-кабелем, но использовать линии данных для UART.

Что касается графики, то здесь любопытство скорее праздное

Тогда я предлагаю реализовать VT100, а про остальное думать потом.

Насколько я понимаю, текстурирование для вывода графики Doom это обязательное условие и без него затея смысла не имеет. Что касается освещения, то это интересная, но (имхо) необязательная возможность.

Именно Doom сделать не получится. Нужно помнить, что у меня очень серьезное ограничение по количеству треугольников и размеру текстур. Суммарный объем текстур не может превышать 16 килобайт (это две текстуры 64х64 или 8 текстур 32х32). В приложенной вами картинке текстур явно больше.
А освещение в каком-то виде нужно. Когда оно есть, оно незаметно. Но когда его нет, картинка теряет всякое сходство с реальностью.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6228

И на конкурента как раз было бы интересно посмотреть и сравнить.

marsohod.org/forum/proekty-polzovatelej/...chik-dlya-marsokhoda но там устаревшая информация.

На самом деле мне нужен алфавитной-цифровой терминал, подключаемый к шилду разъемов по USB.

Т.е. ваше устройство содержит хост-контроллер USB и будет взаимодействовать с микросхемой FTDI?
Или вы хотите соединить два марсохода через шилды разъемов? В этом случае проще всего будет соединить два шилда разъемов USB-кабелем, но использовать линии данных для UART.[/quote]
USB контроллера пока нет, именно поэтому заинтересовался вашим. Но да, надеюсь через FDI прокинуть последовательный порт. Это позволило бы отлаживать взаимодействие с Марсоходом-2 с помощью компьютера. Насколько я знаю, без перепайки кабеля нет возможности соединить два USB-мама разъёма, поэтому хотелось бы обойтись стандартными средствами. Как вариант - соединить ноги разъёмов двух плат, но всё же хочется использовать только стандартные средства.

Что касается графики, то здесь любопытство скорее праздное

Тогда я предлагаю реализовать VT100, а про остальное думать потом.

Я двумя руками за.

Именно Doom сделать не получится. Нужно помнить, что у меня очень серьезное ограничение по количеству треугольников и размеру текстур. Суммарный объем текстур не может превышать 16 килобайт (это две текстуры 64х64 или 8 текстур 32х32). В приложенной вами картинке текстур явно больше.
А освещение в каком-то виде нужно. Когда оно есть, оно незаметно. Но когда его нет, картинка теряет всякое сходство с реальностью.


Увы, я имею поверхностные представления о 3D-графике. Можно уточнить? Вот эта картинка из Doom не очень удачная - "вид из окна" с горами, насколько я могу судить и помнить, сделан не текстурой, а типа фоновой картинки, т.е. сцена отрисовывается поверх картинки, а там, где окно, просто ничего не рисуется и остаётся как бы вид из окна. А во время поворота фоновая картинка сдвигалась тоже. Это было наглядно видно в игре. Сами же текстуры, за редким исключением, довольно просты и примитивны. Бегало это довольно шустро на 386DX2-66 МГц.

С чем связан ограниченный размер текстур? Точно уж не памятью - 640х480х2 = 614400 байт видеопамять. На всё остальное остаётся больше 7 Мб.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Реализация 3D графики на плате marsohod2 10 года 2 нед. назад #6229

alman пишет: USB контроллера пока нет, именно поэтому заинтересовался вашим. Но да, надеюсь через FDI прокинуть последовательный порт. Это позволило бы отлаживать взаимодействие с Марсоходом-2 с помощью компьютера. Насколько я знаю, без перепайки кабеля нет возможности соединить два USB-мама разъёма, поэтому хотелось бы обойтись стандартными средствами. Как вариант - соединить ноги разъёмов двух плат, но всё же хочется использовать только стандартные средства.

Например, вот подходящий кабель. А по поводу отладки -- можно контроллер последовательного порта подключить и к FTDI, и к usb на шилде разъемов.

alman пишет:

Именно Doom сделать не получится. Нужно помнить, что у меня очень серьезное ограничение по количеству треугольников и размеру текстур. Суммарный объем текстур не может превышать 16 килобайт (это две текстуры 64х64 или 8 текстур 32х32). В приложенной вами картинке текстур явно больше.
А освещение в каком-то виде нужно. Когда оно есть, оно незаметно. Но когда его нет, картинка теряет всякое сходство с реальностью.


Увы, я имею поверхностные представления о 3D-графике. Можно уточнить? Вот эта картинка из Doom не очень удачная - "вид из окна" с горами, насколько я могу судить и помнить, сделан не текстурой, а типа фоновой картинки, т.е. сцена отрисовывается поверх картинки, а там, где окно, просто ничего не рисуется и остаётся как бы вид из окна. А во время поворота фоновая картинка сдвигалась тоже. Это было наглядно видно в игре. Сами же текстуры, за редким исключением, довольно просты и примитивны. Бегало это довольно шустро на 386DX2-66 МГц.

С чем связан ограниченный размер текстур? Точно уж не памятью - 640х480х2 = 614400 байт видеопамять. На всё остальное остаётся больше 7 Мб.

Это связано с тем, что у меня все текстуры лежат в кэше. В общем случае соседние пикселы экрана не покрываются соседними пикселами текстуры, поэтому для каждого пиксела нужно делать отдельный запрос к оперативной памяти и грузить по 2 байта. В таком режиме sdram работает очень неэффективно, и её пропускной способности скорее всего не хватит.
А вообще, я ещё подумаю, что тут можно сделать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
Время создания страницы: 0.220 секунд
Работает на Kunena форум