Я особо не вникал ни в твой код, ни в код скинутых тобой примеров, так что пишу от балды.
Кароч, да, то что ты сделал - не растеризация. Мне лень полностью вникать в твой код, но похоже что ты кидаешь луч из каждого пикселя и проверяешь столкновение луча с полигонами.
Это медленно, потому что ты в КАЖДОМ из миллиона(ов) пикселей проверяешь столкновение со всей сценой.
А растеризация работает не так. Здесь ты просто проецируешь вершины полигона на плоскость экрана
Всё что остается сделать - залить цветом треугольник на 2д холсте.
Всё, никаких столкновений, никаких лучей, никаких проверок.
А как проецировать? Ну для этого каждую вершину нужно тупо умножить на такую волшебную штуковину как проекционная матрица. Вот что она делает...
Если ты хочешь именно трассировку лучей, гугли octree, bvh-tree (quad-tree для 2d случая).
Можно заворачивать объекты в сцене в AABB - коробки, сначала с ними поводить проверку на столкновение, и только потом с полигонами.
Для быстрого рендера, но низкого качества лучше использовать другой путь - растеризацию (в играх используется чаще всего).
Если gpu, то используй webgl