Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
23 окт 2024 Ср
Нарисовать шахматную доску в перспективе
У меня есть одна демка, это "шахматка", она основана на принципе:
Вот так эта программа пока что выглядит на Quick Basic 4.5. Моя же задача в том, чтобы использовать только одно деление, причем, это деление будет выполнено как серия вычитаний (и еще одно сложение), и выдать тоже самое на экране со скоростью 25 мгц. Я думаю, что у меня это может получиться.
Как я и говорил ранее, при ширине линии 800 пикселей я могу даже увеличить размеры поля, использовать не только 320, но и 800, но делать так, конечно, пока не буду. Сначала, вывод на экран без использования памяти и любых блоков DSP. Чистый хардкор, как в детстве.
У меня есть идеи на небольшие демки и мне хочется их показывать и рассказывать и я буду это делать в этом великолепном блоге.
Программа
У меня получилось сделать программу для верилятора, которая выдает точно такую же картинку, какую я изобразил ранее. Я весь код приводить тут не буду, только ядро алгоритма.
Для процессора EPM570 это заняло только 150 LE, то есть, этот код влазит даже в EPM240.
t.x = x / y t.y = H / yВот тут t.x и t.y это точки текстуры, а H — высота над шахматной доской, x меняется от -160 до 160 (для экрана 320 пикселей по ширине), y меняется от 1 до 100, где y=1 самая дальняя точка перспективы, а y=100 ближняя.
Вот так эта программа пока что выглядит на Quick Basic 4.5. Моя же задача в том, чтобы использовать только одно деление, причем, это деление будет выполнено как серия вычитаний (и еще одно сложение), и выдать тоже самое на экране со скоростью 25 мгц. Я думаю, что у меня это может получиться.
Как я и говорил ранее, при ширине линии 800 пикселей я могу даже увеличить размеры поля, использовать не только 320, но и 800, но делать так, конечно, пока не буду. Сначала, вывод на экран без использования памяти и любых блоков DSP. Чистый хардкор, как в детстве.
У меня есть идеи на небольшие демки и мне хочется их показывать и рассказывать и я буду это делать в этом великолепном блоге.
Программа
У меня получилось сделать программу для верилятора, которая выдает точно такую же картинку, какую я изобразил ранее. Я весь код приводить тут не буду, только ядро алгоритма.
always @(posedge clock) begin // Вычисление текстуры XOR if (rx >= ry) begin rx <= rx + 1 - ry; tx <= tx + 1; end else begin rx <= rx + 1; end // ---------------- // Инициализация [на первой точки вывода] if (X == hzb) begin A <= 320; B <= Y - (199 + vtb); C <= 0; end // Запись результата [перед тем как начать выводить на экран] else if (X == hzb-1) begin tx <= C[0]; ty <= C[0]; rx <= (B - 1) - A; ry <= B; end // Деление числа A : B => C (остаток A) else begin if (A >= B) begin A <= A - B; C <= C + 1; end end // ---------------- // Вывод окна видеоадаптера if (X >= hzb && X < hzb+hzv && Y >= vtb && Y < vtb+vtv) {r, g, b} <= Y > (200 + vtb) && (tx ^ ty) ? 3'b111 : 3'b000; endОбъяснить тут как она работает, я не могу, потому что сложно. Вся фишка в делении, которое представляет собой тут просто серию вычитаний:
if (A >= B) begin A <= A - B; C <= C + 1; end
. Здесь A-делимое, B-делитель, C-результат, а в конце деления получается остаток. Деление это происходить может с разной скоростью. Например, разделить 320 на 200 займет всего 1 такт, а 320 на 8 уже 40 тактов. Но, поскольку ширина строки все равно 800, а результат всегда меньше 320, то поделить всегда получится подобным макаром.Для процессора EPM570 это заняло только 150 LE, то есть, этот код влазит даже в EPM240.
18 фев 2023 Сб
Солнечное затмение, демка
Не выдержала моя душа и я все-таки нарисовал эту демку кодом.
Ничего особенного, просто решил поделиться с миром моим ненужным достижением. Просто когда-то давно рисовал эту картинку на FreeBasic, но все время про это думал и решил, что надо и на С нарисовать. Еще я хочу сделать картину, где поезд едет, это будет непросто, но я буду пробовать все равно.
Ничего особенного, просто решил поделиться с миром моим ненужным достижением. Просто когда-то давно рисовал эту картинку на FreeBasic, но все время про это думал и решил, что надо и на С нарисовать. Еще я хочу сделать картину, где поезд едет, это будет непросто, но я буду пробовать все равно.
09 фев 2023 Чт
Установщик "Прокрастинатор ОС"
Вчера вечером мне пришло осознание того факта, что я — прокрастинатор, а значит, мне нужна операционная система, которая тоже будет ленивая и тоже будет постоянно всё откладывать на светлое будущее. И вот я достал из закромов SDL2 шаблон, встроил туда поддержку рисования Tahoma 11px шрифтов и начал что-то делать. В итоге, смог сделать, что хотел, а именно, демо с установщиком якобы операционной системы. Сгенерировал и выложил к себе на ю-туп. Получилось неплохо, мне понравилось. Система "ставится" 5 минут, довольно быстро.
Вот примерно чем занимается этот "скрипт" поначалу.
А еще мне хочется сделать графический интерфейс пользователя, который бы напоминал 95 или 98 винду. Ясно почему, из-за того, что впервые эту винду увидел, вот и понравилось, синдром утенка. И вот, только, учитывая ранее сказанное в моих постах, в частности, за вчерашний день, делать надо так, чтобы потом не затягивать, как обычно, на 10 лет или больше, а побыстрее как-нибудь. Раз так, то делать надо исключительно какую-нибудь декоративную вещь, сойдет и так. Ничего запускать она не будет, работать тоже, но чтобы выглядело красиво, потыкать чтобы можно было и закрыть.
Делать ли мне на плис? Не знаю. Сначала надо SDRAM доделать, а потом уже делать что-то, поэтому делать на плисе не буду. Не то что бы не хотел. Незачем просто это делать. Подумал, может выбрать частоту 25 мгц для памяти, хоть это и медленно... тоже не уверен ни в чем. Так что вариант с плис отменяется сейчас. Значит, надо сделать на Си++ для SDL2. Глупо, конечно, но это же демо, так что можно хотя бы чуть-чуть сделать.
Вот примерно чем занимается этот "скрипт" поначалу.
А еще мне хочется сделать графический интерфейс пользователя, который бы напоминал 95 или 98 винду. Ясно почему, из-за того, что впервые эту винду увидел, вот и понравилось, синдром утенка. И вот, только, учитывая ранее сказанное в моих постах, в частности, за вчерашний день, делать надо так, чтобы потом не затягивать, как обычно, на 10 лет или больше, а побыстрее как-нибудь. Раз так, то делать надо исключительно какую-нибудь декоративную вещь, сойдет и так. Ничего запускать она не будет, работать тоже, но чтобы выглядело красиво, потыкать чтобы можно было и закрыть.
Делать ли мне на плис? Не знаю. Сначала надо SDRAM доделать, а потом уже делать что-то, поэтому делать на плисе не буду. Не то что бы не хотел. Незачем просто это делать. Подумал, может выбрать частоту 25 мгц для памяти, хоть это и медленно... тоже не уверен ни в чем. Так что вариант с плис отменяется сейчас. Значит, надо сделать на Си++ для SDL2. Глупо, конечно, но это же демо, так что можно хотя бы чуть-чуть сделать.
<< Ранние записи |
Поздние записи >>