Durch Maus drehbares Modell, Winkelberechnung



  • Hi,
    versuche mich im Moment ein bisschen an OpenGL, Jetzt hab ich mir so ein Random-Heightmap-Erzeugungs-Irgendwas geschrieben. Jetzt wollte ich dass man das mit der Maus schön drehen kann, klappt bedingt gut und ist sicherlich nicht optimal gelöst (war gestern Nacht um 1 oder so) -

    //////////////User Eingaben//////////////////////
    
    bool MouseButtonPressed=false;
    
    GLfloat MouseAngleUpLeftToRightDown=0.0f; //Zum Speichern des Kipp-Winkels nach rechts unten
    GLfloat MouseAngleDownLeftToRightUp=0.0f; //Zum Speichern des Kipp-Winkels nach links unten
    GLfloat MouseAngleUpToDown=0.0f;           //Speichern des Drehwinkels
    GLfloat MouseAngleLeftToRight=0.0f;        //Zum Speichern des Kipp-Winkels nach vorne   
    
    GLfloat MouseAngleSpeed=0.3f;              //"Winkelgeschwindigkeit"
    int MouseX,MouseY,MouseOldX,MouseOldY;      // Maus Koordinaten
    
    /////////////////////// Draw Fkt. //////////////////////////////
    
    //Maus Winkel von Links Unten nach Rechts Oben
    	glRotatef(MouseAngleDownLeftToRightUp,1.0f,0.0f,1.0f);
    	//Maus Winkel von Links Oben nach Rechts Unten
    	glRotatef(MouseAngleUpLeftToRightDown,1.0f,0.0f,-1.0f);
    	//Maus Winkel von Unten nach Oben
    	glRotatef(MouseAngleUpToDown,0.0f,1.0f,0.0f);
    	//Maus Winkel von Links nach Rechts
    	glRotatef(MouseAngleLeftToRight,1.0f,0.0f,0.0f);
    
    	if(MouseButtonPressed)
    	{
    		//Maus bewegt sich nach Oben
    		if(MouseX==MouseOldX && MouseY>MouseOldY)
    		{
    			MouseAngleLeftToRight+=MouseAngleSpeed;
    		}
    		//Maus bewegt sich nach Unten
    		else if(MouseX==MouseOldX && MouseY<MouseOldY)
    		{
    			MouseAngleLeftToRight-=MouseAngleSpeed;
    		}
    		//Maus bewegt sich nach Rechts
    		else if(MouseX>MouseOldX && MouseY==MouseOldY)
    		{
    			MouseAngleUpToDown+=MouseAngleSpeed;
    		}
    		//Maus bewegt sich nach Links
    		else if(MouseX<MouseOldX && MouseY==MouseOldY)
    		{
    			MouseAngleUpToDown-=MouseAngleSpeed;
    		}
    
    		//Maus bewegt sich nach Rechts Oben
    		else if(MouseX>MouseOldX && MouseY>MouseOldY)
    		{
    			MouseAngleUpLeftToRightDown+=MouseAngleSpeed;
    		}
    
    		//Maus bewegt sich nach Links Oben
    		else if(MouseX<MouseOldX && MouseY>MouseOldY)
    		{
    			MouseAngleDownLeftToRightUp+=MouseAngleSpeed;
    		}
    
    		//Maus bewegt sich nach Links Unten
    		else if(MouseX<MouseOldX && MouseY<MouseOldY)
    		{
    			MouseAngleUpLeftToRightDown-=MouseAngleSpeed;
    		}
    
    		//Maus bewegt sich nach Rechts Unten
    		else if(MouseX>MouseOldX && MouseY<MouseOldY)
    		{
    			MouseAngleDownLeftToRightUp-=MouseAngleSpeed;
    		}
    
    	}
    

    EDIT: Meine Frage fehlt ja noch 🤡 Wie löst man das richtig, ohne 4 Rotates in unterschiedliche Richtungen, hab mal irgendwas von so Kugel-Trackball-Zeug gehört aber kA wie das richtig heisst, bzw. geht.



  • Hat keiner ein Stichwort für mich?



  • guckst du hier.


Anmelden zum Antworten