トップページ -> プログラミング -> Panda3d (Python で動く3次元のゲームエンジン) -> Panda 3d で
[サイトマップへ], [サイト内検索へ]

Panda 3d で

Panda3d は,3次元のゲームエンジン.

サイト内の関連資料:

先人に感謝.

参考 Web ページ: http://www.panda3d.org/download.php?sdk&version=devel


1. 前準備

  1. C:\Panda3D-1.9.4-x64\models\ を開くと、「.egg.gz」のファイルがあることを確認

    これらは 3次元モデルのファイル

    [image]

    「無いよ!」というときは、別のディレクトリを探す。

  2. C:\Panda3D-1.9.4-x64の下に,mymodelのような名前でディレクリを作る
  3. このディレクトリに、次のファイルをダウンロードする

2. Wavefront OBJ 形式ファイルの読み込み

  1. テキストファイルの中身を次のように書く
    テキストエディタを用いてファイルを作成する.

    ※ 参考のため,Visual Studio Code で Panda3d を使う手順を別のページで説明している.

    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
     
    class HelloWorld(ShowBase):
     
        def __init__(self):
            ShowBase.__init__(self)
     
            self.scene = self.loader.loadModel("models/environment")
            self.scene.reparentTo(self.render)
            self.scene.setScale(1, 1, 1)
            self.scene.setPos(0, 0, 0)
      
            self.circle = self.loader.loadModel("models/mymodel/circle.obj")
            self.circle.reparentTo(self.render)
            self.circle.setScale(1, 1, 1)
            self.circle.setPos(-6, 20, 0)
    
            self.cone = self.loader.loadModel("models/mymodel/cone.obj")
            self.cone.reparentTo(self.render)
            self.cone.setScale(1, 1, 1)
            self.cone.setPos(-4, 20, 0)
    
            self.cube = self.loader.loadModel("models/mymodel/cube.obj")
            self.cube.reparentTo(self.render)
            self.cube.setScale(1, 1, 1)
            self.cube.setPos(-2, 20, 0)
    
    
            self.cylinder = self.loader.loadModel("models/mymodel/cylinder.obj")
            self.cylinder.reparentTo(self.render)
            self.cylinder.setScale(1, 1, 1)
            self.cylinder.setPos(0, 20, 0)
    
    
            self.plane = self.loader.loadModel("models/mymodel/plane.obj")
            self.plane.reparentTo(self.render)
            self.plane.setScale(1, 1, 1)
            self.plane.setPos(2, 20, 0)
    
    
            self.sphere = self.loader.loadModel("models/mymodel/sphere.obj")
            self.sphere.reparentTo(self.render)
            self.sphere.setScale(1, 1, 1)
            self.sphere.setPos(4, 20, 0)
    
    
            self.torus = self.loader.loadModel("models/mymodel/torus.obj")
            self.torus.reparentTo(self.render)
            self.torus.setScale(1, 1, 1)
            self.torus.setPos(6, 20, 0)
    
    app = HelloWorld()
    app.run()
    

    [image]
  2. テキストファイルを,保存する.

    ファイル名は何でもよいが、日本語などの全角文字は避ける.拡張子は「.py」にする.

  3. 実行する.

    ※ 参考のため,Visual Studio Code で Panda3d を使う手順を別のページで説明している.

    Windowsのコマンドプロンプトを使いたい場合には, 次のコマンドを実行.

    cd <先ほど保存したディレクトリppython hoge.py
    
  4. プリミティブが白く表示されるので確認する.

    [image]
  5. マウス操作

    [image]

    結果を確認したら,右上の「x」をクリックして終了. 

演習問題:上の手順で3次元モデルを表示しなさい.マウス操作も行いなさい.


Ambient This is the color of the object as it appears in the absence of direct light. This will be the multiplied by any ambient lights in effect on the material to set its base color. material.setAmbient((R,G,B,A)) Diffuse This is the primary color of an object; the color of the object as it appears in direct light, in the absence of highlights. This will be multiplied by any lights in effect on the material to get the color in the parts of the object illuminated by the lights. material.setDiffuse((R,G,B,A)) Emission This is the color of the object as it appears in the absence of any light whatsover, including ambient light. It is as if the object is glowing by this color (although of course it will not illuminate neighboring objects) light none ambient diffuse from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader from panda3d.core import Material class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.material1 = Material() self.material1.setShininess(5.0) #Make this material shiny self.material1.setAmbient((0.2, 0.2, 0.2, 1)) #Make this material blue self.material1.setDiffuse((0, 0, 1.0, 1)) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) self.circle = self.loader.loadModel("models/mymodel/circle.obj") self.circle.reparentTo(self.render) self.circle.setScale(1, 1, 1) self.circle.setPos(-6, 20, 0) self.cone = self.loader.loadModel("models/mymodel/cone.obj") self.cone.reparentTo(self.render) self.cone.setScale(1, 1, 1) self.cone.setPos(-4, 20, 0) self.cube = self.loader.loadModel("models/mymodel/cube.obj") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(-2, 20, 0) self.cylinder = self.loader.loadModel("models/mymodel/cylinder.obj") self.cylinder.reparentTo(self.render) self.cylinder.setScale(1, 1, 1) self.cylinder.setPos(0, 20, 0) self.plane = self.loader.loadModel("models/mymodel/plane.obj") self.plane.reparentTo(self.render) self.plane.setScale(1, 1, 1) self.plane.setPos(2, 20, 0) self.sphere = self.loader.loadModel("models/mymodel/sphere.obj") self.sphere.reparentTo(self.render) self.sphere.setScale(1, 1, 1) self.sphere.setPos(4, 20, 0) self.sphere.setMaterial(self.material1) self.torus = self.loader.loadModel("models/mymodel/torus.obj") self.torus.reparentTo(self.render) self.torus.setScale(1, 1, 1) self.torus.setPos(6, 20, 0) app = HelloWorld() app.run()

本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]