Сегодня я выделил отдел "Тридэ" (Куб) из раздела Математики и остался доволен "просто-рисуемым-кубом-иконки", потому что красиво получилось и наглядно. Сразу видно, что тут рисуют только кубы и достигли в их рисовании абсолютного совершенства.
Одной поздней ночью, лежа, как обычно, без сна ни в одном глазу и просматривая всю свою никчемную жизнь, я наткнулся на странный и непонятный алгоритм. Для того чтобы рисовать трехмерную графику, совсем не нужно держать в "памяти" огромный буфер глубины, да и вообще можно даже без него обойтись. Достаточно строчку за строчкой, пиксель за пикселем вырисовывать треугольники. Без вычислений конечно, не обойтись, ясное дело – если надо нарисовать какую-то просто текстуру, то надо всё равно делить да умножать, тут не деться никуда. Но можно просто полностью обойтись без буфера глубины! Вообще.
Единственной и однозначной проблемой будет только то, что рисовать придётся ровно кадр. А что есть кадр? Это 320 на 200 точек, то есть 64К пикселей и при скорости 25 мгц можно нарисовать 390 таких кадров (25М / 64K ~ 390). Если, допустим, я рассчитываю на 60 FPS, то в самом наихудшем однопоточном режиме я нарисую 6 треугольников на линии по всей длине и будет даже 60 кадров в секунду. Но зачем мне однопоток? Я вполне могу сделать 8 или даже 16 потоков (хотя кто знает), и вот уже магические 48 треугольников на линии появляются почти что ниоткуда, вот в чём штука и соль! И еще даже можно распараллелить на другие части, например, рисовать по 4 за раз. Тоже вариант.
Итак, это перспективное направление, и стоит копать в эту сторону хотя бы для того чтобы убедиться, что всё прошло гладко. Меня ведь даже 30 кадров в секунду полностью устроит. А куб... там максимум 4 треугольника на линию. Нарисовать такой куб вообще никакого труда не составит и даже еще останется. И это только однопоток! Так что, знаете, я всё-таки постараюсь сделать эту штуку, ибо зачем не делать, когда можно попробовать, правильно?