Возможно, Arduino генерирует 3D- графику на tft или vga.
С помощью Arduino можно визуализировать 3D-графику, такую как очень низкополигональные 3D-модели, или генерировать световые эффекты: тени не в реальном времени или тени и отражения в реальном времени. Рендеринг как у первых игровых приставок с 3d v ideo. Кто-то может спросить, почему вы не используете Rasberry Pi. Потому что Linux может быть более сложным. Кроме того, Rasberry Pi — это компьютер, работающий под управлением Linux. Linux — это сложно, и некоторые люди могут сказать, что вы можете установить Windows, но это не дает свободы, как Arduino на Ardu , у вас больше контроля над системой. Он работает не с операционной системой, а с Rasberry pi. работает, и вам нужно написать программы для него. Вы не можете сделать ничего (по крайней мере, я знаю), кроме того, что позволяют Linux или Windows.
Моей целью было запустить очень простую 3D-графику на VGA. Нет никаких правил, это может быть похоже на старые игры для DOS. Поддельный 3D-эффект, например, искажение спрайтов, чтобы они выглядели как 3D, и их вращение, перемещение, изменение координат, изменение положения камеры, как в 3D, но на самом деле это создает поддельную глубину. Положение камеры должно быть контролируемым. Как видеоигра.
Спрайты, эффекты полностью предварительно визуализированы. Единственной вещью, отображаемой в реальном времени, было искажение спрайтов положением камеры. Раздевалка (Квадратная область сбросит вид, после другой комнаты будет отображаться другая комната).
Есть ли библиотека, которая может это сделать?
Ваше решение может быть для другого Arduino.
Ваше решение может зависеть от Arduino. Лайк работает только за счет,мега и т.д.
Существует библиотека vga для Due, поддерживающая 256 цветов. Ваше решение может использовать эту библиотеку, которая называется DueVGA
5 ответов
На Arduino на основе AVR: Нет, определенно нет. Можно создать сигнал VGA, но только с очень ограниченным разрешением и несколькими цветами (например, 4 или около того), а также с частотой кадров, чего будет недостаточно. Также у них у всех слишком мало памяти.
Возможно, это возможно на Due (у меня нет большого опыта работы с ним), но это все же плохой выбор для платформы (также отчасти потому, что Due, как правило, плохо спроектированная плата без хорошей документации). .
Есть ли библиотека, которая может это сделать?
Я не думаю, что вы найдете какую-либо библиотеку, делающую все, что вы хотите. Вы можете найти библиотеки, которые помогут вам рисовать на дисплее, но все сложные вещи (создание и загрузка спрайтов, их искажение, анимация) вы будете делать сами. Это потому, что Arduino — плохой выбор для такого проекта.
Также: в заголовке вы упомянули TFT. Я думаю, вы имели в виду один из модулей дисплея TFT, который вы можете подключить к Arduino. Забудь об этом. Они подключены через довольно медленные последовательные интерфейсы данных (здесь имеется в виду не Arduino Serial
, а последовательные интерфейсы, такие как I2C или SPI). С ними вы не получите достаточной частоты кадров.
Я бы выступил против ваших аргументов против Raspberry Pi. Конечно, у него есть ОС, но это также означает, что он может использовать множество языков и фреймворков. Вы не привязаны к простому C/C++. Вы можете использовать язык или фреймворк, который лучше всего соответствует вашим потребностям. Сначала может быть немного сложно найти правильный. Но это потому, что ваш проект сложный. То, что вы описываете, является очень сложной задачей, когда вы не можете полагаться на других, которые уже реализовали сложные вещи (что было бы в случае с Arduino).
Кроме того, Raspberry Pi имеет много оперативной памяти и много места для хранения. Он работает на высокой скорости и способен выводить видео с хорошей частотой кадров.
Не хочу вас обидеть: я думаю, что раз вы задаете этот вопрос здесь, вы еще недостаточно квалифицированы, чтобы сделать такой проект на Arduino. Есть безумно способные люди (я бы себя к ним не причислил), которые делают невероятные вещи с ардуино, вытягивая из них самую последнюю каплю ресурсов. Но они делают это ради рутинной работы, а не для того, чтобы в итоге получить работающий продукт. Я думаю, вы хотите, чтобы в конце концов это работало хорошо, и вам не нужно было работать над этим в течение многих лет. Тогда вы ориентированы на результат и должны выбрать для этого правильную платформу. Компьютер (например, Pi) будет проще.
В Rasberry Pi было много вещей, но некоторые из них были ненужными.
Да, но действительно ли это проблема? Действительно ли неиспользованный потенциал не подходит для проекта? То же самое можно сказать и об Arduino. Он имеет множество встроенных периферийных устройств (в зависимости от типа: таймеры, компараторы, АЦП, ЦАП, несколько интерфейсов связи, периферийные устройства управления питанием и т. д.). Почти ни один проект не использует их все. Но это просто разница между микросхемами/платами общего назначения (такими как все Arduino или Raspberry Pi) и микросхемами, изготовленными на заказ для одной цели. Если (!) подходящий чип для вашего проекта существует, в котором действительно есть только то, что вам нужно, он, скорее всего, будет очень дорогим. Чипы для одной очень узкой цели имеют очень узкую целевую группу, поэтому стоят дороже (здесь простая экономия). Компании формально почти каждый раз разрабатывали свои собственные чипы для игровых консолей (что выходит за рамки ваших текущих возможностей), таких как PS1 или N64. Современные игровые консоли часто полагаются на модифицированное стандартное оборудование, в том числе потому, что оно дешевле. В очень старых игровых консолях использовались обычные электронные чипы, а это значит, что у вас не было ни одного программируемого чипа. Вместо этого большая часть логики была встроена в электронный дизайн.
Поэтому у вас всегда будут какие-то лишние функции, которые не используются. Почему вы хотите удалить их из проекта, просто для нечеткой цели не тратить функции впустую. Это сделает ваш проект только более сложным и дорогим. Вы почти ничего не выиграете от минимизации ресурсов. Это проект для хобби, а не для продажи.
В rasberry pi вы просто пишете компьютерную программу. У вас нет такого большого контроля, как в Arduino
Это зависит от того, какой тип управления вы имеете в виду. На компьютере вы пишете код на более высоком уровне абстракции. Это также упрощает выполнение сложных задач, поскольку вы можете положиться на низкоуровневое программирование других. Какой контроль вы хотите иметь над системой, чего у вас нет на таком компьютере, как Pi? Как вы думаете, вы можете программировать драйверы дисплея или графические рендереры лучше, чем все остальные люди? Тогда вы все еще можете сделать это на Pi. Pi также дает вам контроль над контактами GPIO, что позволяет вам делать многие аппаратные вещи, которые вы также можете делать на Arduino.
Кроме того, исходный код Linux является открытым. Если вы считаете, что вам нужно более низкоуровневое взаимодействие с оборудованием (не можете придумать причину для этого), то вы можете создать свою собственную ОС, которая дает вам необходимую свободу. Конечно, это очень сложно. Но когда вы можете использовать низкоуровневое программирование, вы также можете изменить ОС.
Похоже, вы уже выбрали Arduino для своего проекта. Я, как и другие, посоветовал вам использовать Pi вместо этого, чтобы сделать его намного проще и лучше. Вам решать, хотите ли вы верить нам или нет. В общем, я все еще не уверен, что вы можете реализовать это на платформе Arduino, получая при этом хорошие результаты. Вы просто еще не достигли этого уровня знаний. Вы уверенно пишете о проблемах с ОС, при этом, похоже, не имеете представления о точной структуре этих проблем и их влиянии на вас. Мы не будем мешать вам сделать это трудным путем. Пожалуйста, выберите свой путь бесплатно.
Вы правы, но Rasberry Pi любит излишества. Также я не хочу собирать компьютер в своей цели. Также на rasberry pi и других Linux-системах были очень сложные команды. Запуск 3D-графики на rasberry pi, просто создание видеоигры только для компьютера с Linux. Arduino кажется более удобным для пользователя, также я не использовал Linux, который я использовал в школе на смарт-платах, это не Linux ОС на основе Linux под названием Pardus может запускать некоторые exe-файлы, если я правильно помню., @IWantJustBasicCollisions
Я не думаю, что Пи - это излишество. Это хороший способ для новичка. Вы можете использовать Pi Zero, который очень мал (меньше, чем Arduino Uno). Команды могут быть менее сложными, чем на Arduino, потому что вам не нужно заниматься оптимизацией. Но, конечно, я не запрещаю вам делать это с Arduino. Если вам нравится очень крутая кривая обучения, то это хорошо. Не просто то, что я бы порекомендовал, @chrisl
В rasberry pi вы просто пишете компьютерную программу. У вас нет такого контроля, как у arduino (по крайней мере, я знаю). Это просто программа работает на rasberry pi. В Rasberry Pi было много всего, но некоторые из них были ненужными. Есть ли другая встроенная система с 1 ГБ оперативной памяти, но не работающая с ОС, как это делает rasberry pi. Вы имеете полный контроль над системой. Микроконтроллер или микропроцессор поддерживает 1 ГБ оперативной памяти и 3D-рендеринг (например, ps1). Мне не нужна операционная система, даже если у нее была операционная система. Линукс или Виндовс. Вы все еще зависите от os. Если вы просто хотите запустить специальные задачи. Не похоже на запуск explorer.exe в фоновом режиме или т. д., @IWantJustBasicCollisions
Raspberry pi не является излишеством. Это правильный инструмент для работы. Ардуино явно не хватает мощности для ЛЮБОЙ графики. Он слишком медленный, имеет слишком мало памяти и слишком низкую пропускную способность ввода-вывода. Большинству плат Arduino не хватает оперативной памяти даже для отображения одного кадра цветной графики VGA, не говоря уже о памяти, необходимой для манипулирования массивом вершин и преобразования его в полноэкранный цветной вывод. Кроме того, у них нет встроенной памяти с плавающей запятой, и вам действительно нужно специализированное графическое оборудование для создания 3D-графики с приличной частотой кадров. (Программное обеспечение с плавающей запятой SLOOOOOOOOOW.), @Duncan C
@IWantJustBasicCollisions Я добавил несколько пояснений, чтобы непосредственно ответить на некоторые из ваших аргументов. Я не думаю, что вы правы. Хотя, поскольку вы, похоже, уже полны решимости остаться на платформе Arduino, это последняя часть, которую я напишу по этому вопросу. Вы можете выбрать легкий или сложный путь, как вам нравится. Пожалуйста, решите сами, что вы хотите делать., @chrisl
На самом деле вы правы, могу ли я установить DOS как операционную систему. Linux или Windows любят излишества. Я просто не хочу, чтобы ОС работала, а просто всплывающее окно программы рисовало 3D-графику и т. Д. Даже если ОС работала, я хочу закодировать ее как Arduino (на самом деле Arduino не является программой OS Justa), я просто хочу прямую программу, и ни одна из других программ не работает. t работает так же, как explorer.exe работает в фоновом режиме и т. д. Даже если он будет работать под управлением Linux, должны запускаться только 3D-приложения и критические системные приложения. Обои рабочего стола должны быть невидимыми. Темы Linux и т. д. должны исчезнуть. Вроде пс1. Он просто запускает программы для 3D-рендеринга, другие программы не будут запускаться., @IWantJustBasicCollisions
VGA
Я предлагаю вам собрать знаменитую худшую видеокарту в мире. Это отличный проект, и вы обязательно чему-то научитесь, когда будете его создавать.
Эта видеокарта использует только 2 бита на базовый цвет, что в сумме составляет 6 бит, или 64 цвета. Разрешение видеокарты составляет 100x75 пикселей. Изображение может стать таким же хорошим, как
Это изображение по-прежнему имеет размер 100 x 75 = 7,5 КБ. Это означает, что он не помещается в 2 КБ ОЗУ Arduino Uno.
Чтобы синхронизировать видеокарту, Бен Итер использует кристалл с частотой 10 МГц, чтобы получить правильную синхронизацию. Это означает, что ваш Arduino должен выводить один цвет со скоростью 10 МГц. Это явно невозможно для Arduino Uno, работающего на частоте 16 МГц.
Однако Arduino Uno ничего не стоит без подключенного оборудования. Вы можете попытаться рассчитать 3D-графику на Arduino и записать результаты в EEPROM (точно так же, как графическая карта Бена Итера) и позволить EEPROM обрабатывать вывод цветов. Таким образом, вы, безусловно, могли бы генерировать отдельные изображения. Частота кадров точно не будет высокой.
Но: ваш запрос не так уж надуманен. Мой первый компьютер, Apple IIe, работал на частоте 1 МГц, но по крайней мере у него было 64 КБ ОЗУ. Он мог делать все, что угодно, хотя я не могу вспомнить 3D-игру. Использование Arduino Due с тактовой частотой 84 МГц и 96 КБ ОЗУ должно быть реалистичным подходом и, вероятно, причиной существования DueVGA.
TFT
TFT-дисплей уже имеет собственную память, поэтому вам не нужно беспокоиться об этом аспекте. Люди уже делали 3D-рендеринг, хотя у них было много проблем, о которых я упоминал ранее для VGA. Это требует большой оптимизации. Библиотека — это ATmega328 Tiny 3D Engine.
Похоже, что с затенением на Arduino отображается до 3 кадров в секунду, чего, вероятно, недостаточно для плавного взаимодействия.
Малиновый пи
Linux — это сложно
Некоторые Linux. Особенно Кали Линукс. Но Raspbian действительно хорошая ОС для Raspberry Pi. Мы проводим стажировки Linux + Shell + Python в течение 1 недели (например, этот проект). Достаточно сосредоточиться на программировании. Требуется не так много настроек .
Вы ничего не можете сделать (по крайней мере, я знаю), кроме того, что позволяют Linux или Windows.
Это может быть правдой. Тем не менее, я разрабатываю программное обеспечение, которое работает на операционных системах с 1996 года, и у меня никогда не было ощущения, что операционная система ограничивает меня в чем-то. Наоборот: ОС предоставляет функции, которые мне было бы очень сложно реализовать самостоятельно.
Спасибо, но я видел, как некоторые люди действительно рендерят 3D на Arduino: https://hackaday.com/2016/01/02/better-3d-graphics-on-the-arduino/ (TFT). Также я помню, что есть библиотека для noki a lcd, но я не знаю, но я не могу найти код для него. Даже я это делаю. Это просто искажает формы, чтобы выглядеть как 3D. Он не будет отображаться, как показано в статье., @IWantJustBasicCollisions
@IWantJustBasicCollisions парень в этом видео делает ОЧЕНЬ продвинутую оптимизацию и делает все возможное, чтобы создать, казалось бы, впечатляющие, но на самом деле довольно грубые результаты. Они не очень практичны для игры. Если вы хотите писать видеоигры, используйте платформу со встроенным видеовыходом с поддержкой графики. Прокатывать все это самостоятельно очень, ОЧЕНЬ сложно, а результаты довольно ограничены., @Duncan C
Хотя библиотеки VGA для ардуино с AVR не существует, для ESP32 есть библиотека: Библиотека ESP32 VGA.
Он активно использует аппаратные возможности, такие как I2S, которых нет в Arduino.
Я не согласен с вашей предпосылкой. Если вы используете высококлассный Arduino, например, один из тех, что основаны на процессоре ARM, и оптимизируете его сопли, вы можете генерировать грубую графику уровня VGA и создавать некоторые трехмерные изображения. Но ожидайте, что вы потратите много времени на очень суетливый код синхронизации, который требует МНОГО опыта, чтобы все сделать правильно.
(У Arduino вообще нет драйвера дисплея.)
Вам нужно устройство, которое может выводить видео через аппаратное обеспечение. Raspberry Pi — гораздо лучший выбор. Конечно, он работает под управлением UNIX. UNIX вас не укусит. Засучите рукава и
Вы определенно можете визуализировать 3D-графику на микроконтроллере на базе Arduino & TFT и именно это я сделал с Teensy.
Однако для реализации программного растеризатора требуется немало работы, и я не знаю готовой 3D-библиотеки, которую вы могли бы использовать. Я думаю, что кто-то написал iib для 3D-графики, так что может быть полезно покопаться в GitHub, если вы не хотите писать растеризатор самостоятельно. .
Существует множество различных вариантов TFT с SPI (последовательным) и 8/16-битным параллельным интерфейсом, которые вы можете использовать и иметь приличную частоту кадров. Например, с помощью Teensy вы можете обновить экран 320x240x16bpp через SPI со скоростью ~30 кадров в секунду. Вы также можете передать передачу данных SPI в DMA, чтобы бесплатно расходовать циклы MCU, если ваш MCU поддерживает это. С параллельным интерфейсом вы можете быстрее передавать данные в TFT и потенциально иметь более высокую частоту кадров, но тогда вам придется тратить такты MCU на передачу данных.
Новые модели Teensy имеют достаточно оперативной памяти (1 МБ) для 3D-рендеринга, но рендеринг 3D-графики на некоторых микроконтроллерах с небольшим объемом ОЗУ может быть довольно сложным. Я использую мозаичный рендеринг, который отображает кадр небольшими плитками (например, 64x64px), и поэтому мне не нужно поддерживать весь кадр &; буферы глубины в памяти. Благодаря этому я смог запустить модуль 3D-рендеринга на Teensy LC, у которого всего 8 КБ ОЗУ, но это намного медленнее и проще 3D-модель. Я также храню 3D-активы (геометрию, текстуры) во флэш-памяти MCU в формате, который можно напрямую использовать для рендеринга для экономии оперативной памяти.
Вы также можете реализовать сэмплирование текстур в MCU, что открывает возможность реализации различных эффектов, таких как спрайты, которые вы упомянуто.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Вполне возможно, и это уже было сделано. http://crawlingrobotfortress.blogspot.com/2015/12/better-3d-graphics-engine-on-arduino.html И даже есть исходники (проверьте папку «примеры») https://github.com/michaelerule/Uno9341TFT, @Filip Franik