Open GL - Rotar Figura con Raton

   
Vista:

Rotar Figura con Raton

Publicado por Supra (12 intervenciones) el 11/08/2008 10:29:31
Hola que tal?? a ver si me podeis hechar una manilla. Resulta que tengo una figura en OpenGL que quiero rotar, segun mueva el raton, es decir: que pinche con el raton, rote la figura, suelte el raton y el giro de ésta pare. A ver si me podéis dar alguna idea de como hacerlo. Bueno si alguien trabaja con OpenGL Java ( JOGL ) como yo, seria mejor...pero si no es asi, pues nada da igual me explicais como se haría en OpenGL directamente y yo ya me las averiguo jejee

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Rotar Figura con Raton

Publicado por Fitopawer (9 intervenciones) el 23/04/2009 20:42:39
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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar