Mouselook and SDL - Code

This is an old article from 2011. I was a kid. I learned a lot since then, so please do think twice when taking advice from me as a kid.

Okay, here is some code for mouselook with SDL

struct {
    int x, y;
    //In this case: the position where the mouse is held at
    bool trap; //flag for holding mouse at one place
} mouse;

void MouseMotion(){
    /* Set x and y to the current mouse position */
    int x, y;
    SDL_GetMouseState(&x, &y);
    int xdiff = x - mouse.x; //Calculate difference in x
    int ydiff = y - mouse.y; //Calculate difference in y
    /* rotate camera relative to what it was before */
    Cam->relRot( (float) ydiff, (float) xdiff, 0.0f); //Alternative: use gluLookAt(...);
    // ( xdiff and ydiff are in the right place... comment, if you need explaination)
    if (mouse.trap){
        //Reset Mouse Position to middle of screen
        SDL_WarpMouse(mouse.x, mouse.y); //Set Cursor
    }
}

int main (){
    //Initialization...blabla
    bool done = false;
    while(!done) {
        SDL_Event event;
        while(SDL_PollEvent(&event)) {
              switch(event.type)
              case SDL_MOUSEMOTION:
                 MouseMotion();
                 break;
              //... ther Events ...
        }
        //... do other things*
    }
    //End
}

This code is only a bunch of fragmentsto keep it simple. “Cam” is a camera class I created to handle every camera-related stuff (Position/Rotation…). “RelRot” adds the given vector values to the rotation-vector of the camera. When rendering the sceen, I rotate the Projection Matrix by the rotation-vector of the camera.

btw: this is not exacly the code I use in Mineshooter. I use more classes there ;)

Anyway, I hope this helps somebody out there :)

This post was imported from tumblr