exercise 19: perspective projection