Do you use ID3DXMesh to load the .x files? Then it's just a matter of locking it's vertex-buffer by calling LockVertexBuffer() and reading data from that buffer. The same can be done with the indexbuffer, if you want to know how the different vertices are used to form triangles. Check MSDN for more information about this:

http://msdn.microsoft.com/en-us/library/bb205749(VS.85).aspx

But i still do not understand your way of collision checking using points. Are you just checking whether any point lies at the other side of let's say a wall?

If you check your meshes against planes and bounding spheres it's okay. But if you want to check collision between two meshes that are both made up of these points, it'll never work. It is extremely unlikely that any point of Mesh A lies on the exact same location as a point of Mesh B. Moreover, it can happen that a small cube (made up of 6 points) lies completely inside a bigger one. A collision check using your points approach will tell us that there is no collision because none of the points of the two meshes are on the same location. It should tell us that a collision has occured because they obviously intersect.

I suggest to think in terms of volumes rather than points. Volumes consist of an infinit ammount of points and will be reliable. Checking two volumes against eachother is like checking whether two collections of an infinit ammount of points share some points. you can use spheres (the easiest way)... Or planes, axis-aligned boxes, oriented boxes (they have rotation)... You could also check out the seperating axis theorem that describes how to check for collision between two convex volumes but that's slightly more advanced.

Hope this helps you.