Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 21:06

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Dez 28, 2005 00:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Nov 18, 2005 18:28
Beiträge: 26
Hallo Leute, ich hab mal wieder endlich etwas Zeit gefunden und habe weiter mit euren Tutorials an meinem OpenGL Versuch gearbeitet.

Nun habe ich bis #4 alles verstanden und kann nun eine OpenGL-App. auch ohne Tutorials mittlerweile bis zu diesem Punkt erstellen.

Problem: Ich finde das Problem nicht! :wink:

Ernsthaft, ich lade eine Textur, selbsterstellt mit PS, egal welche Größe (hatte probiert: 50x50, 500x500, 2000x2000, 1000x2000, 10x50), RGB und als Bildtyp JPG auf 100% Qualität. Nun dauert es gediegene 2-3 Sekunden beim Starten der Anwendung, wobei ich einen Blank Screen (glClearColor auf Schwarz) sehe, bis ich mein Quadrat mit eben dieser Textur sehe. Der FPS Counter zeigt nun 1 an und mein Rechner lahmt extrem. Sofort nach Beenden der Anwendung ist alles wieder ok.

Andere Texturen, teils aus dem INet geladen, teilweise Texturen von 3dtotal.com von den TextureCDs, funktionieren bestens. Mit diesen erreiche ich sogar im Vollbildmodus im Durchschnitt 76 FPS.

Mein Quellcode entspricht exakt dem des Tutorials, ich bekomme auch keine Fehlermeldungen, alle möglichen Parameter habe ich schon mehrmals variiert, alle Versuche blieben jedoch ohne Erfolg.

Ich bemerkte auch, dass ich NUR *.JPG benutzen kann, bei *.GIF *.TGA und *.PNG ensteht ein Bild als wenn man Premiere verschlüsselt schaut. :?

Frage: Gibt es generell ein ideales Bildformat für OpenGL Texturen oder ist das Bildformat egal?
Wo könnte das Problem bei mir liegen?
Sind spezielle Einstellungen an den Texturen VOR Verwendung durch OpenGL notwendig (Farbtiefe, Auflösung, etc.) ?

Ich hoffe, es kann mir jemand helfen.
Im Anhang befinden sich zwei Texturen. Eine die ohne Probleme funktioniert, die andere sorgt für FPS = 1!

mfG, Killian


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 01:05 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Hi,

Das Problem liegt an deiner Textur. OpenGL erwartet von Haus aus Texturen, die power of two sind. Also mit einer Größe von 2^n * 2^n.

z.B.: 64x64, 128x128, 256x256, 512x512 Pixel ;) Alles andere wird per Software im Treiber emuliert und ist extrem langsam.

Gruß,
Frase

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 01:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das selbe Problem gabs heute schonmal. Texturgrößen müssen eine Potenz von 2 sein. Das heißt. 64x64, 128x256 oder 1024x512, oder ...

Dann sollte es gehen. Wenn du die glBitmap benutzt, sollte die dich dezent darauf hinweisen, dass dein Treiber das "NonPowerOfTwo-Extension" nicht unterstützt. Is erst ab OpenGL2.0 möglich, und das können normale Karten meistens nicht.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 01:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Nov 18, 2005 18:28
Beiträge: 26
Hi Frase, Hi Flash,

danke für eure schnellen Antworten. Das Problem ist damit keines mehr! *Vor-Freude-Explodier*

Ich hatte wie schon öfters nicht genau gelesen und war so der Meinung, es müssten Texturen ´gemäß 2*n x 2*x sein und nicht als Potenz der Zweierreihe. Naja :roll: Erscheint beim Nachdenken auch logischer.

Kommen wir dadurch zur zweiten und letzten Frage für heute:

