[OpenGL] Einfache Bewegung



  • void RenderOpenGL()
    {
    	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
    	glTranslatef(currentPosition[X], currentPosition[Y], currentPosition[Z]);
    	glBegin(GL_TRIANGLES);
    			glPushMatrix();
    		glColor3f(0.0, 0.0, 1.0);
    		glVertex3f(0.0, 1.0, 0.0);
    		glVertex3f(-1.0, -1.0, 0.0);
    		glVertex3f(1.0, -1.0, 0.0);
    			glPopMatrix();
    			glPushMatrix();
    		glVertex3f(currentPosition[X], currentPosition[Y]+1.0, currentPosition[Z]-10);
    		glVertex3f(currentPosition[X]-1.0, currentPosition[Y]-1.0, currentPosition[Z]-10);
    		glVertex3f(currentPosition[X]+1.0, currentPosition[Y]-1.0, currentPosition[Z]-10);
    			glPopMatrix();
    	glEnd();
    }
    

    Hi, mein kleines Problem:
    In currentPosition wird die derzeitige Position gespeichert (vom Spieler). Nun möchte ich ein kleines Dreieck dauerhaft im Blickfeld haben, nur leider funktioniert dies nicht (currentPosition[X]-1.0, ...)
    Mit SDL verarbeite ich die KeyEingaben und verändere dadurch meine Position.
    Ich hoffe jemand versteht mein Problem.



  • Was klappt denn nicht? Wird das Dreieck nicht dauernd angezeigt? Oder verschwindet es sobald du dich bewegst?



  • ganz verstehen tu ich es nicht aber das hat nichst zu sagen.
    was ist das für ein dreick ?
    fadenkreuz ? playermarkierung ? 😕

    mein vorschlag einfach mal so ins blaue 😃
    zeiche dein dreick einfach im orthogonalen modus (wie textausgabe oder hud).

    mist zu langsam 😃



  • Also ich würde das so machen, dass du einfach ein Dreieck an einer bestimmten Position im Raum erstellst und dann den Mittelpunkt des Dreiecks als Ausgangsbasis für die weiteren Berechnungen nimmst.

    Das würde ich so machen, dass ich mir immer die aktuelle Kameraposition hole (virtuelle Kamera, weil es unter OpenGL ja eigentlich keine richtige Kamera gibt) und dann einen Vektor von der momentanen Position zur Dreiecksmittelpunktposition berechne.
    Mit diesem Vektor könnte man dann zB die gluLookAt Funktion füttern oder sich halt selber eine passende Rotationsmatrix zusammenbasteln.
    Das hätte dann zur Folge, dass du bei jeglichen Bewegungen im Raum immer eine Ausrichtung des Blickvektors zum Dreieck hin erfahren würdest.

    Da ich nicht genau weiss was du jetzt genau willst stelle ich noch kurz die die andere Möglichkeit vor. Du könntest immer ein Dreieck relativ zur aktuellen Kameraposition zeichnen, also nicht relativ zum absoluten Nullpunkt im Worldspace Koordinatenssystem sondern zur Kamera selbst. Das hätte den Vorteil, dass sich der Abstand zum Dreieck auch nicht ändern würde.
    Und du müsstest die Kamera nicht ausrichten, weil das Dreieck das Objekt ist welches effektiv ausgerichtet wird.

    cya
    liquid



  • Noch einfacher:
    Setze vor dem Rendern des Dreiecks die Modelview- und die Kameramatrix zurück (auf Identitätsmatrix). Dann brauchst Du beim Rendern des Dreiecks die Position des Spielers garnicht zu berücksichtigen und auch seine Drehung ist dann egal.


Anmelden zum Antworten