Login  Register

Re: Better modifying the render or moving the camera?

Posted by elect on Mar 07, 2012; 4:25pm
URL: https://forum.jogamp.org/Better-modifying-the-render-or-moving-the-camera-tp3780001p3807181.html

Ok guys, actually I am stuck on my program since 2 days and I dont know what to do...

Right now, I am rendering a cylinder, I can pan and zoom using this:

display()   {
...
                          glu.gluLookAt(translationX/gLAutoDrawable.getWidth()*scale*2,
                                            -translationY/gLAutoDrawable.getHeight()*scale*2, 2,
                          translationX/gLAutoDrawable.getWidth()*scale*2,
                                            -translationY/gLAutoDrawable.getHeight()*scale*2, 0,
...
}


I can also rotate using some custom functions:

display()   {
...

glu.gluLookAt

...

gl.glMultMatrixf(currentRotation, 0);

...

}

mouseDragged()   {

...

if(rotationMode)   {
            float newRotation[] = multiply(rotationX(-dy), rotationY(-dx));
            currentRotation = multiply(currentRotation, newRotation);
            rotationX +=dx;
            rotationY +=dy;
        }
...
}

private static float[] rotationX(float angleDeg)    {
        float m[] = identity();
        float angleRad = (float)Math.toRadians(angleDeg);
        float ca = (float)Math.cos(angleRad);
        float sa = (float)Math.sin(angleRad);
        m[ 5] =  ca;
        m[ 6] =  sa;
        m[ 9] = -sa;
        m[10] =  ca;
        return m;
    }

private static float[] rotationY(float angleDeg)    {
        float m[] = identity();
        float angleRad = (float)Math.toRadians(angleDeg);
        float ca = (float)Math.cos(angleRad);
        float sa = (float)Math.sin(angleRad);
        m[ 0] =  ca;
        m[ 2] = -sa;
        m[ 8] =  sa;
        m[10] =  ca;
        return m;
    }

private static float[] multiply(float m0[], float m1[]) {
        float m[] = new float[16];
        for (int x=0; x < 4; x++)   {
            for(int y=0; y < 4; y++)    {
                m[x*4 + y] = m0[x*4+0] * m1[y+ 0] +
                             m0[x*4+1] * m1[y+ 4] +
                             m0[x*4+2] * m1[y+ 8] +
                             m0[x*4+3] * m1[y+12];
            }
        }
        return m;
    }


This special rotation was mandatory because if I use glRotate to rotate my cylinder a first time over the horizontal plane, lets say, then my modelview coordinates rotates as well, and I dont want to have this, since I still need to rotate over the vertical axes

Now, the problem is that the rotation is performed taking the modelview origin as the rotation point...

This means that if I pan (aka move the camera) I would like to see a rotation over the center of my screen, and not the center of the modelview (that has been panned)

I hope it's clear, otherwise I can post something else to illustrate it better..