Le librerie Pi3D in raspbian

Può capitare di dover renderizzare un modello 3d su un raspberry oppure di una scena completa. Come fare?
Si possono usare delle librerie apposite per Raspbian che permettono di sfruttare la scheda video integrata all interno, e queste si chiamano Pi3D. Esse sfruttano il linguaggio di programmazione python per via del fatto che raspberry e una piattaforma che sfrutta molto questo linguaggio.
Vediamo un esempio molto semplice di caricamento di una teiera in formato OBJ completamente personalizzabile in base all oggetto da caricare.
(I file aggiuntivi vengono prelevati dalle cartelle dentro il file sample che e obbligatorio scaricare. Per visualizzare il nostro oggetto ci sara quindi bisogno di un file bump e shine, creabili tramite editor quali Krita o Photoshop)

import demo
import pi3d

DISPLAY = pi3d.Display.create(x=100, y=100,
background=(0.2, 0.4, 0.6, 1), frames_per_second=30)
shader = pi3d.Shader("uv_reflect")

pi3d.opengles.glDisable(pi3d.GL_CULL_FACE)

#modificare bumptex e shinetex in base alla texture voluta
bumptex = pi3d.Texture("textures/floor_nm.jpg")
shinetex = pi3d.Texture("textures/stars.jpg")

#modificare dopo file_string a seconda dell oggetto 3d voluto
mymodel = pi3d.Model(file_string='models/teapot.obj', name='teapot', z=4.0)
mymodel.set_shader(shader)
mymodel.set_normal_shine(bumptex, 16.0, shinetex, 0.5)

mykeys = pi3d.Keyboard()
while DISPLAY.loop_running():
   mymodel.draw()
   mymodel.rotateIncY(0.41)
   mymodel.rotateIncZ(0.12)
   mymodel.rotateIncX(0.23)
   k = mykeys.read()
   if k >-1:
         if k==112:
            pi3d.screenshot('teapot.jpg')
         elif k==27:
         mykeys.close()
         DISPLAY.destroy()
         break

Il vantaggio di Python e di non inizializzare le variabili di volta in volta, percui possiamo velocemente fare i passaggi di inizializzazione dello schermo e di caricamento dei file. Si prosegue poi prendendo l input da tastiera e muovendo di conseguenza l oggetto tramite coordinate.

Links
Documentazione Pi3d
Raccolta di samples Pi3D(dove troviamo anche il file LoadModelObj)