web-dev-qa-db-ja.com

pyGameは3Dを実行しますか?

この質問に対する答えはどこにも見つからないようです。 pyOpenGLなどを使用してopenGLを実行する必要があることは承知していますが、他の依存関係なしに非常に基本的な3Dグラフィックスを実行できるかどうか疑問に思いました。

23
eggbert

いいえ、Pygameは2DAPIであるSDLのラッパーです。 Pygameは3D機能を提供しておらず、おそらく提供することはありません。

Pythonの3Dライブラリには Panda3DDirectPython が含まれますが、特に後者は使用が非常に複雑です。

17
Kylotan

ええと、2Dができれば、いつでも3Dができます。 3Dはすべて、実際には2次元のサーフェスが歪んでいるため、奥行きのあるものを見ているような印象を与えます。本当の問題は、それがうまくできるかどうか、そしてあなたもそうしたいのかということです。 pyGameのドキュメントをしばらく閲覧すると、SDLラッパーのように見えます。 SDLは3Dプログラミングを目的としていないため、実際の質問に対する答えは「いいえ」であり、私も試してみません。

13
Wes P

Pygameでのみ疑似3Dゲーム(「Doom」など)を実行できます。

http://code.google.com/p/gh0stenstein/

また、pygame.orgサイトを閲覧すると、python andpygame)で実行される「3D」ゲームがさらに見つかる可能性があります。

ただし、本当に3Dプログラミングを始めたい場合は、OpenGl、Blender、またはその他の実際の3Dライブラリを調べる必要があります。

7
Horst JENS

Python Soyaは、pygameの表面に3Dグラフィックスをレンダリングできます。

3
Samuel Breese

3Dプロジェクション機能などが必要な場合は、3D APIを使用する必要がありますが、基本的な3Dルックを行う場合は、PeterのWebサイトチュートリアルをお勧めします: http://www.petercollingridge.co。 uk/pygame-3d-graphics-tutorial

2
alexpinho98

3Dとして表示されるのは、実際には2Dゲームです。結局のところ、あなたは画面を見ています。これは(通常は;))2Dです。仮想世界(3D)は平面に投影され、画面に表示されます。次に、脳はその2D画像を3D画像に変換し(目の画像と同じように)、3Dのように見せます。

したがって、3Dゲームを作成するのは比較的簡単です。多次元マトリックスを使用して仮想世界を作成し、それを各ループに2D平面に投影して、画面に表示するだけです。

(pygameを使用して)3Dプログラムに進むことができるチュートリアルの1つは、 これ です。

1

Pygameはもともと3Dを実行することを意図したものではありませんでしたが、任意の2Dグラフィックライブラリで3Dを実行する方法があります。必要なのは、3Dポイントを2Dポイントに変換する次の関数です。これにより、画面に線を引くだけで任意の3D形状を作成できます。

def convert_to_2d(point=[0,0,0]):
    return [point[0]*(point[2]*.3),point[1]*(point[2]*.3)]

これは、疑似3dまたは2.5dと呼ばれます。これは実行できますが、時間がかかる可能性があり、実行が非常に難しいため、3D用のライブラリを使用することをお勧めします。

PyGame用の3D​​ドライバーを簡単に作成できます。 PyGameには、3Dゲーム開発用のアセットがいくつかあります。現在、PyGameを使用してPy3Dドライバーを開発しています。終了したら、Py3Dをダウンロードするためのリンクを表示します。 PyGameで3Dゲームを作成しようとしましたが、PyGame用の小さなアドオンが必要です。 SDL、PyOpenGL、OpenGL、PyQt5、Tkinterを使用する必要があると考えるのは間違いです。それらはすべて、3Dゲームを作成するのに間違っています。 OpenGLとPyOpenGLまたはPanda3Dは学習が非常に困難です。それらのドライバーで作られた私のゲームはすべてひどいものでした。 PyQt5とTkinterはゲームを作るためのドライバーではありませんが、それらにはアドオンがあります。それらのドライバーでゲームを作ろうとしないでください。モジュールmath.pyを使用する必要があるすべてのドライバーは難しいです。小さなアドオンを簡単に作成できます。PyGameのドライバーは1〜2週間で作成できると思います。

0
Anton

Pygameは、ピクセルの色(およびプログラミングゲームに役立つその他の機能)を変更するための単なるライブラリです。これを行うには、画像を画面にブリットするか、ピクセルの色を直接設定します。

このため、本当に必要なのは上記だけなので、pygameを使用して2Dゲームを簡単に作成できます。ただし、3Dゲームは、画面に表示できるように2Dに「押しつぶされた」(レンダリングされた)3Dオブジェクトの一部にすぎません。したがって、pygameのみを使用して3Dゲームを作成するには、必要なすべての複雑な行列計算を含めて、このレンダリングを自分で処理する必要があります。

これには膨大な処理能力が伴うため、実行速度が遅くなるだけでなく、大規模な3Dレンダリング/ラスタライズエンジンを作成する必要があります。また、pythonが解釈されるため、さらに遅くなります。正しいアプローチは、(Py)openglを使用してGPUでこのプロセスを実行することです。

したがって、はい、pygameのみを使用して3Dを実行することは技術的に可能ですが、絶対にお勧めしません。 Panda3Dまたは同様の3Dエンジンを学ぶことをお勧めします。

0
CODINGeroo

あなたはこのように作ることができます:

def convert_2d(x, y, z, horizon):
    d = 1 - (z/horizon)
    return x*d, y*d
def draw_list_of_points(lst):
    '''Assume that lst is a list of 3 dimentionnal points like [(0, 0, 0), (1, 6, 2)...
    Let's take 200 for the horizon, it can give us a pretty clean 3D''' 
    for x, y, z in lst:
        pygame.draw.circle(screen, color, convert_2d(x, y, z, 200), 1)
But it's not very fast. If you want fast try to implement in C++/SDL2 or C.
Pygame is not very good for 3d graphics.
0
Henry