ich versuche gerade einen player für flic animationen zu programmieren.
mein versuch mit hilfe von opengl einen player zu programmieren hat fehlgeschlagen(warum auch immer).
wenn ich nach jedem frame das bitmap object abspeichere,ist in der datei auch etwas vernünftiges drin
aber das opengl fenster ist die ganze zeit schwarz. auch die fps werden nicht mehr angezeigt.
kann mir bitte einer sagen wo ich einen fehler mache?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Habe noch ein paar Anmerkungen.
In folgendem Code müssen die glPopMatrix Aufrufe raus, da du nirgendswo glPushMatrix aufrufst. Das könnte mitunter zu Problemen führen, je nachdem wie kleinlich die Implementation vom Treiber ist.
Code:
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
Alles andere Betrifft jetzt eher das Laden der Texturen.
Das PByteArray würde ich nicht benutzen, da es nach oben hin begrenzt ist. Wenn du ausversehen mal die Bereichsprüfung bei dir anstellst dürfte es auch einen Fehler geben.
gluBuild2DMipmaps würde ich auch nicht mehr benutzen. Das ist zwar in deinem Falle die einfachste Art es darzustellen aber das Video dürfte nicht so aussehen wie es sein sollte und Langsam ist es obendrein auch nocht. Ich würde empfehlen, dass du glTexImage2D benutzt. Und als TexturTarget anstelle von GL_TEXTURE_2D dann GL_TEXTURE_RECTANGLE_ARB. Damit es möglich Texturen zu laden die keine Breite/Höhe von einer Potenz von 2 haben. GluBuild2DMipmaps passt dieses zwar an aber dadurch wird ersten mehr speicher verbraucht als notwendig und die Texturdaten werden von ihm angepasst. Dass es langsam ist hatte ich ja schon mal gesagt. Und die erzeugten MipMaps brauchst du normal ja auch nicht. Also lieber TextureRectangle benutzen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ach ja. Was ich ganz vergessen hatte. Sobald du TextureRectangle benutzt sind deine Koordinaten anders. Und zwar sind die dann nicht mehr im Bereich von 0 und 1 sonder von 0 und Breite / Höhe des Bildes. Wenn das entsprechende Pixel nun weiß ist dann sieht es so aus als würde sich nichts verändern.
Noch etwas recht wichtiges. Du musst vorher natürlich auch abprüfen ob eine der Folgenden Extension überhaupt unterstützt werden.
GL_EXT_texture_rectangle
GL_ARB_texture_rectangle
GL_NV_texture_rectangle
Wenn dies nicht der Fall ist musst du dir leider etwas anders suchen um die Texturen darzustellen.
Die Kostanten sind bei allen 3 Extension gleich. Du brauchst also nur überprüfen ob die funktionieren und kannst dann eine der 3 Varianten benutzen. Für OpenGL sieht das dann nämlich vollkommen gleich aus.
Ach ja. Was ich ganz vergessen hatte. Sobald du TextureRectangle benutzt sind deine Koordinaten anders. Und zwar sind die dann nicht mehr im Bereich von 0 und 1 sonder von 0 und Breite / Höhe des Bildes. Wenn das entsprechende Pixel nun weiß ist dann sieht es so aus als würde sich nichts verändern.
Noch etwas recht wichtiges. Du musst vorher natürlich auch abprüfen ob eine der Folgenden Extension überhaupt unterstützt werden. GL_EXT_texture_rectangle GL_ARB_texture_rectangle GL_NV_texture_rectangle Wenn dies nicht der Fall ist musst du dir leider etwas anders suchen um die Texturen darzustellen.
Die Kostanten sind bei allen 3 Extension gleich. Du brauchst also nur überprüfen ob die funktionieren und kannst dann eine der 3 Varianten benutzen. Für OpenGL sieht das dann nämlich vollkommen gleich aus.
Dieses Andere könnte ein Skalieren mit SDL_ScaleSurfaceRect sein. Geht natürlich nur, wenn du SDL nutzt Das ist recht schnell und von der Qualität her... Äh... Lassen wir das mit der Qualität wird halt recht pixelig, da nix interpoliert wird.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Zitat:
Dieses Andere könnte ein Skalieren mit SDL_ScaleSurfaceRect sein. Geht natürlich nur, wenn du SDL nutzt Wink Das ist recht schnell und von der Qualität her... Äh... Lassen wir das mit der Qualität Wink wird halt recht pixelig, da nix interpoliert wird.
*Argh* Also nichts gegen SDL. Aber dann doch lieber so, dass man entweder die Textur zerschneidet oder wie in dem Falle eine 512x256 Pixel Textur benutzt und dabei die Textur so reinkopiert wie sie ist. Sprich, dass man den Rest einfach weiß lässt. Als Koordinaten nimmt man dann entsprechend das was auch als Textur benutzt wird. Man hat dann zwar ein "bisschen" Verschnitt aber wenigstens bleibt sie dann so wie sie sein soll. Wenn man bedenkt, dass man sonst kaum Speicher benutzt dürfte das, vom Speicherverbrauch her, sogar alles noch gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.