It seems that your problem is that you want to break MODEL and VIEW into separate matrices.
You can do that: just declare two matrix uniforms named mxModel and mxView (or whatever), and in your application, set them to the appropriate matrices. In fact, you may want mxModel, and mxViewProjection instead.
If you still want to use ftransform(), then you use that for position, but then when you need the world-space position, you multiply mxModel with gl_Vertex to get it.
When I do this I always like to send the inverse view matrix to the vertex program and not bother with the individual model matrices. The reason is because the model matrices might all be different, but the view matrix is the same for everything model, so you don’t have as many matrices to deal with. Since you always multiply your vertices by the modelview matrix, it’s easy to multiply again by the inverse view matrix to go back to world space.
Okay, as you people advised me,
I calculated the inverse of view matrix in main program and send it to vertex shader as unifrom.
And finally, I got a fine result!