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
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
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.
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
Java:
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
Java:
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.
Java:
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();
Zuletzt bearbeitet: