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:
- Python 2.4
- Psyco
PyOgre (Media + PyOgre) (decomprimere i media nella cartella C:\Python24\pyogre\demo)
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