Ich finde den fehler nicht!



  • float move = 0.0f;
    #define LENGHT_OF_MOVE 0.1f
    

    🙂



  • bist du sicher das idle() aufgerufen wird? Mehr kann ich dir leider nicht im Moment helfen, habe zwar Glut + Doku da, aber benutze es nicht.



  • Du lädst die Einheitsmatrix und pushed diese auf den stack?!
    für was das?

    Versuch mal

    glLoadIdentity();
    glPopMatrix();
    glTranslatef(move,0.0f,0.0f);
    glBegin(GL_POLYGON);
    glVertex3f(-0.09f,-0.10f, 0.00f);
    glVertex3f(-0.06f, 0.05f, 0.00f);
    glVertex3f(-0.04f, 0.02f, 0.00f);
    glVertex3f(-0.02f, 0.07f, 0.00f);

    glVertex3f( 0.00f, 0.08f, 0.00f);

    glVertex3f( 0.02f, 0.07f, 0.00f);
    glVertex3f( 0.04f, 0.02f, 0.00f);
    glVertex3f( 0.06f, 0.05f, 0.00f);
    glVertex3f( 0.09f,-0.10f, 0.00f);

    glVertex3f( 0.04f,-0.10f, 0.00f);
    glVertex3f( 0.00f,-0.07f, 0.00f);
    glVertex3f(-0.04f,-0.10f, 0.00f);
    glEnd();
    glPushMatrix();

    So müsste es funktionieren...

    ich mach das positionieren von objekten so (so geht es fix :D):

    Camera Setup
    glPushMatrix();

    und dann beim zeichnen von jedem Objekt:
    glLoadIdentity();
    glPopMatrix();
    glPushMatrix():
    glTranslate():
    //Rotate, scale ...
    //Objekt zeichnen



  • die funktion idle wird aufgerufen. Das Rauschiff wird ja auch gerendert.

    irgendwie verstehe ich das noch nicht ganz..., aber wenn ich das so mache:

    glLoadIdentity(); 
    glPopMatrix(); 
    glTranslatef(move,0.0f,0.0f); 
    glBegin(GL_POLYGON); 
    glVertex3f(-0.09f,-0.10f, 0.00f); 
    glVertex3f(-0.06f, 0.05f, 0.00f); 
    glVertex3f(-0.04f, 0.02f, 0.00f); 
    glVertex3f(-0.02f, 0.07f, 0.00f); 
    
    glVertex3f( 0.00f, 0.08f, 0.00f); 
    
    glVertex3f( 0.02f, 0.07f, 0.00f); 
    glVertex3f( 0.04f, 0.02f, 0.00f); 
    glVertex3f( 0.06f, 0.05f, 0.00f); 
    glVertex3f( 0.09f,-0.10f, 0.00f); 
    
    glVertex3f( 0.04f,-0.10f, 0.00f); 
    glVertex3f( 0.00f,-0.07f, 0.00f); 
    glVertex3f(-0.04f,-0.10f, 0.00f); 
    glEnd(); 
    glPushMatrix();
    

    habe ich immer noch das problem 😞



  • dann schau mal ob sich der wert von "move" auch wirklich ändert...



  • ich habe jetzt mal das mit reinprogrammiert:

    cout << move << endl;
    

    jetzt verschwindet das raumschiff sofort nach rechts, und ich schau in die konsole (die ja bei glut mitläuft) und der wert steigt permanent!?!?

    wenn ich das cout wieder herausnehme ist das gleiche wie vorher. ich glaub ich gebe es auf, was verdammt nochmal ist jetzt schon wieder los???!!! 😡



  • Wo rufst du denn "glutenterGameMode" auf?

    greets,
    cNc (der keine lust hatte sich einzuloggn 😉 )



  • Achso, wenn möglich, poste mal den gesamten code, dann geh ich auf fehlersuche ^^



  • #include <windows.h>
    #include <GL\glut.h>
    #include <iostream.h>
    
    /*
        D E C L A R E
        ===============
    
        Variablendeklarination
    */
    #define LENGTH_OF_MOVE 0.1f
    
    char buffer[12];
    float move = 0.0f;
    
    /*
        K E Y _ D O W N
        ===============
    
        Testen ob Taste gedrückt ist
    */
    void key_down(unsigned char key, int x, int y)
    {
        buffer[key]=1;
    }
    void key_up(unsigned char key, int x, int y)
    {
        buffer[key]=0;
    }
    
    /*
        I N I T
        ===============
    
        Initialisierungsfunktion
    */
    void init()
    {
        glClearColor(0,0,0,0);
        glColor3f(1,1,1);
        glEnable(GL_DEPTH_TEST);
    
        glMatrixMode(GL_PROJECTION);
        glMatrixMode(GL_MODELVIEW);
    }
    
    /*
        I D L E
        ===============
    
        Auswertung der Tasten die gedrückt
        wurden
    */
    void idle()
    {
        if(buffer[27]) { 
            exit(0); 
        }
        if(buffer[75]) {
        	move = (move - 0.1f);
        }
        if(buffer[77]) {
      	 	move = (move + 0.1f);
        }
        glutPostRedisplay();
    }
    
    /*
        D I S P L A Y
        ===============
    
        Ausgabefunktion der Primitiven usw. Renderer
        Funktion
    */
    void display()
    {
        glLoadIdentity();
    
        glPopMatrix();
    
        glTranslatef(move,0.0f,0.0f);
        //cout << move << endl;
    
        glBegin(GL_POLYGON);
        	glVertex3f(-0.09f,-0.10f, 0.00f);
        	glVertex3f(-0.06f, 0.05f, 0.00f);
        	glVertex3f(-0.04f, 0.02f, 0.00f);
        	glVertex3f(-0.02f, 0.07f, 0.00f);
    
            glVertex3f( 0.00f, 0.08f, 0.00f); 
    
            glVertex3f( 0.02f, 0.07f, 0.00f);
            glVertex3f( 0.04f, 0.02f, 0.00f);
            glVertex3f( 0.06f, 0.05f, 0.00f);
            glVertex3f( 0.09f,-0.10f, 0.00f);
    
            glVertex3f( 0.04f,-0.10f, 0.00f);
            glVertex3f( 0.00f,-0.07f, 0.00f);
            glVertex3f(-0.04f,-0.10f, 0.00f);       	
        glEnd();
        glPushMatrix();
    
        glFlush();
        glutSwapBuffers();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        //move = 0.0f;
    }
    
    /*
        M A I N
        ===============
    
        Hauptfunktion des Programmes, Haupteintrittspunkt
        von hier werden alle Prozesse gesteuert
    */
    int main(int argc, char *argv[])
    {
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
        glutGameModeString("800x600:16@75"); 
        glutInitWindowSize(500,500);
        glutInitWindowPosition(0,0);
        glutCreateWindow("Leis - FENSTER");
        glutFullScreen();
        init();
        glutIdleFunc(idle);
        glutDisplayFunc(display);
        glutKeyboardFunc(key_down);
        glutKeyboardUpFunc(key_up);
        glutMainLoop();
    
        return 0;
    }
    

    😉



  • Buffer geht nur bis 11 und nicht bis 77.



  • hab den Puffer auf 100 geändert es klappt immer noch nicht 😞 😡 😕



  • wo wird denn die idle() funktion aufgerufen?



  • cpt.oneeye schrieb:

    }
    wo wird denn die idle() funktion aufgerufen?

    eXpEdItIoN-gEfOrCe!! schrieb:

    glutIdleFunc(idle);
    

    als callback hier



  • Wenn du sagst, das das Raumschiff nach einem cout sofort nach rechts verschwindet, kanns eigentlich nur ne falsche Verlinkung des input-output sein 😞

    und ändere den buffer auf 255 😉



  • hmmm.. anscheinend mag mich opengl nicht so 🙄



  • ich hab jetzt das ganze mal in linux gemacht, die variable move hat trotz der betätigen der Pfeiltasten den Wert 0.000000!


  • Mod

    gib es dir mal aus wenn du Keydown und Keyup events hast.

    [edit] wo ist die stelle an der du "buffer" initialisierst?

    du hast geschrieben dass das gezeichnete einmal ganz schnell wegbewegt wurde, wäre möglich dass das der grund ist... [/edit]

    rapso->greets();



  • ich hab jetzt mal ausgeben lassen wenn es die bedingung für die tasten erfüllt, ich kam zu den ergebnis dass die Tastencodes 77 und 75 irgendwie nicht funktionieren ?????!!! ich hab das ganze mal mit 8 (backspace) und 13 (return) gemacht jetzt funktionierts?????!!

    komisch oder?? und jetzt? *g*

    ps: im konqueror kann ich die smilies nicht anklicken!

    edit:
    ganz oben:

    char buffer[255];
    

  • Mod

    müßtest du das nicht mut 0 initialisieren?

    naja, gut dass es läuft, konnte dann wenigstens nen debuggingtip liefern 😃

    rapso->greets();



  • rapso schrieb:

    müßtest du das nicht mut 0 initialisieren?

    naja, gut dass es läuft, konnte dann wenigstens nen debuggingtip liefern 😃

    rapso->greets();

    jap, danke 🙂

    weis nun jemand wie ich das mit den pfeiltasten hinbekomme?

    im Assembler-Buch stehen folgende Scancodes:
    Return - 13
    ESC - 27
    TAB - 9
    BACKSPACE - 8
    PFEILTASTE OBEN - 0;72
    PFEILTASTE LINKS - 0;75
    PFEILTASTE RECHTS - 0;77
    PFEILTASTE UNTEN - 0;80
    POS 1 - 0;71
    ... usw

    genau bei den Tasten, bei den es nicht funtzt steht so ein 0; davor, hat das (was seeeeehr warscheinlich ist) damit zu tun?

    Danke und Grüße
    EGF 🙂


Anmelden zum Antworten