Echtzeit-Video von einer USB-Kamera zur Textur hinzufügenDas ist etwas sehr Nettes, auch wenn es derzeit nur unter Windows funktioniert (aber ich arbeite an einer Linux-Version!). Es ist eine kleine Erweiterung zu Beispiel 8 - Environmental Bump Mapping mit GLSL Cube Mapping. Das Programm Die Texturen die in dieser Demo verwendet werden sind hier:
Der Code benutzt die tolle Library VideoCapture.py von Markus Gritsch - für Windows. Wenn Du ein ähnlich einfaches Python-Interface für Video4Linux kennst, baue ich das gerne ein. Da ich noch keines gefunden habe, lerne ich gerade den Umgang mit ctype und v4l. Die Museums-Ansicht stammt von http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/stereographics/stereopanoramic/, sie gehört Peter Murphy. Und hier ist ein Video vom Ergebnis - mit einem sehr netten Hamster vor der Kamera: Programm BeschreibungEin einfaches Demo-Programm um das Funktionieren der Libary zu überprüfen wäre from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')
Drei Zeilen Code für einen Kamera-Schnappschuss samt Speichern auf der Platte - ist da nicht cool? Es gibt noch eine Menge Optionen und Funktionen um auftretende Spezialfälle zu behandeln, aber ein brauchbares Programm ist erstaunlich einfach zu machen: Kamera Initialisierungfrom VideoCapture import Device
try:
cam = Device()
except:
print "No Camera device found"
cam = None
Frame GrabbingFür jeden OpenGL-Frame den wir darstellen, überprüfen wir, ob von der USB Kamera ein neues Bild vorliegt. Wenn wir eines bekommen (so etwa 30-60 mal pro Sekunde, nicht synchron mit der OpenGL-Darstellung), tragen wir es auf die Cubemap-Textur auf - und zwar mit glTexSubImage2D(), damit wir nur die relevanten Teile der Textur zur Grafikkarte übertragen müssen: if cam: # camera object was successfully initialized
snap = cam.getImage()
if snap: # a new image is ready from the camera
snapstr = snap.tostring( "raw", 'RGBX')
glTexSubImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0,
0, 160, # position within the texture
snap.size[0], snap.size[1], # size of the image
GL_RGBA, GL_UNSIGNED_BYTE,
snapstr )
Ziemlich einfach, wenn man's mal herausgefunden hat Der Rest des Programms basiert überwiegend auf dem vorherigen Beispiel, dort findest Du auch Infos zum Cube Mapping.
|