OpenGL kann Perspektive nich ändern



  • Hio,
    ziemliche Anfängerfrage zu OpenGL. Also folgendes: Ich will eine Dreieck zeichnen 😉 Das geht auch soweit, nur kann ich mein Dreieck nicht positionieren. Egal welche Werte ich vorher glTranslate gebe, das Dreieck wird immer gleich gezeigt (also gleiche Größe/Position). Komisch ist auch, dass ich das Dreieck sehe, was ja eigentlich nicht der Fall sein dürfte, da ich niemals im Programm "rauszoome". Also hier mal der relevante Code:

    public void display(GLAutoDrawable drawable) 
    	{	
    		//clear Background and render new
    		GL gl = drawable.getGL();
    		gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    		draw();
    	}
    
    	public void init(GLAutoDrawable drawable) 
    	{	
    		GL gl = drawable.getGL();
    		gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
    	}
    
    	public void draw()
    	{
                    //color[] ist ein array für die RGB Werte->das geht. size=5
    		this.getGL().glBegin(GL.GL_TRIANGLES);
    			this.getGL().glColor3f(color[0],color[1],color[2]);
    			this.getGL().glTranslated(0,0,-size);
    		  	this.getGL().glVertex3f(-1,-1, 0);  
    		  	this.getGL().glVertex3f( 1,-1, 0);
    		  	this.getGL().glVertex3f( 0, 1, 0);
    		this.getGL().glEnd();
    	}
    

    Also ich mache das mit Java/JOGL, aber vom Prinzip her ist das ja (sollte es zumindest) dasselbe sein. Jemand ne Idee?

    Achso und noch eine Frage: Ich möchte Funktionen wie "draw()" so isoliert wie möglich halten. Das heisst, alle Änderungen die draw() an meiner Perspektive etc. vornimmt sollten danach wieder so sein wie vorher. Nutze ich dazu GLPop/PushMatrix um die alten Einstellungen zu speichern/wiederherzustellen? oder wie mache ich das am Besten?

    Danke!

    Edit: Nach langem suchen fand ich es; Perspektive fehlte mir im init()



  • innerhalb eines glBegin..glEnd-Blocks kannst Du die Matrizen nicht veraendern.



  • Joa, das war der zweite Punkt den ich vor ca. 10min fand 😉
    Aber danke für die Info!


Anmelden zum Antworten