What I would do is create two implementations, one for fixed function and one for vertex shader support.
Both use same principles, but one is done on CPU and other on GPU.
What you need to do for morphing is not only have two meshes with same number of verts, but the verts also have to be ordered the same way and roughly the same spacial positions (verts on top of the source mesh should also be on top of the dest mesh). The best way to do this is to use 3ds max's conform functionality.
You're going to a sphere, so that is actually going to be easy, but let me take an example of a robot morphing into a sheep instead
What you do is have your original two meshes and then two morphing meshes. You take a sphere in 3ds max with an appropriate number of verts, size it larger than your robot, place it over your robot. Use the conform feature of max to get the sphere to conform to the robot's shape, choosing the option that gets it to move all the verts of the sphere into the robot - read the docs to find out about how to do it. You now have a robot shaped blob - the sphere verts have moved in towards the robot mesh. You can manually adjust the verts now of this blob by applying an edit mesh modifier and do some fine tuning, or just leave as is for now.
Do the same for your sheep using exactly the same type of sphere, same number of verts, etc.
You now have your two morph targets with same number of verts, and the verts are in positions that will allow them to morph nicely. You'll need to texture them similar to your robot and sheep meshes, but probably want to create a single texture even though your original meshes may have been made from multiple different textures. This is because during morphing, you want all the verts to stick together, and perhaps they'd split apart, I'm not sure.
Now, when you want to morph from robot to sheep, the verts all match up - there's the same number, and the winding is the same. You can easily move each vert from robot to sheep using interpolation on CPU and the verts won't all cross each other and look messed up during the morph. So, hide your real robot, show your morph robot, over several frames adjust positions of the robot morph mesh verts towards the position of the sheep morph mesh verts. When morph finished, hide morph mesh and show real sheep model.
Now, to do GPU morphing what you need to do is create a single mesh out of your two meshes, with two positions for each vert. One position is the source position, one is the dest position, then pass a time value (0.0 to 1.0) in a shader constant to interpolate position between source and dest position values in the shader.
You'd probably want to also do some funky material fading between robot textures and sheep textures during the morph.
I've always been meaning to put together a demo of this, but haven't had the time or the need so far.