Hm... that's one of those questions that could start a 1000-page flamewar, so I will try to write a reply without getting either side "insulted"... :p
This is just a very rough list of what I think are the 4 major points of each API:
Opengl:
- Crossplatform
- C-based functional API
- Up to 3.0, still keeps compatibility with almost every feature of the original OpenGL (3.1 drops some).
- Extension support allows to create new features without needing a new API version.
Direct3D:
- Windows-Only
- COM-based Object-oriented API
- Each new version of D3D has its own interfaces, meaning that while it loses the source code compatibility, you dont' have any "clutter" from deprecated stuff
- The feature set is fixed on each version of Direct3D. (In d3d9 there was a capabilities list, but since Direct3D10, Microsoft dropped that design and in D3D11, replaced it with "feature levels", so a level "11_0" device requires all features of d3d11, where a "9_0" device only requires direct3d 9.0 features)
As you might see, each one has its own advantages and disadvantages.
Personally, I think OpenGL is rather "messy", but I also think COM adds a bit too much code clutter which could be avoided.
I prefer Direct3D mostly because it seems a lot more organized. And it's clearly documented what you can do, and how to do it,
where openGL is more "free-form", and the optimal code path depends a lot on hardware, drivers, and operating system.