C++ OpenGl - Bereich von BMP laden

Chrisel

Cadet 4th Year
Registriert
Sep. 2010
Beiträge
70
Hallo alle zusammen,

Ich habe vor einiger Zeit mit OpenGl programmierung angefangen in C++. Nun bin ich gerade bei einem kleinen Projekt und brauche einen anderen Imageloader. Den den ich momentan verwende lädt das ganze bild komplett, was auch eigentlich richtig ist. Mein Problem vor dem ich gerade stehe ist folgendes:
Ich möchte von einem Würfel auf knopfdruck die textur ändern. Das ändern ist auch kein problem nur sind alle meine texturen auf einem einzigen bild(bmp) und ich möchte das nur ein bereich als textur geladen wird. Mit glTexCoord2f(0, 1); kann man nicht jeden beliebigen bereich wählen da es sich ja nicht um konkrete x und y koordinaten handelt sondern nur um prozentangaben wo angefangen und aufgehört werden soll. Also als beispiel:
Das bild besteht aus 16 gleich großen quadratischen texturen. Von unten links, reihe für reihe nach oben rechts bekommen die quadrate nummer von 1-16.
/13/14/15/16/
/ 9 /10/11/12/
/ 5 / 6 / 7/ 8 /
/ 1 / 2 /3 / 4 /
ich möchte nun quadrat 2 abfragen aber ich kann mithilfe von glTexCoord2f(0, 0.25); nur nr 1,6,11 und 16 konkret wählen. der einzige weg 2 überhaupt anzuwählen würde bedeuten das ich nr 1,5 und 6 mitbekomme als eine textur.
Hat da jemand vielleicht eine idee?:) Mir würde zb ein imageloader helfen oder vielleicht ist mir auch etwas entgangen bei opengl was einem helfen könnte... Danke schonmal für eure antworten:)

Viele Grüße
Chrisel
 
Zuletzt bearbeitet:
hallo,

also wie ich das verstanden hab sind 1 - 4, 5 - 8, 9 - 12 und der letzte immer jeweils ein strip?
oder baust du jedes quadrat richtig einzeln auf, denn genau das müsstest du wohl machen wenn du auf jedes einzeln zugreifen willst. wenn ich dich jetzt richtig verstanden hab.

mfg
 
Genau.. Also die Zahlen repräsentieren einfach nur die teiltexturen auf dem bild:D 16 stück sind auf einem bild welches ich in mein programm geladen habe. und ich möchte das mein würfel textur 2 hat:)
 
Hallo,

mir entgeht noch ein wenig das Problem. Die Texturkoordinate zu ändern, ist schon richtige Methode, für das was du erreichen möchtest. Die UV-Koordinaten gehen immer von 0 bis 1, sowohl auf X als auch auf Y.
Da ich mit OpenGL sehr lange nichts gemacht habe, kann ich dir keine Lösung bieten. Ich bin mir aber sicher, das du im Internet bzw. Google sehr schnell fündig wirst, wie man aus einem Texturatlas die jeweiligen Grafiken bekommt.
 
achso habs gerade total verrafft was du wolltest (is schon spät :D), also mit sowas hab ich noch nich gearbeitet, also ich denke mal das du dir entweder nen eigenen imageloader für sowas basteln musst, bzw. musst dir die bitmap die du geladen hast zurechtbastelt, heißt die breiche ausschneiden und daraus neue texturen machen, kann dir jetzt nicht sagen wie das genau geht, aber es geht definitiv, vllt gibts auch nen einfachereren weg bzw. komfortableren.

wenn du 2 texturen auf dem würfel haben willst musst du den würfel zumindestens aus 2 stripes aufbauen, und den beiden stripes jeweils eine textur zuweisen, die texturkorrdinaten werden dann ja nur 0,0;0,1;1,0;1,1 sein, wenn du die bilder vorher zurecht geschnitten hast.

sry wegen groß/kleinschreibung, aber ich bin gerade echt zu faul darüber nachzudenken^^

omg edit:
schon wieder verrafft, du wolltest ja gar nicht mit 2 texturen sry... is halt spät
 
ja mittlerweile hab ichs gerafft : D
trotzdem danke

edit: das smiley is hässlich
 
Danke für eure Hilfe:) Habs jetzt hingekriegt:) Musste aber viieeeeel nachdenken:D
Viele Grüße Chrisel
 
Zurück
Oben