Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
14 мар 2023
Мне как-то нечего писать сюда
Обнаружил то, что спустя два месяца я полностью выдохся и мне нечего писать в свой блог. Продолжаю постепенно делать то, что делал, это процессор AVR, вот к примеру, сегодня я сделал вывод стартового экрана для Award Modular, и это оказалось не так сложно. У меня нет до сих пор модуля SDRAM, так что тест памяти будет невозможен, но с другой стороны, его легко можно будет сделать просто так, без всякого теста памяти, а просто счетчиком.
Проснулся я сегодня с мыслью о трехмерной графике, и опять понимания, что ничего не выйдет, начал снова задавать один и тот же вопрос, который задаю уже на протяжении столетий — 3ой4? Ну зачем мне эта трехмерная графика, когда я не могу ничего сделать в трехмерном пространстве. Куб вращать? Надоело уже постоянно его вращать, без конца только и занят кубовращением бессмысленным. Можно же уже и перестать это делать и нормальное что-то давно сделать, но нет же, я вращаю кубы налево и направо, сверху вниз.
Когда-то давно была идея сделать на верилоге этот куборотор, но есть одна колоссальная проблема, которая заключается в том, что это далеко не так просто, вообще. Сделать на верилоге трехмерный ускоритель... это же ужасно трудно, и все равно, зачем оно мне так надо? Ну вообще же не надо совершенно! Не нужно, не нужно, не нужно... а хочется. Никак не могу убедить себя в том, что мне это не нужно, потому что все время хочется сделать и все тут. Ну как же быть то...
Вся эта затея с трехмерной графикой мне кажется идиотской.
Вот реально, допустим, ну сделаю я к примеру, кубы. И что дальше то, что дальше делать буду? На этом все, кубы и это все, на что я способен? Больше нет ничего, кроме кубов? Мне даже обычную трехмерную модель загрузить сложно, не то что все остальное сделать. У меня еще есть одна странная мысль, которая заключается в том, чтобы сделать симулятор космического полета к другим планетам и даже звездам. Для этого потребуется создать трехмерный космический корабль и я не знаю, как это сделать, ведь его нужно делать, а как, неизвестно. Сделать на ПЛИС такую штуку, типа, вылетаешь с планеты и летишь куда-то за определенное время. Мысли сумбурны и не оформлены, да и постоянное ощущение, что мне это не будет нужно. И это и правда, мне не будет нужно, это так.
Может, сделать рейтрейсинг на ПЛИС?.. А зачем.. нет, я все-таки упираюсь в одну и ту же фразу — зачем? Нет никакого смысла, незачем, а если это так, то тогда может, просто отпустить эту тему? Не все так просто! Я не могу ее отпустить. Уже сколько раз пытался, но не могу.
Единственное, что я понял за все время, что занимаюсь плисами и верилогом, это только одно, мне все это не нужно. Ни верилог, ни плис, ни програмирование, ни вообще что-либо, кроме бесконечного прослушивания музыки. А раз так, то мне надо сделать аудиоплеер!
— А зачем?
Ахахахаха! Вот именно, а зачем, зачем, зачем, зачем? Этот дебильный вопрос не отпускает. Даже такую важную штуку для меня, как музыка, я не хочу делать, не вижу смысла. А зачем? Есть же комп. Для чего мне надо напрягаться и делать что-то, когда я просто одену наушники и буду прослушивать себе спокойно любую музыку.
Ответ на вопрос "Зачем" есть только один "Шутки ради". Больше мне делать все это незачем.
Проснулся я сегодня с мыслью о трехмерной графике, и опять понимания, что ничего не выйдет, начал снова задавать один и тот же вопрос, который задаю уже на протяжении столетий — 3ой4? Ну зачем мне эта трехмерная графика, когда я не могу ничего сделать в трехмерном пространстве. Куб вращать? Надоело уже постоянно его вращать, без конца только и занят кубовращением бессмысленным. Можно же уже и перестать это делать и нормальное что-то давно сделать, но нет же, я вращаю кубы налево и направо, сверху вниз.
Когда-то давно была идея сделать на верилоге этот куборотор, но есть одна колоссальная проблема, которая заключается в том, что это далеко не так просто, вообще. Сделать на верилоге трехмерный ускоритель... это же ужасно трудно, и все равно, зачем оно мне так надо? Ну вообще же не надо совершенно! Не нужно, не нужно, не нужно... а хочется. Никак не могу убедить себя в том, что мне это не нужно, потому что все время хочется сделать и все тут. Ну как же быть то...
Вся эта затея с трехмерной графикой мне кажется идиотской.
Вот реально, допустим, ну сделаю я к примеру, кубы. И что дальше то, что дальше делать буду? На этом все, кубы и это все, на что я способен? Больше нет ничего, кроме кубов? Мне даже обычную трехмерную модель загрузить сложно, не то что все остальное сделать. У меня еще есть одна странная мысль, которая заключается в том, чтобы сделать симулятор космического полета к другим планетам и даже звездам. Для этого потребуется создать трехмерный космический корабль и я не знаю, как это сделать, ведь его нужно делать, а как, неизвестно. Сделать на ПЛИС такую штуку, типа, вылетаешь с планеты и летишь куда-то за определенное время. Мысли сумбурны и не оформлены, да и постоянное ощущение, что мне это не будет нужно. И это и правда, мне не будет нужно, это так.
Может, сделать рейтрейсинг на ПЛИС?.. А зачем.. нет, я все-таки упираюсь в одну и ту же фразу — зачем? Нет никакого смысла, незачем, а если это так, то тогда может, просто отпустить эту тему? Не все так просто! Я не могу ее отпустить. Уже сколько раз пытался, но не могу.
Единственное, что я понял за все время, что занимаюсь плисами и верилогом, это только одно, мне все это не нужно. Ни верилог, ни плис, ни програмирование, ни вообще что-либо, кроме бесконечного прослушивания музыки. А раз так, то мне надо сделать аудиоплеер!
— А зачем?
Ахахахаха! Вот именно, а зачем, зачем, зачем, зачем? Этот дебильный вопрос не отпускает. Даже такую важную штуку для меня, как музыка, я не хочу делать, не вижу смысла. А зачем? Есть же комп. Для чего мне надо напрягаться и делать что-то, когда я просто одену наушники и буду прослушивать себе спокойно любую музыку.
Ответ на вопрос "Зачем" есть только один "Шутки ради". Больше мне делать все это незачем.
27 фев 2023
Треугольное чтиво
Короче, решил я делать треугольники не такими, как ранее. Я думал, что буду хранить их в кеш-памяти, но так не пойдет, потому треугольники будут храниться в памяти SDRAM и рисоваться по следующему алгоритму:
- Получаем треугольники из последовательности
- Применяем матрицу преобразования камеры
- Проверяем треугольник на видимость — если вообще невидим, не добавляется в очередь. Если видим — добавляется он один. Если треугольник разрезается на части — режем его и добавляем 2 треугольника.
- Рендерим очередь треугольников, если заполнилась
- Если еще есть что сканировать, возвращаемся к 1
23 фев 2023
Про то, как я хочу сделать треугольники
У меня давным-давно есть одна мысль, которая называется "трехмерный рендерер на верилоге", о котором я часто думаю и не знаю, насколько результативно. Мне хочется сделать пусть даже небольшой, но код для плис, где автоматически из буфера могли бы рисоваться трехмерные треугольники. Это крайне непростая задача, хоть и рисование обычного треугольника не так сложно, но полноценный вывод трехмерного изображения на экран потребует довольно крупных усилий.
Как все это работает? Существует несколько буферов в памяти:
По мере построчного рисования, будет рисоваться буфер из треугольников, интегрально прибавляя значения, формируя точку на текстуре и точку глубины, записывая эти данные в однострочный буфер глубины. Каждый раз после того, как будет нарисована одна линия, этот буфер очищается для новой линии.
Другими словами, на каждой линии будет отрисовываться несколько текущих рисуемых треугольников за раз. После того, как это будет сделано, из полученного буфера размером в одну строку будут скопированы и вычислены текстуры, итоговый цвет записан в видеобуфер и сам строчный буфер очищен для новой строки.
Вот такая вот сложная система.
Как все это работает? Существует несколько буферов в памяти:
- Буфер вершин (vertex), где хранятся все исходные вершины для рендерера
- Буфер индексов (indicied), там хранится номер вершины
- Текстурный буфер для треугольников
- Просматривается буфер вершин, к каждой вершине применяется матрица камеры, то есть, умножается на эту матрицу (она задана float или half-precision значениями). На самом деле для матрицы камеры вполне достаточно даже и half-precision, я думаю.
- Просматривается буфер индексов, проверяя то, где находится та или иная вершина. Если все вершины находятся впереди проецирующей плоскости, то такой треугольник добавляется в буфер очереди на рисование. Если все вершины вне пределов проецирующей плоскости, то треугольник вообще в очередь не добавляется. В случае частичного попадания за плоскость, треугольник разбивается на 2 части и добавляется в очередь как два треугольника. В очередь добавляются уже готовые вершины, не привязанные к vertex/indicies
- Происходит вычисление параметров треугольников для текстурирования и записывается в отдельный буфер. Тут очень много умножений.
- Для каждой точки вычисляется проекция. Здесь уместно использование конвейерного деления для ускорения.
- Все полученные точки треугольников сортируются пирамидальной сортировкой по возрастанию спроецированного Y. Причем сортируется только самая высокая вершина (которая имеет наименьший Y). Также, сортируются именно индексы новых точек. Это нужно для того, чтобы не перемещать большие объемы данных внутри буфера рендеринга, а только лишь индексы. Каждая вершина имеет индекс принадлежности к определенному треугольнику
- И последний этап, это рендер.
По мере построчного рисования, будет рисоваться буфер из треугольников, интегрально прибавляя значения, формируя точку на текстуре и точку глубины, записывая эти данные в однострочный буфер глубины. Каждый раз после того, как будет нарисована одна линия, этот буфер очищается для новой линии.
Другими словами, на каждой линии будет отрисовываться несколько текущих рисуемых треугольников за раз. После того, как это будет сделано, из полученного буфера размером в одну строку будут скопированы и вычислены текстуры, итоговый цвет записан в видеобуфер и сам строчный буфер очищен для новой строки.
Вот такая вот сложная система.
<< Ранние записи |
Поздние записи >>