![]() |
GLScene - Hintergrund
Hallo Allerseits,
ich bastle mal wieder ein kleines spiel (diesmal sowas wie "eyetoy-kinetic") und möchte dafür 3D objekte (GLScene) auf webcambilder projezieren. die bilder werden aller 40ms in ein TImage kopiert und nun wollte ich irgendwie: entweder den hintergrund des GLSceneViewers transparent einstellen, sodass man das TImage darunter sieht, es aber von den 3D objekten teilweise überlagert wird oder in den hintergrund der szene einfach die webcambilder reinkopieren (also ohne das darunterliegende TImage). die einzelnen bilder von der webcam liegen auch noch als TBitmap oder auch als ByteArray vor. geht das überhaupt oder hat jemand noch eine andere idee? Viele Grüße, Thomas |
Re: GLScene - Hintergrund
Ich würde das mit den GR32-Komponenten machen. Die sind relativ einfach zu bedienen und du hast Ebenen, die auch Transparent sein können.
|
Re: GLScene - Hintergrund
Zitat:
GLSenefenster kann man nicht transparent machen. |
Re: GLScene - Hintergrund
danke für die tipps, ich habs mal mit dem TPlane versucht. leider bekomm ich die textur mit diesem gl-materialmanager nur einmal auf das Tplane draufgemapt. die textur müsste also nur noch erneuert werden können. kann man texturen in der materialLibrary nachträglich noch ändern? oder gibts andere wege das bild auf das tplane zu mappen und laufend zu updaten? :)
|
Re: GLScene - Hintergrund
Liste der Anhänge anzeigen (Anzahl: 2)
Ein Plane ist keine schöhne Lösung :gruebel: nimm doch besser ein Sprite, dem wiest du eine Textur (ohne MatLib) zu und fertig ist's.
Mit einem Timer kannst du dann einfach die Textur nue zuweisen. Beispiel im Anhang. |
Re: GLScene - Hintergrund
gute nachricht: es geht, jippi! :spin2:
der tipp mit dem hudsprite war echt gut, da dann das bild nicht perspektivisch verzerrt dargestellt wird, die objekte davor aber schon :) und DANKE für das beispielprogramm, nun ist mir das alles ein bischen klarer geworden und funktioniert schon vom prinzip :-D die schlechte nachricht: es funktioniert zu langsam?! :-( irgendwie braucht mein rechner 2 sekunden um die textur zu updaten, obwohl er nicht gerade der langsamste ist mit 2.8GHz usw. ist das bei dir auch so, TPascal? und kann man das noch irgendwie beschleunigen? ändert man das bitmap übigens direkt, also mit "canvas" einfach was reinzeichnen, wird die textur im hudsprite nicht mitverändert. sie wird also anscheinend nochmal extra in den grafischkartenspeicher reingeladen. ich frag mich, was daran 2 sekunden dauern kann. :shock: |
Re: GLScene - Hintergrund
Also von der Geschwindigkeit kann ich mich nicht beklagen, da ich nicht weis wie du es in deinem Code anstellst mache ich jetzt auch keine Aussage.
Zeig mal die Stelle an der Du die Map änderst. Weie gross sind die Bilder ? |
Re: GLScene - Hintergrund
hudsprite1.Material.Texture.Image.Assign(Image.Pic ture);
image ist 640x480-24bit statt image.picture habe ich auch mal "buf:TBitmap" versucht, also: hudsprite1.Material.Texture.Image.Assign(buf); kommt aufs gleiche raus.. ist ja auch fast das gleiche *g* |
Re: GLScene - Hintergrund
hier nochmal ein code, der das problem mit der zeitverzögerung beim texturaufbau verdeutlich:
Delphi-Quellcode:
den letzten befehl kann man natürlich auch in einen extra button schreiben, damit es "schneller" geht, aber die befehle oberhalb brauchen nur wenige ms, nicht so der letzte befehl :(
procedure TForm1.Button1Click(Sender: TObject);
var bmp:tbitmap; begin bmp:=TBitmap.Create; bmp.PixelFormat:=pf24bit; bmp.Width:=640; bmp.Height:=480; //in das TBitmap "hallo" reinschreiben bmp.Canvas.Font.Size:=40; bmp.Canvas.TextOut(15, 5, 'hallo'); //die größe vom HUDSprite anpassen HUDSprite1.Width := GLSceneViewer1.Width; HUDSprite1.Height := Round(GLSceneViewer1.Height); HUDSprite1.Position.X := GLSceneViewer1.Width div 2; HUDSprite1.Position.Y := Round(GLSceneViewer1.Height) div 2; //Textur zuweisen //dauert bei voller leistung meines rechners (2.8GHzCPU & 450MHz der GraKa) ca. 0.8 sekunden. HUDSprite1.Material.Texture.Image.Assign(bmp); end; gibt es irgendwie eine variante, ein video auf eine textur zu mappen? EDIT: sollte man dafür nen neues thema anfangen? ^^ |
Re: GLScene - Hintergrund
Liste der Anhänge anzeigen (Anzahl: 2)
Tja, mit GLScene Textures wird es nichts werden da diese erst über den Speicher laufen bzw. das umwandeln von Video-Information zu GLScene Texture-Bitmap zu lange dauert.
Da die CPU-Belastung durch GLScene hoch ist müsste man diese noch begrenzen (Framerate) 1. Möglichkeit verwende zwei Formulare, das erste enthält das Video, das zweite die GLScene und dann mit transparentfarben der Form arbeiten (siehe Anhang) 2. Möglichkeit mit Videooverlay arbeiten im blueboxverfahren also das Videobild nur auf bestimmte Farben projizieren (hab ich aber keine erfahrung wie man das machen kann) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz