That's quite a complicated problem.

If your room-models are very low poly, you could check your player-model's sphere against every triangle of the current room he's in.

An article on collision-detection:


http://www.peroxide.dk/papers/collision/collision.pdf


If your room is high poly, doing this would probably be too CPU-intensive. Then you'd have to make a collision-mesh out of it with a reduced ammount of triangles and do the same. You could also scan your triangles to find unique planes and check them against the sphere of your player-object, but you'd need to limit each plane to it's own area because otherwise you wouldn't be able to enter a door. I've never done this, but i can tell that especially the latter really tests your math skills.