背景:素朴なチュクチプログラマーである私は、「Pythonは非常にクロスプラットフォームなので、息子のためにおもちゃを書いて、タブレットで実行し、遊ばせます」と考えました。その結果、KivyでOpenGLを使用する明確な例が見つからなかったため、PyOpenGL + pygameからkivyに移行するためのソリューションに出くわすのに2週間かかりました。おそらく私の経験は誰かが時間を節約するのに役立つでしょう。
免責事項:
私は、Android用の3Dグラフィックスを使用してPythonでアプリケーションを開発することを誰にも勧めません。これは最も賢いオプションではありません。しかし、本当にやりたいのであれば、読み進めることができます。
Kivyには、3Dグラフィックスを実行できるネイティブメッシュソリューションが組み込まれています。例もそれほど単純ではありません。私は裸のOpenGLを好みました。
おそらく私はアメリカがインドを見つけようとしているのを発見しました。より経験豊富な仲間が修正して追加することを願っています。
kivyで3Dグラフィックスの操作を開始する前に、ライブラリ全般とそのインストールについて読む必要があります(たとえば、マニュアルでは仮想環境の使用を推奨しています)。
何が問題ですか?Kivy開発者は、公式WebサイトでOpenGL関数の説明を巧妙に隠しています。唯一の問題は、それをどのように機能させるかです。
, PyOpenGL+pygame kivy OpenGL :
from OpenGL.GL import *
from OpenGL.GL.shaders import *
:
from kivy.graphics.opengl import *
: PyOpenGL numpy , kivy tobytes(). kivy glPixelStorei glTexImage2D glTexStorage2D glTexSubImage2D. 2 ( in, out ) :
#ifdef GL_ES
precision highp float;
#endif
- - . PyOpenGL+pygame :
#:
import pygame
from pygame.locals import *
def init():
pygame.init()
pygame.display.set_mode((Width, Height), HWSURFACE | OPENGL | DOUBLEBUF)
''' , PyOpenGL '''
def main():
init()
while True:
''' '''
pygame.display.flip()
kivy App, , Widget. , Window, kivy . Window - WindowBase.
:
#:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.base import EventLoop
from kivy.clock import Clock
def init():
''' , OpenGL '''
init()
class CustomWidget(Widget):
def __init__(self, **kwargs):
super(CustomWidget, self).__init__(**kwargs)
def update_glsl(self, nap):
''' '''
Window.flip()
class MainApp(App):
def build(self):
root = CustomWidget()
EventLoop.ensure_window()
return root
def on_start(self):
Clock.schedule_interval(self.root.update_glsl, 40 ** -1) # FPS
if __name__ == '__main__':
MainApp().run()
( OpenGL), . , Window flip(), . WindowBase. , , MainApp:
def passFunc(W):
pass
class MainApp(App):
def build(self):
root = CustomWidget()
EventLoop.ensure_window()
# :
Window.on_flip = lambda W = Window: passFunc(W)
return root
? , apk- . , (. , , ):
spec- .
- ? . - . FPS 51 15 25. :
その間、私の息子は私の役を演じることを拒否しました、まあ、少なくとも彼は興味を持って見えます。2歳児向けのフラットドローゲームの方が適していることがわかりました。これがすべての始まりです: