我知道Kivy公开了它的OpenGL上下文和一些原始接口。如果您直接使用OpenGL 篡改,或使用 kivy.graphics.trasformation 等较低级别的模块,那么这对更高级别的小部件有什么影响?一切都是无缝合作的,还是低级别的openGL函数有破坏布局或制作小部件的习惯?
小部件是否在实施中完全3D;虽然他们的界面针对2D? 我应该使用python来展平我的3D模拟,并且远离低级别的api?
我不能从网格构建完整的3D对象,但是有一些简单的硬件加速转换和纹理操作/混合/投影会很好。
我希望在混合高级和低级api时提供一系列警告的答案,或者考虑到2.5D设计的现有项目框架(我见过的大多数项目都非常重视3D对象生成)
我想设置一个显示为多个分层2D平面的场景(使用精灵/绘图API /窗口小部件),但技术上是在3D场景之后建模的。场景的深度不需要全3D支持,但可以从3D相机平移/旋转中受益。
我想使用高级Kivy for Widgets和绘制API。现在绘制顺序和缩放应该给我的场景我想要的深度。但我不确定如何获得某些缩放/平移效果。
我希望使用 garden.particlesystem (根据我的理解设计为平面2D小部件)。我计划堆叠3个实例,最终创建流体管道模拟。 我不需要先在第一个版本上进行沉重的3D> 2D投影,但最终我可以看到它成为一个问题。
答案 0 :(得分:3)
一切都是无缝合作的,或者低级别的openGL函数是否有破坏布局或制作小部件错误的习惯?
小部件实际上并不了解或关心图形正在做什么 - 如果您自己的操作意味着图形与小部件位于不同的位置,那么将会破坏它们,这样用户就不会点击小部件中的正确位置。
您通常可以通过跟踪转换矩阵并将其应用于触摸来查看它是否真的发生碰撞来避免这种情况。这就是Scatter小部件的功能,允许任意的平面内旋转和缩放,而不会破坏它包含的小部件。这样做的难度通常取决于你正在做什么。
要直接回答您的问题,使用低级指令和小部件之间没有固有的冲突。
小部件是否在实施中完全3D;虽然他们的界面是针对2D?
Kivy的主要背景并没有启用gl深度测试,所以没有任何3D剪辑或任何东西,但它仍然是opengl,你可以传递和操纵3d如果你想要顶点坐标。
您发布的示例使用了一种通常有用的技术,即使用RenderContext替换窗口小部件画布(插入到父上下文中的指令列表)(这使您可以在本地启用深度测试等等)作为此上下文的着色器设置。)
我可以使用此渲染器模板扩展大多数内置小部件吗?
原则上我是这么认为的,但我认为它会比你想象的更多,让一切都以有用的方式实际运作,这取决于你究竟在做什么。这包括如果你开始搞乱上下文的投影,翻译或旋转的问题,那么你必须适当地翻译触摸,如果你想让小部件继续工作,这听起来很烦人。
Renderer的多个实例会并排工作吗?
是
嵌套?
我是这么认为的,尽管您可能需要更加谨慎地从父母继承投影矩阵等。
我希望在混合高级和低级api时提供一系列警告的答案,
除了上述内容之外,我没有什么可说的,这是部分受过教育的猜想 - 之前没有人做过这种性质的工作。
您可能对nskrypnik的github存储库感兴趣,它有一些很好的3D示例(不完全是您正在尝试的,但api使用的一般原则是相同的),或者tshirtman'最近发布的kivy garden中的ddd(3d)模块再次证明了同样的事情。我猜他太谦虚了,不能在他自己的回复中发帖!
编辑:
场景的深度不需要全3D支持,但可以从3D相机平移/旋转中受益。
我不确定你在这里想到了什么,但是当使用几个平面时,生活在真正的分层2d中可能相对容易,并且在每个平面上单独应用适当的矩阵。这可能是可以跟踪的,并且可以让你轻松地适当地转换触摸,这样小部件工作正常(正如Scatter所做的那样......你甚至可以直接使用它,如果它不太重)。
答案 1 :(得分:1)