Read about the intriguing beginnings of the most widely accepted gaming API
Redline Racer (DirectX 5.0)
DirectX 5 shipped in July 1997 for Windows NT 5.0. DirectPrimitive was introduced in this version, which eliminated the need for applications to construct execute buffers. Version 5.2 with similar functions was released for Windows 95 (as 4.05.01.1600 (RC00)) and for Windows 98 (4.05.01.1998 (RC0)).
Heretic 2 (DirectX 6.0)
DirectX 6.0 was released in August 1998 along with the Windows CE implementation on Dreamcast. Different hardware features such as stencil buffers and multitexture, as well as support for x87, SSE and 3DNow! were introduced. Microsoft also licensed S3 texture compression (S3TC) from S3 Graphics Ltd and implemented it as DXTC to allow larger textures using hardware compression techniques. Environment mapped bump mapping was yet another feature that was developed by Bitboys Oy and licensed by Matrox, which was implemented. Microsoft started standardizing graphics features across different hardware manufacturers. Next up was version 6.1 released in February 1999 and then a quick-fix 6.1a in May, exclusively for Windows 98 SE.
Evolva (DirectX 7.0)
September 1999 saw the release of DirectX 7.0 for Windows 9x, while the Windows 2000 version of the same was released in February 2000. This was quickly followed by DirectX 7.0a in March. The GPU had born at that time (the NVIDIA GeForce 256 to be specific) and it featured hardware transform and lighting (TnL). So this feature was implemented in the version 7 of DirectX along with some other features such as support for .dds (DirectDraw Surface) texture format.
Disciples 2: Dark Prophecy (DirectX 7.1)
With the launch of Windows ME, came DirectX 7.1 in September 2000 and it was exclusive to this version of Windows.
As a cross-{platform, disciplinary} C++ developer (OpenSolaris as primary platform) I would not limit myself to a single platform (Windows) with a closed API. The Direct3D API requires explicit support from the hardware but with OpenGL you can make use of any hardware features through it's extension mechanism. e.g. In the early days of shader technology, the OpenGL shader path had been used to implement Direct3D-related shaders.