refactoring
Refactor perspective
refactor point and projection
add simple state machine
add simple state