我对图形编程比较陌生,所以我想从最基本的开始。我看到像PyOpenGl这样的库提供了对opengl api本身的绑定。现在,我真的想自己创建像PyOpenGl这样的东西,这样我就可以理解一切在这个过程中是如何工作的。
我可以创建像PyOpenGl或GLFW这样的库吗?如果是这样,请给我一些关于我该怎么做的一般提示。
如果没有,请向我解释为什么我不能创建自己的约束,如果上面的问题听起来很荒谬,我会道歉。
答案 0 :(得分:2)
PyOpenGL
是一个相当薄的包装器,在大多数情况下,只需将Python函数调用转换为同名本机机器代码函数的调用。有一些小细节,比如调用混合中的约定,但这些实际上是无聊的东西。事实是(就OpenGL而言)你使用PyOpenGL在Python中编写的源代码看起来几乎与你用C编写的源代码相同.PiOpenGL有一些“聪明”的东西,比如提供方法。接口NumPy数组接受采用数据指针参数的OpenGL调用,但这只是保持住。
当您使用C语言进行OpenGL调用时,或者甚至更极端 - 汇编语言(完全可能),这是您可以使用的最低级别(使用OpenGL),而不是编写自己的GPU设备驱动程序。编写GPU设备驱动程序是一项超级努力工作;它需要数百万行C代码(据说NVidia的OpenGL实现包含大约约40M的LoC,有AMD和Intel GPU的开源驱动程序,每个都有MLoC)。
如果您对某些中间立场感兴趣,请查看Vulkan API。如果您想为图形编写更高级别的包装器,我建议您为Vulkan实现一些更高级别的API /渲染器并将其与Python连接。作为一种学习经历(恕我直言),这可能会更有价值。
答案 1 :(得分:0)
OpenGL API存在于显卡的驱动程序中。所有OpenGL功能都在那里。你只需要知道如何获得它们。正如Spektre所说,过程是:
glext.h
,然后从中提取它们
司机。除了标准的OpenGL功能外,供应商还添加了自己的功能
一些,称为“扩展”。你可以看到GLEW如何完成这项工作。如果您要设置所有功能和扩展程序,请创建一个使用glext.h
的脚本,因为其中大约有一千个。{/ li>
醇>
您可以从https://www.opengl.org/registry/
下载glext.h
做一些像GLFW这样的事情,需要添加到前两点,知道如何创建窗口并处理键盘和鼠标的消息。这再次取决于操作系统。在Windows上有一种方法。在Linux上,它取决于所使用的窗口管理器,例如GTK +。或直接X11。还是......
无论如何,我最好的建议是你可以阅读GLEW和GLFW如何做,查看他们的代码。但不要浪费太多时间。喜欢获得OpenGL的经验,并让这些“挖掘”以后再使用。