[GELÖST]Problem mit Pixmap
Übersicht

![]() |
SkabusBetreff: [GELÖST]Problem mit Pixmap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nabend!
Ich schreibe momentan an einem Raycaster und brauche dafür eine Möglichkeit einzelne Pixel möglichst schnell in einen Buffer und/oder Bilder zu schreiben. Durch einen alten Code von vertex bin ich auf die Idee gekommen dafür eine Pixmap zu nehmen und das Ergebnis anzeigen zu lassen. Mein Problem ist nun, dass ich nicht ganz verstehe wie ich genau mit Byte-Pointern arbeiten soll.Ich habe bereits versucht das Prinzip zu verstehen, leider erschließt sich mir das ganze nicht sonderlich. Mein (erstes) Grundlegendes Problem: Ich will einen 640*200 Pixel großen Streifen bei einer Auflösung von 640*480 am oberen Teil anzeigen.Mein Code sieht in etwa so aus: Code: [AUSKLAPPEN] 'diese Methode wird aufgerufen wenn der Bildschirm aktualisiert werden muss Method drawPixmap() 'lokale Variablen Local x:Int = 0 Local y:Int = 0 Local pixMapArray:Byte Ptr Local red:Byte = 255 Local blue:Byte = 255 Local green:Byte = 255 Local alpha:Byte = 255 'jede Spalte der Bildbreite wird gezeichnet For x=0 To Self.screenX-1 'der Pointer auf die Pixmap pixMapArray = test.Pixels + Byte(4*x) For y=0 To 199 pixMapArray[0] = red pixMapArray[1] = green pixMapArray[2] = blue pixMapArray[3] = alpha pixMapArray:+Self.screenX*4 Next Next 'das Ergebnis ausgeben DrawPixmap(test,0,0) End Method Mein Lösungsansatz war also,stelle die Spalte der Pixmap ein, dann schreib die Pixelinformation in die Pixmap geh die Breite des Bildschirms mal 4 weiter und zeichne erneut einen Pixel, solange bis alle 200 Pixel gezeichnet wurden danach geh eine Spalte weiter und fang von vorn an. Leider funktioniert das einfach nicht richtig. Weiß jemand was ich falsch mache? Über jede Art von Hilfe würde ich mich freuen. Danke im vorraus!^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
- Zuletzt bearbeitet von Skabus am Mi, Dez 02, 2009 18:41, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Leider funktioniert das einfach nicht richtig. Großartige Fehlerbeschreibung... ![]() Lauffähige Beispiele wären an solchen Stellen auch Vorteilhaft. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde bei sowas FrameBufferObjects nehmen, diese funktionieren zwar erst ab OGL 2.1 sind aber um einiges leichter in der Handhabung. Klepto2 hat mal eine tolle Lib geschrieben: https://www.blitzforum.de/foru...hlight=fbo
Diese Lib ist sehr nützlich ![]() |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitteschön:
BlitzMax: [AUSKLAPPEN] SuperStrict WritePixel: 36 ms Pointer: 31 ms Achja, erklärung: Wenn du den Pointer in der Schleife resetest kann das nichts werden ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank Xeres, erstmal^^
Ich hatte allerdings geschrieben, dass ich eben nix weiter als einen weißen Streifen in die Pixmap schreiben wollte. So wie dein Code habe ich das allerdings bereits auch hinbekommen. Das Problem ist allerdings, dass ich die Zeichenroutine nicht für horizontales Zeichnen sondern für vertikales Zeichnen benötige. Wie ich schon schrieb.Es soll nicht Zeile für Zeile einen 200 Pixel hohen und 640 breiten Streifen zeichnen sondern Spalte für Spalte. Ich möchte also, dass der erste Pixel bei 0,0 beginnt und der letzte Pixel der ersten Spalte bei (0,199) aufhört.Darum hatte ich den pixMapArray resetet damit ich wieder von oben aus anfangen kann. Sinn des ganzen soll später sein, damit ich bestimmte Spalten aus einer Textur auslesen kann und dann in diese Pixmap schreiben kann. Kannst du mir also vllt. nen Tipp geben wie ich das realisieren kann? Sorry wenn ich mich etwas unverständlich ausdrücke^^" Ich habs schon versucht so präsise wie möglich zu machen... MfG Ska coolo: Mir gehts prinzipiell umm den Geschwindigkeitsvorteil. Ich muss aus meinem Raycaster das Maximum an Geschwindigkeit rausprügeln.In wie fern bringt mir odder bringt sie mir überhaupt einen Geschwindigkeitsvorteil im vergleich zum normalen Zeichnen? |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach... vertikal
Klar. BlitzMax: [AUSKLAPPEN] SuperStrict Die Bilddaten liegen im Array Linear vor, darum muss die Differenz zur nächsten Zeile übersprungen werden (wiederum jedes Pixel = 4 Byte). |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Argh, ich drück mich einfach zu undeutlich aus XD
Das Ergebnis deines ersten Codes ist schon richtig^^" Ich will aber die einzelnen SPALTEN so zeichnen lassen das sie so gezeichnet werden erst (0,0) dann (0,1) dann (0,2) usw. bis (0,199) Danach soll die nächste Spalte gezeichnet werden. Also erst (1,0) dann (1,1) dann (1,2) usw. bis (1,199) Sodass dann ein horizontaler Streifen entsteht mit 640*200 Pixel nur halt gezeichnert mit vertikalen Linien... Ich hoffe dass jetzt klar ist was ich meine sonst lade ich nachher nochmal meinen ursprünglichen Code hoch, damit man den Unterschied erkennt^^" Aber vielen Dank für deine Hilfe bissher! Langsam dämmert mir wie das funktioniert... MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, dies hier sollte passend sein...
BlitzMax: [AUSKLAPPEN] SuperStrict ... wenn du's nicht schon hast ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, vielen Dank^^
Jetzt versteh ich auch was ich falsch gemacht habe. Nochmals Danke, damit kann ich jetzt weiterarbeiten ![]() MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group