# 2D Textur auf dem Display 2x so groß wie angeben?



## Friedhelm (16. Aug 2010)

Ich habe 2D Boxen auf dem Screen die 16x16 Pixel gross sind, mit einer 16x16 Textur.

Jedoch wird die Textur mit 32x32 Pixeln angezeigt, wie kommt das?


Edit: Der angehängte Screenshot ist 1920x1080, aber irgendwie verkleinert der Forum-Image-Importer das Bild auf 1024x576


```
createWindow(1920, 1080, true);



private void createWindow(int screenWidth, int screenHeight, boolean fullscreen) throws Exception {

		Display.setFullscreen(fullscreen);

		try	{

			DisplayMode dm[] = org.lwjgl.util.Display.getAvailableDisplayModes(320, 240, -1, -1, -1, -1, 60, 85);
			printDisplayModes(dm);

			org.lwjgl.util.Display.setDisplayMode(dm, new String[] { "width=" + screenWidth, "height=" + screenHeight, "freq=60", "bpp=" + Display.getDisplayMode().getBitsPerPixel()	});
		}
		catch(Exception e) {

			Sys.alert("Error", "Could not start full screen, switching to windowed mode");
			Display.setDisplayMode(new DisplayMode(screenWidth, screenHeight));
		}          

		Display.create();
	}



private void initGL() {

		//GL11.glPushAttrib(GL11.GL_ENABLE_BIT|GL11.GL_TRANSFORM_BIT|GL11.GL_HINT_BIT|GL11.GL_COLOR_BUFFER_BIT|GL11.GL_SCISSOR_BIT|GL11.GL_LINE_BIT|GL11.GL_TEXTURE_BIT);
		GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
		GL11.glPushMatrix();
		GL11.glLoadIdentity(); 

		GL11.glViewport(0, 0, Screen.screenWidth, Screen.screenHeight);		
		GL11.glOrtho(-virtualGameScreenWidth/2, virtualGameScreenWidth/2, -virtualGameScreenHeight/2, virtualGameScreenHeight/2, -1, 1);		

		GL11.glMatrixMode(GL11.GL_MODELVIEW); 
		GL11.glPushMatrix();
		GL11.glLoadIdentity();     
		GL11.glEnable(GL11.GL_TEXTURE_2D); // Enable Texture Mapping
		GL11.glEnable(GL11.GL_BLEND);
		GL11.glEnable(GL11.GL_LINE_SMOOTH);
		GL11.glDisable(GL11.GL_DEPTH_TEST); 
		GL11.glDisable(GL11.GL_LIGHTING);
		GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA);
		//GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST);

		//GL11.glDepthMask(false); 

		GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background

		textureLoader = new TextureLoader();	
	}




protected void draw() {

		if(!spawned || !visible) return;


		GL11.glPushMatrix();
		GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureIDPool.get(useTexturePoolFrame));

		
		GL11.glTranslatef(position.x,position.y,position.z); 
		
		
		// * Nur wenn das Objekt "rotiert", dann die Grafikkarte mit diesem Befehl belasten! *
		if(angle_old.x != angle.x) GL11.glRotatef(angle.x,1f,0f,0f);
		if(angle_old.y != angle.y) GL11.glRotatef(angle.y,0f,1f,0f);
		if(angle_old.z != angle.z) GL11.glRotatef(angle.z,0f,0f,1f);
		
		
		
protected float textureUp = 1;
	protected float textureDown = 0;
	protected float textureLeft = 0;
	protected float textureRight = 1;

boxZoom = 1.0f;

		GL11.glBegin(GL11.GL_QUADS);
		{
			GL11.glTexCoord2f(textureRight,textureUp); 
			GL11.glVertex2f(boxWidth*boxZoom, -boxHeight *boxZoom);

			GL11.glTexCoord2f(textureLeft,textureUp); 	
			GL11.glVertex2f(-boxWidth*boxZoom, -boxHeight *boxZoom);        

			GL11.glTexCoord2f(textureLeft,textureDown); 
			GL11.glVertex2f(-boxWidth*boxZoom,boxHeight*boxZoom);

			GL11.glTexCoord2f(textureRight,textureDown); 
			GL11.glVertex2f(boxWidth*boxZoom,boxHeight*boxZoom);

		}
		GL11.glEnd(); 

		GL11.glPopMatrix();
	}
```



