Зачем нужны однородные координаты?
По большому счёту, однородные координаты нужны с единственной целью - чтобы при получении экранных координат точки не нужно было различать ортогональную и перспективную проекции. В остальных ситуациях их полная поддержка была бы только лишней тратой ресурсов.
Сразу надо сказать, что матрицей 3*3 вы не обойдётесь. Такие матрицы описывают только поворот, а в перемещениях объекта и камеры в 3D есть ещё сдвиги. Поэтому нужна матрица, по меньшей мере, 3*4 (в конвенции компьютерной графики, когда вектор это строка а не столбец).
В терминах линейной алгебры пользоваться такими матрицами неудобно, поэтому к ним добавляют столбец (0,0,0,1), а к координатам точки - четвёртую координату 1. Де-факто мы при этом получаем проективное пространство, представленное однородными координатами. Но при любых операциях над матрицами и точками у нас последний столбец всегда будет (0,0,0,1), а последняя координата точки - 1. 
Если знать это, то можно хорошо сэкономить: для хранения матрицы хватит 12 чисел вместо 16, для перемножения двух матриц - 36 умножений вместо 64, а для умножения матрицы на точку - 9 умножений вместо 16. Надеюсь, что в реальных проектах так и делают. 
Но есть одно место, где последний столбец не равен (0,0,0,1), и четвёртая координата точки может отличаться от 1 - это перспективная матрица для вывода на экран (ссылку вам уже дали). Для вывода точки (x,y,z) результат её применения может быть, условно, (x,y,z,1) - тогда имеет место ортогональная проекция, и выведется точка (x,y), а может - (x,y,-1,z) - тогда координаты точки окажутся (x/z,y/z), и проекция будет перспективной. Хватило бы одного бита - как интерпретировать точку, делить ли на z. Но разработчики компьютерной графики решили, что матрица 4*4 и однородные координаты - это более эффективно. Им виднее.
Однородные координаты нужны чтобы изучать проективные преобразования. На самом деле, я точно не знаю, где в компьютерной графике применяются именно трехмерное проективное пространство, но проективная плоскость действительно возникает часто. 
Например, пусть на столе лежит вырезанный из бумаги плоский многоугольник. Тогда, если Вы сделаете фотографию, то совершите отображения плоскости стола на плоскость фотографии, а Ваш многоугольник отобразится в некоторый другой многоугольник. Такое преобразование нельзя описать матрицей 2x2, хоть Вы и совершили преобразование "плоскости" на себя. Поэтому, чтобы адекватно изучать такого рода преобразования нужны однородные координаты. 
Это важно в задаче распознавания. Например, у Вас есть фотография какого-то объекта в базе данных. Затем Вы хотите найти этот объект на другой фотографии. Т.к. при фотографировании Вы совершаете проективные преобразования, то нужно искать какие-то характеристики, которые не меняются при таких преобразованиях, т.е. инварианты. Затем можно написать программу, которая считала бы эти инварианты, и таким образом сравнивала объекты на снимках между собой.