Platte bewegen in openGL



  • Hallo Programmierer, 😕
    ich möchte gerne eine Platte (mit Bodenstruktur)so bewegen, dass es die Bewegung über eine Landschaft.
    Welche Variablen muss ich dazu verändern, damit die Platte wie ein Fließband abläuft?
    Hier ist der Quelltext der Platte:

    glBegin(GL_QUADS);

    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(x, y, z-10 ); //links oben

    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(-x, y, z-10 ); //rechts oben

    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(-x,-y, z); //rechts unten

    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(x,-y, z); //links unten

    glEnd();
    Kann man die Fließbandbewegung auch endlos machen?
    Ich bin Anfänger!! Bevor jemand schreibt Alphapuffervertex generieren und auf cos/sin übergeben...usw. 🙂
    Vielen Dank.

    Schöne Grüße

    Heike



  • ich versteh deine frage glaub ich nicht richtig, aber wenn du eine "fließband" bewegung willst, könntest du die platte einfach da lassen wo sie ist und die texturekoordinaten ändern



  • Alphapuffervertex generieren und auf cos/sin übergeben. Oder eben doch die Texturkoordinaten...

    Bye, TGGC \-/



  • Vielen Dank erst mal für die Hilfe.
    Ich habe es versucht, aber die Textur zieht nur langsam nach unten
    und oben wird sie immer kürzer. 😞

    Was muss ich ändern, a oder b?
    glTexCoord2f(a,b);

    In gluLookAt habe ich auch alles mögliche versucht.
    gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);

    Es kommt keine neue Tetur nach und es sieht so aus, als wenn ein Texturbild auf einer Platte liegt und von hinten nach vorne vorbeifährt, bis sie weg ist.

    Vielen Dank.

    Schöne Grüße

    Heike



  • ok, ich kenn mich zwar nich mit ogl aus, aber bei der theorie kann ich helfen:
    wenn du eine platte bewegst, bewegst du sie mit geschwindigkeit*zeit die bei erstellen des frames gebraucht wird.
    diesen verschiebewert musst du bei den texturkoordinaten mit draufrechnen, sodass du statt 0/0 0/1 1/0 1/1 zb. 0.9/0 0.9/1 1.9/0 und 1.9/1 hast, wenn der wert der draufadiert wird 1 übersteigt, wird er wieder genullt, die fließbandtextur beginnt wieder am anfang 😉
    bei den texturkoordinaten musst du selber experimentieren, welcher wert nun verschoben werden muss,das weis ich nu doch net ausm kopf^^



  • Du solltest beim Erstellen der Texture ein "GL_REPEAT"-Argument mit einbringen...
    Also etwa so:

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
    

    Denke ich...
    MfG Aoeke



  • heike2 schrieb:

    Ich habe es versucht, aber die Textur zieht nur langsam nach unten
    und oben wird sie immer kürzer.

    *LOL*
    Ich versuche mir das grad bildlich vorzustellen.

    Bye, TGGC \-/



  • Die Texturkoordinaten in "float-Form" funktionieren etwa so:

    Vorkommastelle = Kachelung
    Nachkommastelle = "Shift" (also ein Wert, um den die Textur verschoben wird)

    Wenn du z.B 2.5 übergibst wird die Textur 2x "gekachelt" und um die Hälfte
    verschoben.
    Um deine Fliessband-Bewegung zu realisieren könntest du also folgendes machen:
    cpp-pseudocode 😃

    float nVerschiebung = 0;
    
    MainLoop
    {
       nVerschiebung += 0.1; // je kleiner der Wert desto langsamer
       if (nVerschiebung >= 1.0)
         nVerschiebung = 0;
    
       glTexCoord2f(nTexCoordX1 + nVerschiebung, nTexCoordY1);
       glTexCoord2f(nTexCoordX2 + nVerschiebung, nTexCoordY2); 
       // ... usw
    
    }
    

    Hab das nicht getestet, aber so sollte das rein theoretisch funktionieren 😉
    Du musst natürlich gucken, ob die Verschiebung der X, Y oder gar Z Achse hinzugefügt werden soll. Das hängt davon ab, wie du dein Poly gezeichnet hast.



  • Vielen vielen vielen Dank für die Hilfe.
    Es hat tatsächlich geklappt.
    Ich hatte eine halbe Seite Variablenkalkulationen erstellt, addiert, multipliziert und in "glTexCoord2f" und "glVertex3f" zugewiesen und es hat nichts geklappt. Dass die Lösung so kurz ist, hätte ich nie gedacht.
    Vielen vielen vielen Dank. 🙂

    Schöne Grüße

    Heike


Anmelden zum Antworten