per drawingbuffer bild abfangen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
WhiteMaster
Beiträge: 6
Registriert: 03.06.2008 22:36
Wohnort: Püttlingen

per drawingbuffer bild abfangen

Beitrag von WhiteMaster »

ok, hir ist meine Idee:
ich benutze halt gerne ogre 3D und hab erlich kein bock auf ander sprachen umzustigen, und trotzdem wolt ich shader und co nachmachen
( überwachungskammeras, schlechte reflektionen )
, und deswegen ein bild aus dem drawingbuffer/backbuffer catchen und dieses dann mit regulern pb befelen benutzen können.
Inetwa so:
Buffer herausfinden und dann von dort aus das Bild in denn Speicher lesen, auf textures malen und dann die welt nochmals rendnern ( um denn schwachsin wider mit der normalen Welt übermalen), natürlich die cams vorher richtig stellen...
Langes gelaber, kurtzer sinn: kan ich ein bild aus dem backbuffer catchen?
unter windows (per api?) :?
Windows PB 4.0
WhiteMaster
Beiträge: 6
Registriert: 03.06.2008 22:36
Wohnort: Püttlingen

hat sich erledigt

Beitrag von WhiteMaster »

Hab ne (sau) blöde lösung gefunden:
per point abfrage, abspeichern und auf ein bild zeichnen.
Is lam, aber geht immer (zumindest bei mir).
Darfst halt nix übermalen.
Windows PB 4.0
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Schau dir mal die Befehle GrabSprite() und DrawingBuffer() an.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

als problem hierbei sehe ich, dass afaik der befehl RenderWorld() ja alle cameras gleichzeitig zeichnet.
man kann ja bildbereiche verschiedenen Cams zuweisen, aber wohl nur gleichzeitig ausgeben.

aber anscheinend liege ich da ein bißchen falsch, wenn du
mit Point() auf ein Bildzugreifen kannst, was du nachher wieder übermalst...

schau dir mal UseBuffer() an, das kannst du benutzen um alle Ausgaben
auf ein Sprite umzuleiten, könnte auch mit RenderWorld() funktionieren.

wenn du bei ausgabe auf den bildschirm und cachen bleiben willst,
was vielleicht ein vorteil wäre wenn du 4 überwachungskameras auf einmal
renderst und die in 4 sprites packst, dann könnte GrabSprite() besser sein,
weil du dann nicht 4x den buffer wechseln und 4x rendern musst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
WhiteMaster
Beiträge: 6
Registriert: 03.06.2008 22:36
Wohnort: Püttlingen

nix usebuffer()

Beitrag von WhiteMaster »

Auf die idee mit useBuffer() ung grabSprite() bin ich auch schon gekommen, aber useBuffer() verändert nicht denn rendnerWorld()-Ausgabakanal und grabSprite() benutzt zum catchen den frontBuffer. Ich dacht auch erst mal, das das ganze sooo einfach währe, is aber leider gar nicht. Meine einzige möglichkeit ist, denn backBuffer abzumalen (auser jemand findet ne möglichkeit davon zu catchen). Ich sag ja persönlich:
Hab ne (sau) blöde lösung gefunden
Wenn jemand noch was besseres findet, z.B. per direkte plot-abfrage, bin ich supper dankbar!
was vielleicht ein vorteil wäre wenn du 4 überwachungskameras auf einmal
renderst und die in 4 sprites packst, dann könnte GrabSprite() besser sein,
weil du dann nicht 4x den buffer wechseln und 4x rendern musst.
Das ist dann kein problem mehr, ich rendnere die welt nur einmal und zeichne dann auf die Texture. So doof bin ich wirklich nicht! :freak: :?
Windows PB 4.0
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> useBuffer() verändert nicht denn rendnerWorld()-Ausgabakanal
das is ja mal ganz beschissen!
..OGRE ist wirklich schlecht implementiert zur zeit. nunja, für 4.30 soll das besser werden...
die neue OGRE hat sowieso mehr features, vielleicht kann man sich solche klimmzüge dann komplett sparen.

> grabSprite() benutzt zum catchen den frontBuffer.
echt jetzt? is ja auch beknackt.
hab ich nur ganz selten benutzt, dachte es arbeitet auch aufm backbuffer.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten