说实话,困难的部分不是API,它是更高级别的3D东西.下面两个API都有顶点缓冲区,索引缓冲区,纹理,着色器等等,虽然它们以不同的方式表达,但这些概念不是API的难点.如果您了解d3d11,那么您很快就会获得opengl,反之亦然.
实际考虑因素是opengl可以在更多平台上使用,但d3d往往更好地支持并且在Windows平台上运行得更好.d3d有一个更面向对象的接口,而opengl有一个严格的"c"样式接口(尽管它通过"名称"和句柄在内部处理对象).这可能使得opengl比d3d11更容易开始学习,而d3d11需要相当多的设置 - 但在"真实"的应用程序中,它不会有太多.
d3d11旨在更好地在多核cpu和多线程软件上运行.这增加了使用它的一些复杂性,但允许您在此时更多地利用硬件然后opengl.(但是,如果你仍处于询问使用哪个阶段,那么对你来说这不太重要!)
找到d3d9的文档要比opengl容易得多(我的意思是"现代"的东西,而不是使用过时的做事方式的例子(这是opengl的一个问题,很多教程和代码都坦白地说)过时并且现在没有真正使用opengl.)然而,很难找到好的d3d11示例和教程.
如果你没有使用过,我会非常推荐学习BOTH的基础知识以及对相同基础功能的略微不同的方法.不要陷入困境,说一个比另一个更好,学习两者,看看哪个更合适.这是大多数人所做的事情,不幸的是,你在互联网上获得的大多数"建议"似乎是来自决定推动一个或另一个API对他们很重要的人!
当我学习使用创建纹理,顶点缓冲区,索引缓冲区,渲染集合等的小型c ++框架来抽象出差异时,我发现它是一个有用的练习,并根据两种apis /来实现这些概念.