PyOgre Tutorial 01


<!> Questa è una traduzione non ufficiale; il testo originale in inglese si trova qui: http://www.ogre3d.org/wiki/index.php/PyOgre_Tutorial1.


Benvenuti al primissimo esempio di PyOgre. Prima di cominciare con l'esempio listato sotto, non dimenticarti di installare:

Framework dell'applicazione

Prima di tutto, abbiamo bisogno di impostare alcune linee del framework python per l'applicazione pyogre. Il framework è in grado di impostare il main-loop e definire una classe, che è derivata da una classe dell'applicazione sampleframework di ogre.

Preparazione

In primo luogo, si dovrebbe installare Python2.4, psyco, PyOgre e anche scaricare il pacchetto di supporti e decomprimere il pacchetto di supporti nella directory in cui il tuo file python Tutorial01.py verrà creato durante i passi successivi. I file multimediali devono essere relativi alla directory del tuo file python Tutorial01.py. Quindi, si devono copiare tutti i file dll e cfg dalla cartella di installazione di PyOgre (C:\Python24\lib\site-packages\pyogre) nella cartella in cui si trova il tuo file Tutorial01.py - ad esempio, C:\Python24\pyogre\tutorial01. (Non avrai bisogno di essi nel corso di questo esercizio, ma se si andrà avanti con la creazione di un eseguibile con py2exe, è buona abitudine avere tutte le risorse disponibili fin dall'inizio.)

Dichiarazioni di importazione

PyOgre è installato in C:\Pyton24\lib\site-packages\pyogre. I moduli devono essere importati prima di utilizzare queste istruzioni di importazione.

   1 import pyogre.ogre as ogre   #<<<<<--- Questo import accede a C:\Python24\lib\site-packages\pyogre
   2 import SampleFramework as sf #<<<<<--- Questo import accede al file locale C:\Python24\pyogre\demos

La prossima della lista è la definizione di una classe framework che può gestire gli eventi. Il metodo _createScene è invocato quando l'applicazione è istanziata (cioè all'avvio dell'applicazione).

   1 class Tutorial01(sf.Application):
   2     def _createScene(self):
   3         [...]

Main Questo è il loop principale dell'applicazione che avvia l'applicazione pyogre.

   1     if __name__ == '__main__':
   2         application = Tutorial01()
   3         application.go()

Creazione della scena

Scene Manager

Ogni applicazione ha la sua scene manager (gestore degli oggetti che devono essere disegnati).

   1 mSceneMgr = self.sceneManager

Luce

Adesso aggiungiamo una luce ambientale allo schermo, dandole un colore piuttosto chiaro (RGB = 0.7, 0.7, 0.7)

   1 mSceneMgr.ambientLight = 0.7, 0.7, 0.7

Robot entity

Adesso creiamo la prima entity. Carichiamo la mesh di un robot dal file system. Puoi trovare degli esempi di mesh, texture e particelle nella cartella media, che si ha con il media-package addizionale della distribuzione binaria di PyOgre. I modelli si trovano su C:\Python24\pyogre\demos\media\models. Là c'è il file robot.mesh. Non dimenticarti di copiare la cartella media nella cartella dove il tuo interprete python è localizzato, dal momento che tutti gli accessi ai file sono relativi alla directory corrente.

   1 ent1 = mSceneMgr.createEntity( "Robot", "robot.mesh" ) #<<<<--- il file è trovato relativamente a Tutorial01.py => ...\media\models\robot.mesh

La texture del robot

Ora aggiungiamo una texture alla entity (i.e. robot.mesh). L'immagine della texture non è referenziata direttamente. Ogre è un grado di creare texture complesse, definendo come una texture deve essere usata da PyOgre. Le descrizioni delle texture si trovano nel file C:\Python24\pyogre\demos\media\materials\scripts\Example.material. Il file Exemple.material descrive quale immagine usare e quale tecnica attivare o disattivare (una spiegazione del file si trova alla fine di questo articolo). Per ora parliamo solamente del motore, quale descrizione di texture vogliamo usare con quel Robot.

   1 ent1.setMaterialName('Examples/RustySteel')

Creare un nodo

Fino ad ora, abbiamo creato soltanto l'oggetto dentro la memoria, ma non possiamo vederlo in un output grafico. Innanzitutto dobbiamo "montare" il robot nella scena. Ma prima di fare questo, dobbiamo creare un nodo, a cui possiamo attaccare il robot.

   1 node1 = mSceneMgr.rootSceneNode.createChildSceneNode("RobotNode");

Attaccare il robot al nodo

Adesso attacchiamo l'entity robot alla scene node.

   1 node1.attachObject(ent1)

Volta celeste

Così come il robot, troviamo un cielo nuvoloso all'interno della cartella media. Diciamo all'engine di estendere una volta celeste sulla scena.

   1 mSceneMgr.setSkyDome(True, 'Examples/CloudySky', 4.0, 8.0)

Telecamera

Simile all'entity, creiamo un cameraNode ed attacchiamo la telecamera standard dell'applicazione ad esso.

   1 cameraNode = mSceneMgr.rootSceneNode.createChildSceneNode()
   2 cameraNode.attachObject(self.camera)

E' tutto!

L'applicazione Tutorial01

Questo è il sorgente, ci abbiamo lavorato un bel po':

   1 import pyogre.ogre as ogre
   2 import SampleFramework as sf
   3 
   4 class Tutorial01(sf.Application):
   5    def _createScene(self):
   6        mSceneMgr = self.sceneManager
   7        mSceneMgr.ambientLight = 0.7, 0.7, 0.7
   8        ent1 = mSceneMgr.createEntity("Robot", "robot.mesh")
   9        ent1.setMaterialName('Examples/RustySteel')
  10        node1 = mSceneMgr.rootSceneNode.createChildSceneNode("RobotNode")
  11        node1.attachObject(ent1)
  12        mSceneMgr.setSkyDome(True, 'Examples/CloudySky', 4.0, 8.0)
  13        self.camera.setAutoTracking(True, node1)
  14        cameraNode = mSceneMgr.rootSceneNode.createChildSceneNode()
  15        cameraNode.attachObject(self.camera)
  16 
  17 if __name__ == '__main__':
  18    application = Tutorial01()
  19    application.go()

Materiale Examples/RustySteel

Dai un'occhiata al file di testo C:\Python24\pyogre\demos\media\materials\scripts\Example.material. Ci troverai la definizione delle textures.

{
        technique
        {
                pass
                {
                        texture_unit
                        {
                                texture RustySteel.jpg   <<<<<----- punta alla texture che si trova su C:\Python24\pyogre\demos\media\materials\textures
                        }
                }
        }
}

Anteprima: Frame Listener

Infine, il Frame Listener. Se si avvia il Tutorial01.py, è possibile utilizzare il mouse e la tastiera per spostarsi. Questo viene fatto dal FrameListener _createFrameListener integrato (grazie a sampleframwork.py!).

Che cosa sono i Frame Listener? Fondamentalmente, un Frame Listener è un oggetto che consente di aggiornare il vostro mondo. Esso dispone di due metodi che sono chiamati per ogni frame renderizzato (un 3D è solo un animazione - il motore renderizza un mucchio di fotogrammi al volo e li unisce insieme per voi, creando l'illusione del movimento), frameStarted e frameEnded. frameStarted è chiamato quando comincia rendering del frame. frameEnded è, avete indovinato, chiamato dopo che il rendering del frame finisce. È possibile utilizzare questi oggetti e metodi per interagire con il vostro mondo.

OGRE/PyOgre fornisce un Frame Listener di base chiamato ExampleFrameListener, il cui scopo è quello di permettere di muoversi nel mondo. Per ogni frame, controlla gli input di mouse e tastiera, e vi permetterà di apportare modifiche al mondo di conseguenza. In primo luogo, muove la telecamera attorno. Quando muovi il mouse, esso determina come ruotare la telecamera in modo che tu possa fare un "mouselook". Quando si premono dei tasti, determina cosa fare con quei tasti (Pensa a un gioco FPS). Sono consapevole del fatto che probabilmente questo ha poco senso, ma diventerà rapidamente chiaro come iniziare a utilizzarli. I frame listeners saranno utilizzati molto di più rispetto al muovere la telecamera, però. Pensateli come il principale loop del gioco. Una volta che il gioco è in esecuzione, esegui una qualsiasi e tutte le operazioni che desideri per influenzare il mondo con i Frame Listener [Once the game is running, you perform any and all operations that you wish to affect the world with in frame listeners.]. Se lo desideri, apri _createFrameListener (in sampleframwork.py) e navigaci. È abbastanza auto esplicativo, supposto che tu conosca alcune basi di matematica 3D, e dovrebbe darti un'idea di come funzionano. Basta ricordare che frameStarted e frameEnded sono le tue principali preoccupazioni.


Torna a PyOgreTutorial


CategoryDocumentazione

PyOgreTutorial/TutorialPag1 (last edited 2008-01-03 12:02:25 by IacoPy)