利用3D API中是不容易的任务;尽管OpenGL支持仍然大部分缺失,并且API因此具有很高的理论性,但至少直到我通过Direct3D实现达到体面里程碑,并在OpenGL上找到一些体面的文档,我才能尝试建立OpenGL变体,看看我能得到多少,以及我的假设有多少符合实际。
当我看到实现OpenGL仅仅是现有设计的微风,或者(更可能)当我决定放弃OpenGL(或许更有可能)的时候,我很可能会对这样的天才感到惊讶。和MacOS + Linux一起)完全:-)
我可以这样做,因为它是一个私人宠物项目,永远不会完成。对于任何有可能完成的事情,或者需要完成的事情,我都会建议不要这样做。这是很多工作。
事情,你需要做的,至少包括:
- 让您的API足够抽象所以有两种渲染API之间不存在应用程序可见的差异,而不是失去的性能(所以不要做的事情在一些抽象数据集合中有一百万个顶点并且每次都将其转换为Direct3D或OpenGL以获得最大的灵活性,但这只会给您一个幻灯片。因此,在我看来,要走的路是对的渲染API实际上与更高级别的数据,如模型或场景,而不是顶点和三角形)
当然工作,对我来说是重要的问题是,我我不仅试图在不丢失性能的情况下将Direct3D和OpenGL抽象出来,还尝试在此过程中构建3D-gfx知识。这使得很难提出“最好”的设计,并且需要很多回头。
- 决定你如何处理着色器(目前,我决定不处理这些,只是要求应用程序提供这两种实现)。我目前的主要希望在于着色器 - 假设一旦我得到所有技术细节和API特定的东西,2012年的3D图形应该主要是在数据和缓冲区上运行着色器。
当然,我可能都是错误的,Direct3D/OpenGL是可以通过使用宏的1:1映射处理的相同的东西,但我很积极,这并不那么简单。它仍然可以在具有一组固定功能的相同硬件上运行,我甚至相信HLSL和GLSL足够相似,最终可以为这两种语言构建统一的语言。
不过,我写这里所有散布在这里的原因是让你灰心。据我可以告诉(并猜测是什么,你可能从来没有听说过我的名字 - 让你自己猜测这意味着什么)这是一个相当大的挑战。