Bleibt mir beim Vollbildmodus als Alternative zu 2^n*2^n Texturen nur die Funktion "gluBuild2dMipMaps" oder gibt es andere Möglichkeiten eine Textur auf meine Auflösung(1280x1024) zu ziehen? Ich habe bisher auch die eher unelegante Methode eines bis knapp in die Monitorecken gezogenen Quadrates benutzt, um eine Textur im Vollbildmodus zu imitieren. Lässt sich nicht eventuell statt der Farbe aus glClearColor eine Textur als Hintergrund angeben? Oder wie lassen sich mit den 4 Positionsparametern eines Quadrates genau die äußeren Ecken festlegen?

P.S.: Bitte nicht genervt fühlen, ich habe selten Zeit, daher frage ich eben dann schon mal nach tonnenweise Informationen gleichzeitig. Ich brauche auch nur Tipps oder Hinweise wo ich mit meinen Fragen weiterkomme, ich will keine Lösungsformel oder ähnliches :wink:

mfG, Killian


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 03:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 17, 2005 13:19
Beiträge: 98
Wohnort: Jahnsdorf
Die Koordinaten der äußeren Eckpunkte solltest Du über glProject\glUnproject bzw. glViewport abfragen können. Außerdem könnte Dir auch glOrtho helfen.

Du kannst Dir über glScalef und glTranslatef das Koordinaten-System von OpenGL an das der GDI anpassen ...

_________________
Administrator of Project Omorphia
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 06:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich habe das Thema mal verschoben. Da passt es glaube ich besser hin.

Zitat:
Ich bemerkte auch, dass ich NUR *.JPG benutzen kann, bei *.GIF *.TGA und *.PNG ensteht ein Bild als wenn man Premiere verschlüsselt schaut.

Als aller Erstes. OpenGL enutzt in der Regel nur unkomprimierte RGB Bilder. Also so etwas wie TGAs oder BMPs. JPEGs und PNGs sind intern komprimiert. Dieses müssen dann natürlich erst dekomprimiert werden. Erst dann können diese als Textur verwendet werden. Von GIFs würde ich grundsätzlich abraten, da diese nur Bilder mit Paletten unterstützen was von OpenGL aber nicht benutzt wird.

Als optimale Grafikformate rate ich dir zu PNGs oder DDSs. DDS ist auch in der Lage ganz komische Datenformate abzuspeichern. RGB5A1. Ein 16 Bit Bild mit 1Bit Alphamaske etc. Oder die Verlustfreie Kompression von PNG + die Möglichkeit einen Alphakanal mit abzulegen. Sowohl PNG als auch DDS können graustufen Bilder mit oder ohne Alphakanal beinhalten. Leider wird DDS von kaum einem Program sinvoll unterstützt und die glBitmap wird es auch erst in der nächsten Version tun. Was aber hoffentlich nicht mehr so lange dauern dürfte.

Größere Texturen kleiner Darstellen kannst du in dem du deine Texturen zerteilst. Also wenn du sie Lädst, zerteilst du sie in 512x512 Stücke. Oder du benutzt die ältere Extension GL_ARB_texture_rectangle. Gibt es auch als als EXT und NV. Dadurch ändern sich aber wieder die Texturkoordinaten.

Von der Funktion gluBuild2dMipMaps rate ich dir im übrigen ab. Diese Methode ist erstens nicht nur langsam sondern er verändert auch deine Texturen, wenn diese nicht konform sind. Was ich persönlich nicht so praktisch finde.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 11:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
@Lossy: Was meint der Texturformat-Experte eigentlich zu TGAs ? Ich hab mir nie Gedanken um das Format gemacht, sondern einfach benutzt.

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Auch wenn ich nicht Lossy bin nehme ich mir mal die Freiheit darauf zu antworten.

TGAs sind für die meisten Texturen i.a. relativ brauchbar, da sie relativ leicht zu lesen sind, komprimierung und Alpha-Komponenten unterstützen. Im Vergleich zu DDS und PNG müssen sie aber zurückstecken, da png stärker komprimiert und beide mehr optionen bieten und DDS ein natives Texturformat ist und somit die Daten keine große Nachbearbeitung brauchen bevor sie an die Grafikkarte gesendet werden. Solange man diese aber nicht brauch, eignet sich TGA auch ganz gut, zumal die Komprimierung es gegenüber BMPs schon signifikant verkleinern kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 13:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
*argh* Ich habe mich gerade dabei erwischt absolut fatal abzuschweifen und einen kleinen Roman über das "Für und Wider der bestehenden Grafikformate" zu schreiben. Nach dem ich mir selber darüber im Klaren geworden bin hier mein Fazit aus meiner Diskussion mit mir selbst! ;-) Und dann war Grizzly auch noch schneller. :cry: ;-)

