Better modifying the render or moving the camera?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Better modifying the render or moving the camera?

elect
Since I gogled for it without finding anything interesting, I would like to ask you for some suggestions regarding if it is better to scale/translate the render itself keeping the camera position fixed or maybe moving closer/further or rotate the camera keeping the render position fixed?

I need a zooming out/in, rotation in all the 3 axes and also this kind of rotation

http://www.reknow.de/downloads/opengl/capture-1.avi

that is, if I first translate my render and then I apply a rotation, this rotation should consider the center always the windows center, and not the translated one
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

gouessej
Administrator
This post was updated on .
Hi

Modifying the viewport might be enough for your purpose (zoom in and out).

Edit.: maybe it is a bad idea. I'm going to look at how I implement zoom in first person shooters.

Edit.: The OpenGL FAQ advises to modify the projection matrix rather than using glScale or glViewport/glScissor.
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

elect
gouessej wrote
Edit.: maybe it is a bad idea. I'm going to look at how I implement zoom in first person shooters.
How did you do?

gouessej wrote
Edit.: The OpenGL FAQ advises to modify the projection matrix rather than using glScale or glViewport/glScissor.
Where it says that, exactly?
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

gouessej
Administrator
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

elect
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

gouessej
Administrator
I can't read your video.
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Better modifying the render or moving the camera?

elect
This post was updated on .
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..