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

Aktuelle Zeit: Mo Jul 07, 2025 06:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: texturen ohne größe von 2^x
BeitragVerfasst: Do Mär 01, 2007 23:39 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Hallo!

Ich würde gerne Bilder als Texturen laden, die nicht eine Höhe und Breite von einer zweierpotenz haben, da der benutzer ein Bild, das angezeigt werden soll, sich selbst heraussuchen darf und es kaum ein Bild gibt, das diesen Kriterien entspricht.
Zunächst meckert mein TexLoader, wenn ich ein solches Bild öffnen will. Stell ich die Überprüfung jedoch ab, dann wird zwar etwas gezeichnet, die Textur wird aber nicht geladen...

Wie kann man denn solche Bilder laden?

Danke im Voraus
Simon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 02, 2007 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also auf deiner Seite kannst du die Bilder laden wie du das haben willst. Da macht es keinen Unterschied ob das Bild POT oder NPOT ist.

Der Unterschied kommt erst dann wenn du die Texturen erstellen möchtest. Für NPOT Texturen hast du 2 Möglichkeiten zur Auswahl. Entweder ist die Grafikkarte entsprechend neu und unterstützt diese direkt. Das ist ab einem OpenGL 2.0 Kern (Variable GL_VERSION_2_0 in der dglOpenGL.pas) der Fall. Oder falls die Extension GL_ARB_texture_non_power_of_two (Variable heißt genau so) unterstützt wird. Das ist aber nur bei neueren Karten der Fall und auf einigen Systemen wird das auch per Software berechnet sobald MipMaps aktiv sind. Ist also richtig langsam. Sofern MipMaps deaktiviert sind ging es bisher. Zur Handhabung musst du nichts weiter tun. Das Target bleibt gleich und funktioniet ohne eine Änderung am Code.

Die andere Möglichkeit heißen Texture Rectangles. Das sind ältere Extensions die für so etwas gemacht wurden. GL_ARB_texture_rectangle, GL_EXT_texture_rectangle und GL_NV_texture_rectangle. Wenn du keine glSlang Shader benutzt sind diese Extension zu 100% gleich. Also vor allem die Konstanten. Du musst also nicht alle 3 unterstützen sondern nur schauen ob sie unterstützt werden und eine implementieren. Der Unterschied zu normalen Texturen besteht darin, dass ein anderes Target benutzen musst (anstelle von GL_TEXTURE_2D benutzt du GL_TEXTURE_RECTANGLE_ARB) und die Texturkoordinaten nicht normalisiert sind. Also sie sich nicht im Bereich zwischen 0 und 1 befinden sondern direkte Angabe in Pixel darstellen. Diese Extension unterstützt von Hause aus keine MipMaps wodurch sie auch nicht für alles eingesetzt werden kann. Aber dafür ist sie richtig alt und wird auch sehr weit unterstützt.

Generell solltest du bei solchen Bildern aber aufpassen, dass die Obergrenzen der Texturen nicht überschritten werden. Abfragen kannst du dies mit glGetIntegern mit GL_MAX_TEXTURE_SIZE bzw GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB als pname.

Sollte eine Textur größer sein wäre es wohl besser du würdest sie in kleinere Texturen zerlegen. Also Maximum würde ich da empfehlen diese entweder in maximal 1024x1024 wenn nicht sogar 512x512 zu zerlegen. Oder je nach Anwendungsgebiet würde es sich auch anbieten die Textur kleiner zu rechnen. Aber ich denke das kleiner rechnen kommt wohl eher nicht in Frage. Sagt mir so mein Gespühr. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 06, 2007 21:48 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
erstmal vielen dank für die ausführliche antwort!!!!!

was muss ich denn tun, um zu prüfen, ob GL_VERSION_2_0, GL_ARB_texture_non_power_of_two, GL_ARB_texture_rectangle, GL_EXT_texture_rectangle oder GL_NV_texture_rectangle unterstützt wird?
Weil wenn ich nur schaue, ob die variablen auf true gesetzt sind, dann sind alle false...
Oder ist meine Grafikkarte einfach zu dumm? :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 07, 2007 08:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also alle ist etwas seltsam. Normal wird intern überprüft was unterstützt wird und dann werden die entsprechenden Variablen gesetzt.

Es gibt 2 Möglichkeiten. Wenn du deinen RC mithilfe der funktion CreateRenderingContext aus dglOpenGL.pas erstellst dann wirst du normal auch die Funktion ActivateRenderingContext zum Aktivieren deine RCs benutzen. Diese ruft die entsprechenden Funktionen selbsttätig auf.

Solltest du deinen RC aber manuell erstellen so musst du nach der Erstellung ein Mal die Funktion ReadExtensions und ein Mal die Funktion ReadImplementationProperties aufrufen.

ReadExtension lädt von den Erweiterungen die Funktionspointer damit man sie auch benutzen kann. Und ReadImplementationProperties analysiert die OpenGL String um festzustellen welche Version und welche Extension verfügbar sind. Das beides aber NACHDEM der RC erstellt und aktiviert wurde und nur EIN MAL zu begin durchführen. Wenn du mehrere hast sieht das etwas anders aus aber das kann man wohl ausschließen.

Falls das immer noch alles auf False steht dann sollte deine Karte/Treiber doch schon ein bischen älter sein. Oder du benutzt aus welchen Gründen auch immer eine Softwareimplementation.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 07, 2007 16:18 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Wenn ich so drüber nachdenk kanns au gut sein, dass die Grafikkarte des einfach nicht kann.
Denn ich weiß zwar nicht genau, wie alt meine Grafikkarte ist, aber sie ist auf jeden Fall noch aus dem letzten Jahrtausend... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 07, 2007 16:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nur aktuellere Garfikkarten werden die NPOT Extension oder OpenGL 2.0 unterstützen.

In diesem Fall kann ich dir aber als zweite Quelle noch zu dem Tool glView raten. Wenn das dort auch nicht aufgelistet ist, dann ist di Wahrscheinlichkeit groß, dass deine Karte wirklich zu alt ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 07, 2007 16:44 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Ich hab jetzt das Bild mit BitStretch so gestreckt, dass es einem 2Pot-Bild etspricht und damit meine Grafikkarte es wieder zurückstrecken kann.
Ist zwar eigentlich n bisschen umständlich, aber es funktioniert ganz gut und funktioniert bei jeder Grafikkarte... :D

Auch wenn ichs jetzt vorerst mal so lasse, nochmal vielen Dank für deine Unterstützung!!!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]