Wenn ich die Box um die Haelfte verkleinere stimmt dann zwar die Groesse, aber die Textur ist immer noch pixlig (Screen2.jpg) . Irgendwie stimmt da was nicht


```
GL11.glBegin(GL11.GL_QUADS);
		{
			GL11.glTexCoord2f(textureRight,textureUp); 
			GL11.glVertex2f(boxWidth/2*boxZoom, -boxHeight/2 *boxZoom);

			GL11.glTexCoord2f(textureLeft,textureUp); 	
			GL11.glVertex2f(-boxWidth/2*boxZoom, -boxHeight/2 *boxZoom);        

			GL11.glTexCoord2f(textureLeft,textureDown); 
			GL11.glVertex2f(-boxWidth/2*boxZoom,boxHeight/2*boxZoom);

			GL11.glTexCoord2f(textureRight,textureDown); 
			GL11.glVertex2f(boxWidth/2*boxZoom,boxHeight/2*boxZoom);

		}
		GL11.glEnd();
```

Wegen dem Box pixlig... kann es sein das OpenGL eine MindestTexturGröße von 32x32 Pixel benötigt?


Erst wenn ich das hier mache (siehe Code und Screen3.jpg), dann sieht alles ok aus... nur da hab ich soviel umgebogen (halbiert und gezoomed), sowie eine 32x32 Textur genommen, dass da nix mehr orginal ist, so wie es OpenGL eigentlich von sich aus darstellen sollte.


```
boxZoom = 0.5f;
		
		GL11.glBegin(GL11.GL_QUADS);
		{
			GL11.glTexCoord2f(textureRight,textureUp); 
			GL11.glVertex2f(boxWidth/2*boxZoom, -boxHeight/2 *boxZoom);

			GL11.glTexCoord2f(textureLeft,textureUp); 	
			GL11.glVertex2f(-boxWidth/2*boxZoom, -boxHeight/2 *boxZoom);        

			GL11.glTexCoord2f(textureLeft,textureDown); 
			GL11.glVertex2f(-boxWidth/2*boxZoom,boxHeight/2*boxZoom);

			GL11.glTexCoord2f(textureRight,textureDown); 
			GL11.glVertex2f(boxWidth/2*boxZoom,boxHeight/2*boxZoom);

		}
		GL11.glEnd();
```


----------



## Friedhelm (16. Aug 2010)

Also das pixlige Problem habe ich gelößt, es war ein Gaussfilter und andere Image-Filter die ich angewendet hatte. 

Den Code habe ich nochmals umgeändert... aber das mit der Boxgröße stimmt immer noch nicht (ist immer noch 2x so gross wie angegeben, also 32 anstatt den originalen 16) :bahnhof:

Ich muss als immer noch Größe/2 oder Zoom 0.5f verwenden. Ist das immer so das openGL alles 2x so groß anzeigt und man dann um die Hälfte reduzieren muss?


----------



## EgonOlsen (16. Aug 2010)

Naja, deine Koordinaten gehen immer von -boxWidth/-boxHeight bis +boxWidth/+boxHeight. Ergo: Deine Boxen sind 2*boxWidth breit und 2*boxHeight hoch. Vielleicht ist das der Fehler?


----------



## Friedhelm (16. Aug 2010)

EgonOlsen hat gesagt.:


> Naja, deine Koordinaten gehen immer von -boxWidth/-boxHeight bis +boxWidth/+boxHeight. Ergo: Deine Boxen sind 2*boxWidth breit und 2*boxHeight hoch. Vielleicht ist das der Fehler?



Hmmm, das kann sein. Mal testen...


----------



## Friedhelm (16. Aug 2010)

Nach eingehender Prüfung :rtfm: sage ich :toll: danke.


----------

