RE:Rotar Figura con Raton
Pues nunca he usado JOGL pero puedo ayudarte porque en esencia vas a hacer lo mismo solo vas a tener que cambiar los eventos que te voy a dar por accionListeners checate
esta funcion es cuando el mouse se está moviendo:
void CVisualizadorVersion300betaView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
switch(nFlags){
case MK_LBUTTON:
//GetRotacion(point.x,point.y);
if(getCamara1()->getMouseButtonDown())
{
getCamara1()->AngulosEsfericos(point.x,point.y);
}
break;
}
hay una bandera que te da el número de mensaje si es que se está apretando algún botón del mouse, ya dentro del switch validamos si el botón del lado izquierdo se está apretando si es así pues hace la funciónn que moverá la cámara.
la siguiente función es cuando el botón izquierdo del mouse se está apretando
void CVisualizadorVersion300betaView::OnLButtonDown(UINT nFlags,CPoint point)
{
if(!getCamara1()->getMouseButtonDown())
{
getCamara1()->setX1Y1(point.x,point.y);
getCamara1()->setMouseButtonDown(true);
}
CView::OnLButtonDown(nFlags, point);
}
de igual forma validamos si se está apretando el botón (esa es una variable que tuve que agrgar a mi clase) para que cuando entre a la función y si no estaba siendo apretado el botón se de un valor inicial que es el primer click sobre el render, se guardan esos valores y se pone en true MouseButtonDown,
la siguiente funcion es cuando dejas de apretar el botón del mouse
void CVisualizadorVersion300betaView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
getCamara1()->setX1Y1(0,0);
getCamara1()->setMouseButtonDown(false);
CView::OnLButtonUp(nFlags, point);
}
como verás le puse valores de 0,0 a las variables se desactiva la bandera del botón del mouse está apretado
lo único que queda son las funciones que nos darán el movimiento de la cámara
void Camaras::AngulosEsfericos(float x, float y)
{
x2 = x;
y2 = y;
alfa<360 ? alfa = alfa+(x2-x1):alfa=0;
beta<360 ? beta = beta+(y2-y1):beta=0;
x1 = x2;
y1 = y2;
}
esta función obtiene la diferencias en pixeles entre cada movimiento del mouse la cual se van agregando a los angulos acumuladores alfa y beta
la siguiente función te transforma la posición de la cámara en coordenadas esfericas a coordenas cartesianas
MiCamara(float Distancia)
{
x = Distancia * cos(alfa*PI/180);
y = Distancia * sin(beta*PI/180);
z = Distancia * sin(alfa*PI/180)*cos(beta*PI/180);
}
lo último que queda es poner tu cámara
glLookAt(x,y,z,0,0,0,0,1,0);
¡¡Y LISTO!!!
Espero haberte ayudado.