Im Groben und ganzen Stimme ich mit Grizzly überein. Wobei ich persönlich die TGA Kompression nicht verwenden würde. Mag auch sein, dass das in meiner glBitmap nicht so extrem optimiert ist aber ich benötige zum Laden einer RLE Komprimierten TGA in etwas so lange wie für ein PNG. Und bei dem PNG ist die Kompression auch noch besser.

DDS wird leider kaum direkt von den Grafikprogrammen unterstützt weswegen sich das als ein bisschen schwieriger gestaltet. Aber wenn man keine Speziall Formate benötigt dann braucht man sich das auch nicht aufzuhalsen.

Früher oder später denke ich aber mal wird TGA ein bisschen auf der Strecke bleiben. Speziell wenn der Trend in Richtung 16 Bit pro Kanal oder Floattexturen geht. Aber so lange es ausreicht und alles bietet spricht nichts dagegen. Ohne Alpha auch nicht mal gegen ein Bitmap. Außer vielleicht, dass es sich dabei um ein Bitmap handelt. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 14:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
So will ich dir auch nochmal was erzählen.

Wenn du denn kompletten Bildschirm füllen willst, weil du z.B. einen schönen Hintergrund haben willst für ein 3D-Shooter mäßiges Spiel dann interessierst du dich vielleicht hierfür: http://wiki.delphigl.com/index.php/Techniken_und_Algorithmen#Statische_Umgebungen Stichwort Skybox, Skydome...

Falls du ein Menü, oder irgend ein 2D Spiel machen willst, dann ist der Befehl http://wiki.delphigl.com/index.php/glOrtho das richtige. Da kannst du dann angeben, wie deine Koordinaten sein sollen. Du könntest dann sogar Pixelgenau Objekte postieren.

Sascha hat mir mal erzählt wie er das mit den Texturen macht, damit die trotz PotenzVon2 noch den Bildschirm füllen.

Wir reden hier von Photoshop/Gimp:
1. Mach deine Textur wie immer
2. Strech deine Textur auf das Zielformat
(3. Lass einen Schärfungsfilter drüber laufen.)

Durch das strechen im OpenGL programm sieht das Bild dann wieder wie normal aus.

Denk aber auch an andere User für deine Anwendung. größer als 1024x768 solltest du nicht als standard wählen. Vorallem Laptops können nicht größer. Selbst einige Kommerzielle Spiele haben noch 800x600 als Auflösung.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zitat:
DDS wird leider kaum direkt von den Grafikprogrammen unterstützt

Auf der NVidia Homepage kann man ein Photoshop Plugin herunterladen. Außerdem gibt's da noch ein weiteres Addon für den Explorer, damit diese Dateien auch in der Miniaturansicht angezeigt werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 15:49 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Lossy eX hat geschrieben:
*argh* Ich habe mich gerade dabei erwischt absolut fatal abzuschweifen und einen kleinen Roman über das "Für und Wider der bestehenden Grafikformate" zu schreiben. Nach dem ich mir selber darüber im Klaren geworden bin hier mein Fazit aus meiner Diskussion mit mir selbst! ;-) Und dann war Grizzly auch noch schneller. :cry: ;-)

Denoch wäre sowas schön für das Wiki geworden :roll:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 31, 2005 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Nov 18, 2005 18:28
Beiträge: 26
Hi nochmal, vielen Dank für eure Hilfe.

@Flash: Bingo! Deine Links haben mir weitergeholfen. :D

_________________
Die Antwort ist 17, aber wie lautet die Frage?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 14 Queries | GZIP : On ]