Seite 1 von 1

OpenGL - Teil einer Textur zeichnen

Verfasst: 28.08.2009, 20:29
von D-eath
Hallo,

bin noch relativ neu in der OpenGL Programmierung.
Ich möchte ein Quad mit einem Teil einer von mir vorher geladenen Textur texturieren:

Code: Alles auswählen

glBindTexture(GL_TEXTURE_2D, sprite.i_Texture);
	glBegin(GL_QUADS);
		glTexCoord2i(i_X_Texture, i_Y_Texture);
		glVertex2i(sprite.i_X, sprite.i_Y);

		glTexCoord2i(i_X_Texture, i_Y_Texture + i_Width);
		glVertex2i(sprite.i_X, sprite.i_Y + i_Width);

		glTexCoord2i(i_X_Texture + i_Height, i_Y_Texture + i_Width);
		glVertex2i(sprite.i_X +  i_Height, sprite.i_Y + i_Width);

		glTexCoord2i(i_X_Texture + i_Height, i_Y_Texture);
		glVertex2i(sprite.i_X +  i_Height, sprite.i_Y);	
	glEnd();
i_X_Texture / i_Y_Texture sind hierbei die X / Y-Koordinaten auf der Textur (bspw. 192, 32) und i_Width und i_Height sind die rechten und unteren Kanten des Ausschnitts.
Leider bekomme ich hier nicht den Ausschnitt, sondern einen braunen Pixel zurück.

Wie kann ich denn die Texturkoordinaten so transformieren, dass ich die in Pixeln angeben kann?
Bin irgendwie momentan zu verplant, um diese Berechnung richtig zu machen.

Grüße

Re: OpenGL - Teil einer Textur zeichnen

Verfasst: 28.08.2009, 21:00
von Eyeball
Textur-Koordinaten werden bei OpenGL im Bereich 0,0 bis 1,1 angegeben.

du musst also Position in der Textur durch die gesamte Größe der Textur dividieren, dann erhälst du die richtigen Koordinaten

z.B.:

Code: Alles auswählen

 x_texPos       
 -------------        = x_texCoord
 x_maxTex

hoffe konnte dir weiterhelfen

Re: OpenGL - Teil einer Textur zeichnen

Verfasst: 28.08.2009, 22:18
von D-eath
Danke, das war bereits die Lösung meines Problems. ;)

Re: OpenGL - Teil einer Textur zeichnen

Verfasst: 29.08.2009, 19:08
von D-eath
Wie kann ich denn hier noch zusätzlich mit der Breite eines Ausschnitts variieren? Sodass ich zB. 32, 32 - 48, 48 zeichnen kann.

Re: OpenGL - Teil einer Textur zeichnen

Verfasst: 29.08.2009, 21:04
von Zudomon
Wenn ich die Frage richtig verstehe, dann musst du auch hier nur die Werte, die du in Pixel angibst in Texturkoordinaten umrechnen. Wenn du also 32 - 48 haben möchtest und deine Textur z.B. 64 Pixel groß ist, dann brauchst auch nur jeweils 32 / 64 und 48 / 64 rechnen. Aber am besten gewöhnst du dir ab, in Pixel zu denken. Denn wenn du eine doppelt so große Textur benutzt, ändert sich an den Texturkoordinaten garnichts.