OpenGl Grafik verschwimmt



  • Hi Leute habe folgendes Problem:

    Ich habe mit OpenGL ein gerade Straße mit Bordstein und Gehweg dargestellt und diese mit einer Textur bezogen.

    Die Kamera fliegt die Straße entlang.
    Das habe ich folgendermassen erreicht:

    float f = 0.0;
    
    glTranslatef(2,-2,f);
    
    f += 0.005;
    

    Es wird auch dargestellt und die Bewegung ist auch flüssig.
    Mein Problem ist Das Die Texturen aber verschwimmen.
    Je weiter die Straße in den Bildschirm ragt desto stärker verschmitt die Textur.
    Erkennbar wird das ab etwa 5-6 OpenGl-Einheiten in den Bildschirm hinein.
    Noch etwas weiter hinenein und die Textur verschwimmt immer Stärker so das selbst die Mittellinie im Grau verschwimmt.

    Die Straßßen Textur ist 512x64 Pixel.
    Die Textur ist eine Bitmap datei.
    Die Fenstergröße 800x600.
    Bei Einer größeren Fenstergröße ist keine besserung eingetretten.

    Folgendermassen habe ich die Textur Initialiesiert:

    GLuint Texture = 0;
        {
            sf::Image Image;
            if (!Image.LoadFromFile("Straßentextur.bmp"))
    
            glGenTextures(1, &Texture);
            glBindTexture(GL_TEXTURE_2D, Texture);
            gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Image.GetWidth(), Image.GetHeight(), GL_RGBA, GL_UNSIGNED_BYTE, Image.GetPixelsPtr());
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        }
    

    Meine Frage ist nun woran das Liegt?
    Ich vermutte das Die Textur zu klein ist.
    Da es Aber viel Zeit in Anspruch nimmt die Textur neu zu gestallten möchte ich auf deisem Weg ausschliessen das es sich dabei nur um eine Einstellungssache von Opengl handelt.



  • Die Textur wird auf das Objekt angepasst. Du kannst die Textur kacheln, allerdings wäre die bessere Lösung, die Straße mittels Modellierungsprogrammen auf die Straße zu mappen. Da kannste dann auch alles selber anpassen. Außerdem solltest du lieber gluLookAt() anstatt glTranslatef() benutzen, da es dynamischer und flüssiger ist.



  • Kannst du mir das Mít Dem Modelierung Programm genauer erklären?
    Meinst du Sowas wie Blender?

    Ich bin noch Neuling in OpenGL und versuche nur Sachen auszutesten.
    mit glTranslate setz ich ja den Stift sozusagen da hin wo ich anfage das Objekt zu zeichnen.
    Und was mache ich mit gluLookAt? Ich denke mal das man damit nur an eine bestimmte stelle mit der Kamera springt richtig?



  • Ja, ich meine sowas wie Blender. Dann speicherste dein Mesh zum Test einfach mal als OBJ ab und schaust es dir an. Dann lieste es ein und renderst es (:.

    gluLookAt() generiert eine Betrachtermatrix. Also aus Betrachterposition, Position der Betrachterrichtung und Richtung eines Vektors, der nach oben zeigt (unwichtig für dich).



  • Kann es sein, dass das mit dem Textur-Filter zusammen hängt? Das Problem ist, dass du die Straße wahrscheinlich aus einem sehr steilen Winkel betrachtest. Das bringt für eine saubere Texturdarstellung einige Schwierigkeiten mit sich.

    Du verwendest schon mipmaps. Die einzige Möglichkeit zur Verbesserung ist noch die Verwendung von Anisotropic filtering. Du kannst mal schauen. Machmal haben die Grafikkarten-Treiber eine Option, in denen du Anisotropic filtering für alle Anwendungen einschalten kannst. Probiere das mal aus.

    Aber sei gewarnt. Anisotropic filtering ist sehr rechenintensiev!


Anmelden zum Antworten