There is a simpler way to do this.
Method 1
- You're drawing from one point on the surface of one mesh to another point on the surface of another.
- You have the position of the center of the object, which means you have the position of the surface as well.
- The vertices of your object are all centered around the origin (the local center)
- The center of your object is transformed by the transformation matrix you give it.
- What this really does is transform all of those vertex positions.
- That vertex position is (still) on the surface, all you have to do is transform it.
Now, this works if you know which vertex you want to use, which it sounds like might be the case from how you asked your question. However, if you just want an arrow pointing from one mesh to the other without having it poking through the mesh, the next method may be better.
Method 2
If all you want to do is point from one mesh to another, and having a point exactly on the surface isn't important, this is the better method. What you do is calculate the bounding box or bounding sphere for your mesh and use that to quickly find how to draw your arrow.
Generate a bounding volume
a. When you read in all the vertices of your mesh, keep track of which one is farthest from the center. By the end, this will give you the radius of the sphere containing your mesh.
b. You can instead keep track of the greatest distances in each of the 6 directions (+-x,y,z) to generate a bounding box.
Calculate a line from the surface of the bounding volume to the surface of another. Now that you have either a box or a sphere, this should be very easy (especially for the sphere).