Fly motion vision and resultant compensatory optomotor responses are a classic example for neural computation. Here we review our current understanding of processing of optic flow as generated by an animal's self-motion. Optic flow processing is accomplished in a series of steps: First, the time-varying photoreceptor signals are fed into a two-dimensional array of Reichardt-type elementary motion detectors (EMDs). EMDs compute, in parallel, local motion vectors at each sampling point in space. Second, the output signals of many EMDs are spatially integrated on the dendrites of large-field tangential cells in the lobula plate. In the third step, tangential cells form extensive interactions with each other, giving rise to their large and complex receptive fields. Thus, tangential cells can act as matched filters tuned to optic flow during particular flight maneuvers. They finally distribute their information onto postsynaptic descending neurons, which either instruct the motor centers of the thoracic ganglion for flight and locomotion control or act themselves as motor neurons that control neck muscles for head movements.