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

Aktuelle Zeit: Di Jul 08, 2025 00:12

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: NPOT Texturen "auffüllen"
BeitragVerfasst: Mo Feb 11, 2008 19:10 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

ich habe vor Texturen aus Bildern zu generieren, die nicht unbedingt power of two sind. Die Texturen, die ich an OpenGl übergebe sollten das aber sein.
Ich will also ein Bild laden, testen ob es schon die richtigen Maße hat, und wenn nicht, dann will ich die mehr Platz für die Daten anfordern und den Rest des Bildes mit
Schwarz (oder sonst was) "auffüllen". Dann speichere ich noch die originale Höhe/Breite, um später ausrechnen zu können, wieviel ich bei den Texturkoordinaten weglassen muss.

Dabei ist das Problem, dass ich nicht nur einen Bildtyp (z.B. .bmp) unterstützen will, sondern auch .jpg und .tga. Jetzt kann das Bild aber 16bit, 24bit oder 32bit groß sein. Dadurch weiß ich nichtmehr, wieviel Speicher ich anfordern muss, um die richtige Größe zu erhalten. Weiterhin möchte ich die Laderoutinen nicht selbst schreiben, sondern die von "glbitmap.pas" oder GraphicEx benutzen.

Weiß also jemand, wie ich mit "glbitmap.pas" o.Ä. erst die Daten laden kann, und dann das Bild "auffüllen" kann?

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 11, 2008 21:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mit der glBitmap habe ich ab und an das Problem, dass ich Daten kopieren muss und mich nicht für das Format interessiere. Deswegen habe ich da so das ein oder andere eingebaut. Allerdings nichts um die Texturen so zu erweitern. Aber zu mindest um so etwas ein bisschen kompfortabler zu gestalten.

Ich kann dir auch nur sagen was du machen müsstest um es mit der glBitmap zu realisieren. Mit der GraphicEX kenne ich mich so gut aus.

Als erstes lädst du die Daten mit der glBitmap oder weißt sie von einem Bitmap via AssignFromBitmap zu. Wichtig dabei. Bitte nur laden! Noch keine OpenGL Textur daraus erstellen, da die Daten sonst gelöscht werden. Dann benötigst du eine zweites Instanz von TglBitmap2D. Es gibt einen Konstruktor bei du eine Größe an ein Format angeben kannst. Die Größe kannst du mit der Methode glBitmapPosition erstellen und das Format ist praktischerweise das des bereits geladenen TglBitmap2D. Dazu gibt es die Eigenschaft InternalFormat.
Code:
  1. glb2 := TglBitmap2D.Create(glBitmapPosition(X, Y), glb1.InternalFormat);


Zum Setzen der Hintergrundfarbe gibt es die Methode FillWithColor, FillWithColorRange oder FillWithColorFloat. Die 0hne Zusatz ist normiert auf 0-255. Die Range möchte gerne genau den Wert des Formates und die Float im Bereich von 0-1.

Jetzt wird es etwas kompliziert. Denn hier musst du jetzt selber die Daten kopieren. Als Erstes solltest du dir aber die Anzahl der Bytes einer Zeile ausrechnen. Dazu kannst du die von außen auch erreichbare interne Methode FormatGetSize benutzen. Dort gibst du ein Format an und bekommst die Größe eines Pixels. Den Rückgabewert mal die Breite der Quelltextur und das Ergebnis runden. Ist deswegen ein Float, weil Komprimierte Texturen Pro Pixel 4 Bits (0.5 Byte) benötigen.
Code:
  1. Größe = Round(FormatGetSize(glb1.InternalFormat) * glb1.Width);


Und jetzt musst du in einer Schleife die Daten kopieren. Für den Anfangspointer der Zeilen bieten die TglBitmap2D die Eigenschaft Scanline. Und das ganze kannst du mit dem Befehl Move erledigen.
Code:
  1. for Y := 0 to glb1.Height -1 do
  2.   Move(pByte(glb1.Scanline[Y])^, pByte(glb2.Scanline[Y])^, Größe);


Dann das Quellbild freigeben und das zweite Bild benutzen und das sollte es dann auch gewesen sein. Ach ja. Erstellen und Freuen.

PS: Je nachdem was du mit den Texturen vor hast kann es sein, dass da noch etwas mehrarbeit notwendig ist. Also wenn die Textur nicht Skaliert dargestellt wird ist okay Wenn sie Skaliert wird dürftest du am Rechten und Unteren Rand eine Verfärbung feststellen. Und zwar zu deiner Hintergrundfarbe. Wenn du so etwas vor hast, dann sag noch mal bescheid. Das wird jetzt sonst zu verwirrend auf einen Schlag.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 12, 2008 16:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Danke! Klappt wunderbar.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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.008s | 14 Queries | GZIP : On ]