Frage zur Objektprogrammierung mit OpenGL

T

theGK01

Mitglied
Thread Starter
Dabei seit
03.10.2010
Beiträge
29
Reaktionspunkte
5
Hallo,

diese Frage erscheint mir zwar einfach zu beantworten, aber ich habe mit Google trotzdem (oder deswegen?) keine Lösung gefunden.
Ich zeichne mittels OpenGL in einen OpenGL-View ein abgerundetes Viereck. Dies funktioniert auch. Nun möchte ich dieses Viereck mit den Pfeiltasten bewegen können (ja, das soll mal ein Spiel werden ;) ). Aber wie bewerkstellige ich das?
Wie gesagt, ich habe weder hier im Forum noch im Internet allgemein einen einfachen Weg gefunden, ein Objekt zu benennen und per Namen auch zu bewegen.

Ich verwende Xcode Version 4.2, mein OSX Target is 10.7. Ich habe außerdem das OpenGL-Framework im Projekt eingebunden.
Der Code zum zeichnen sieht wie folgt aus (auch wenn ich nicht davon ausgehe dass er relevant ist, da er ja funktioniert):
Code:
-(void)characterWithPosX:(double)posx PositionY:(double)posy {
    glColor3f(figure_red, figure_green, figure_blue);
    posy = posy + 0.5;
    posx = posx + 0.5;
    glBegin(GL_LINE_LOOP);
    {
        //Top
        glVertex2d(posx + -0.3, 0.5 + posy);
        glVertex2d(posx + 0.3, 0.5 + posy);
        //TopRight
        glVertex2d(posx + 0.42, 0.42 + posy);
        //Right
        glVertex2d(posx + 0.5, 0.3 + posy);
        glVertex2d(posx + 0.5, -0.3 + posy);
        //BottomRight
        glVertex2d(posx + 0.42, -0.42 + posy);
        //Bottom
        glVertex2d(posx + 0.3, -0.5 + posy);
        glVertex2d(posx + -0.3, -0.5 + posy);
        //BottomLeft
        glVertex2d(posx + -0.42, -0.42 + posy);
        //Left
        glVertex2d(posx + -0.5, -0.3 + posy);
        glVertex2d(posx + -0.5, 0.3 + posy);
        //TopLeft
        glVertex2d(posx + -0.42, 0.42 + posy);
    }
    glEnd();
    glFlush();
}



-(void)blockAtPosX:(double)posx PosY:(double)posy North:(bool)north East:(bool)east South:(bool)south West:(bool)west {
    
    glColor3f(block_red, block_green, block_blue);
    
    if(north == true) {
        glBegin(GL_LINES);
        {
            glVertex2d(posx, posy + 1);
            glVertex2d(posx + 1, posy + 1);
        }
    }
    
    if(east == true) {
        glBegin(GL_LINES);
        {
            glVertex2d(posx + 1, posy + 1);
            glVertex2d(posx + 1, posy);
        }
    }
    
    if(south == true) {
        glBegin(GL_LINES);
        {
            glVertex2d(posx, posy);
            glVertex2d(posx + 1, posy);
        }
    }
    
    if(west == true) {
        glBegin(GL_LINES);
        {
            glVertex2d(posx, posy + 1);
            glVertex2d(posx, posy);
        }
    }
    
    glEnd();
    glFlush();
}

(Die erste Funktion zeichnet den Charakter, ein abgerundetes Viereck; die zweite zeichnet ein simples Level)
 
Ist die Frage irgendwie falsch formuliert oder einfach nicht beantwortbar? :/
Es wäre nett wenn mir irgendwer irgendwas dazu sagen könnte! :(
 
Die Frage ist, wo ist das Problem eine Tastaturabfrage und einen Timer zu benutzen.

Zudem ist die Überschrift völlig irreführend.
 
Zuletzt bearbeitet:
Die Frage ist, wie ich das exakt anstelle. Ich weiß, das ich GLUT verwenden sollte (sollte, da es auch Beispiele im Internet ohne GLUT gibt...), aber ich weiß nicht, wie. Die Entwickler-/Programmwebsite von OpenGL ist auch eher ein Buch mit sieben Siegeln als wirklich hilfreich, und die ergoogelten Code- und Programmierbeispiele sind auch nur so erklärt, dass sie erst verstanden werden können, wenn man es eh kann. (Jedenfalls die, die ich gefunden habe).


Die Überschrift wollte ich nachträglich ändern, kann ich aber nicht. Ist mir zu spät aufgefallen, dass sie wenig präzise und irreführend ist. Sorry :(
 
Das werde ich auch tun.
Da ich den Code aber für die Schule brauche: Kannst du mir trotzdem sagen, wie ich das ganze "richtig" anstelle? Ich habe es geschafft, dass das Viereck nach Buttondruck verschoben gezeichnet wird, aber das ganze läuft dermaßen langsam, dass ich der Linie beim Zeichnen zusehen kann. Und das ist, wenn ich mir grafisch doch etwas aufwendigere Spiele wie Age Of Empires oder Anno angucke, ja wohl auch anders möglich :(
 
Was Du da machst ist zum Lernen super, hat aber nichts mit heutigem OpenGL zu tun. Darum ist es auch lahm.
Du benutzt durch die einzelnen glXXX Befehle die fixed-function-pipeline.
Jede einzelne Zeile Deines Codes durchläuft den kompletten Renderer und es werden dynamisch shader angelegt.

Da Dir das wahrscheinlich nicht viel sagt, wollte ich Dir gerade ein Deutsches Tutorial suchen, habe aber nur welche auf English.

Was Du suchst ist eine Einführung in shader.

http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

Au der Seite schau dich mal um.
 
  • Gefällt mir
Reaktionen: theGK01
Danke! Genau so etwas hatte ich gesucht. Das ist echt gut erklärt :) Danke Danke Danke!
Doch, die meisten Begriffe sagen mir was. Und, auch wenn das alles hier anders wirkt, ich habe Ahnung von Programmierung. Ich beherrsche etwa 10 Sprachen... Nur halt OpenGL nicht wirklich.
 
Zurück
Oben Unten