Насколько я помню (а это было на первом курсе), для вычесления координат вектора нормали требуется перемножение двух матриц. Так вот я вычислял координату z, если она отрицательна — поверхность невидима (в зависимости от того, какая сторона является лицевой — был доп. параметр, отвечающий за это).
Вот эта строчка:

Код:
vis = (o2.x*o2.depth-o1.x*o1.depth)*(o3.y*o3.depth-o1.y*o1.depth)-(o3.x*o3.depth-o1.x*o1.depth)*(o2.y*o2.depth-o1.y*o1.depth);
Глубину можно опустить в принципе, если не используется перспектива.