pyglet微型教程。
我一直在学习使用pyglet编程图形,pyglet是opengl的python绑定。 我注意到,没有任何真正伟大或清晰的教程可以真正解释问题。 大多数教程在添加代码时都没有解释每一行代码负责做什么。 最后一点在缝隙学中特别成问题,因为设置和选项太多了。 还要注意的是,许多设置实际上并不会做很多事情,而只能与其他设置一起使用。
- Exoskeleton博士的奥秘以及他可以教给您有关事件的知识。
- Os Estados Unidos segundo一个Rockstar Games
- 里约热内卢使非洲梦想成真
- 电竞赛车做慈善!2018 Sideways 24小时大型耐力赛
- Spellspire评论
在本教程中,我们将介绍一些基础知识以帮助您入门和一些小怪癖。 最终,我们将在以后的教程中渲染3D对象和结构。 在本教程结束时,我们将制作一个类似于飞机螺旋桨的动画!
在pyglet中进行其他操作之前,我们需要创建一个窗口。 窗口实际上是一个出现在屏幕上的空框:
在下一节中,我们将使用此窗口并覆盖事件方法。 这些事件是在此窗口中发生某件事时触发的功能。 我们将覆盖我们创建的窗口对象上的on_draw
函数。 加载窗口时,会在开始时触发一次此事件。 有一些方法可以更新和重绘窗口中的内容,但我们将在后面的文章中介绍。 我们使用装饰器@win.event
覆盖此功能,该装饰器内置于我们创建的窗口对象中。 让我们重写该函数,看看会发生什么……
信不信由你,这条线是3D结构! 但是有一些警告。 如果将数字置于z的[-1,1]范围之外,则该顶点将不会出现。 另一个警告是,此z值并不总是在[-1,1]中,但现在是(我知道这有点愚蠢)。 这条线很无聊。 让我们通过将其制作成动画来说明问题; 我们将使线旋转。
它应该输出像转轮一样的动画,如下所示:
让我们稍微解释一下代码。 PointsInCircum
方法(我是从堆栈溢出中PointsInCircum
)获取以0为中心的圆中的所有点。我们将使用它来生成与直线的圆心相连的点。 我们得到其中的20点并将其转换为numpy数组。 现在,此numpy数组的形状为20×2,其中2个元素按此顺序分别是y和x 。 好的,我们如何使窗口连续重绘? 我们使用了pyglet.clock.schedule(update_frame, 1/10)
函数调用。 它每1/10秒调用一次update_frame
函数,然后也调用on_draw
事件(这是在on_draw
完成的)。 我们将使用调度程序来递增并抓住圆中的下一个点,并将其存储在名为frame的变量中,然后告诉on_draw
绘制当前由frame引用的任何点。 这是update_frame
,因为update_frame
和on_draw
都可以看到frame
变量。 每次调用on_draw
方法时, glClear(GL_COLOR_BUFFER_BIT)
清除“颜色缓冲区”。 那是什么? 这个数组存储您在屏幕上看到的所有彩色像素。 glClear
表示清空一个东西,而GL_COLOR_BUFFER_BIT
告诉opengl清空哪个东西。 该位实际上是数据结构的索引,该数据结构存储屏幕上所有颜色的列表。
我做了一个双换环,并把这个轮子贴在屏幕上,结果很酷。 刚开始时质量有点差,但在后期将有所提高:
您还可以通过在PointsInCircum:
增加n=100
来使旋转更加平滑PointsInCircum:
这个动画是非常基本的,如果要真正做到这一点,您可能会使用界面更友好的东西,例如精灵。 以下是一些有关如何制作真实动画的示例。 如果您有兴趣学习有关opengl的知识,则应该查看我的其他文章,其中我将对基础知识进行系列教程。
本微型教程就是这样! 在下一个中,我们将制作3D对象,这样应该会更加有趣。 敬请关注! 如果您喜欢机器学习,游戏和图形,则应订阅我的时事通讯: Generation Machine ! 也可以在Twitter上关注我。 我总是在那里提问,所以请问他们!