Camera doesn't move

Posted by hugo on Game Development See other posts from Game Development or by hugo
Published on 2012-12-19T20:57:00Z Indexed on 2012/12/20 5:14 UTC
Read the original article Hit count: 279

Filed under:
|
|
|

Here is my code, as my subject indicates i have implemented a camera but I couldn't make it move.

#define PI_OVER_180 0.0174532925f
#define GL_CLAMP_TO_EDGE 0x812F


#include "metinalifeyyaz.h"
#include <GL/glu.h>
#include <GL/glut.h>
#include <QTimer>
#include <cmath>
#include <QKeyEvent>
#include <QWidget>
#include <QDebug>


metinalifeyyaz::metinalifeyyaz(QWidget *parent) :
    QGLWidget(parent)
{

    this->setFocusPolicy(Qt:: StrongFocus);
    time = QTime::currentTime();
    timer = new QTimer(this);
    timer->setSingleShot(true);
    connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
    xpos = yrot = zpos = 0;
    walkbias = walkbiasangle = lookupdown = 0.0f;
    keyUp = keyDown = keyLeft = keyRight = keyPageUp = keyPageDown = false;

}

void metinalifeyyaz::drawBall() {

    //glTranslatef(6,0,4);
    glutSolidSphere(0.10005,300,30);

}
metinalifeyyaz:: ~metinalifeyyaz(){

    glDeleteTextures(1,texture);

}


void metinalifeyyaz::initializeGL(){

    glShadeModel(GL_SMOOTH);
    glClearColor(1.0,1.0,1.0,0.5);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    glDepthFunc(GL_LEQUAL);

    glClearColor(1.0,1.0,1.0,1.0);
    glShadeModel(GL_SMOOTH);

    GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
    GLfloat mat_shininess []={30.0};
    GLfloat light_position[]={1.0,1.0,1.0};
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);

    QImage img1 = convertToGLFormat(QImage(":/new/prefix1/halisaha2.bmp"));
    QImage img2 = convertToGLFormat(QImage(":/new/prefix1/white.bmp"));
    glGenTextures(2,texture);


    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1.width(), img1.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img1.bits());
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);


    glBindTexture(GL_TEXTURE_2D, texture[1]);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img2.width(), img2.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img2.bits());
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really nice perspective calculations

}

void metinalifeyyaz::resizeGL(int w, int h){

    if(h==0)

        h=1;

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45.0f, static_cast<GLfloat>(w)/h,0.1f,100.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void metinalifeyyaz::paintGL(){

    movePlayer();

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    GLfloat xtrans = -xpos;
    GLfloat ytrans = -walkbias - 0.50f;
    GLfloat ztrans = -zpos;
    GLfloat sceneroty = 360.0f - yrot;

    glLoadIdentity();
    glRotatef(lookupdown, 1.0f, 0.0f, 0.0f);
    glRotatef(sceneroty, 0.0f, 1.0f, 0.0f);
    glTranslatef(xtrans, ytrans+50, ztrans-130);

    glLoadIdentity();
    glTranslatef(1.0f,0.0f,-18.0f);
    glRotatef(45,1,0,0);
    drawScene();

    int delay = time.msecsTo(QTime::currentTime());
    if (delay == 0)
        delay = 1;
    time = QTime::currentTime();
    timer->start(qMax(0,10 - delay));



}

void metinalifeyyaz::movePlayer() {

    if (keyUp) {
        xpos -= sin(yrot * PI_OVER_180) * 0.5f;
        zpos -= cos(yrot * PI_OVER_180) * 0.5f;
        if (walkbiasangle >= 360.0f)
            walkbiasangle = 0.0f;
        else
            walkbiasangle += 7.0f;
        walkbias = sin(walkbiasangle * PI_OVER_180) / 10.0f;
    } else if (keyDown) {
        xpos += sin(yrot * PI_OVER_180)*0.5f;
        zpos += cos(yrot * PI_OVER_180)*0.5f ;
        if (walkbiasangle <= 7.0f)
            walkbiasangle = 360.0f;
        else
            walkbiasangle -= 7.0f;
        walkbias = sin(walkbiasangle * PI_OVER_180) / 10.0f;
    }

    if (keyLeft)
        yrot += 0.5f;
    else if (keyRight)
        yrot -= 0.5f;

    if (keyPageUp)
        lookupdown -= 0.5;
    else if (keyPageDown)
        lookupdown += 0.5;
}


void metinalifeyyaz::keyPressEvent(QKeyEvent *event) {

    switch (event->key()) {
    case Qt::Key_Escape:
        close();
        break;
    case Qt::Key_F1:
        setWindowState(windowState() ^ Qt::WindowFullScreen);
        break;
    default:
        QGLWidget::keyPressEvent(event);
    case Qt::Key_PageUp:
        keyPageUp = true;
        break;
    case Qt::Key_PageDown:
        keyPageDown = true;
        break;
    case Qt::Key_Left:
        keyLeft = true;
        break;
    case Qt::Key_Right:
        keyRight = true;
        break;
    case Qt::Key_Up:
        keyUp = true;
        break;
    case Qt::Key_Down:
        keyDown = true;
        break;

    }
}

void metinalifeyyaz::changeEvent(QEvent *event) {

    switch (event->type()) {
    case QEvent::WindowStateChange:

        if (windowState() == Qt::WindowFullScreen)
            setCursor(Qt::BlankCursor);
        else
            unsetCursor();
        break;
    default:
        break;
    }
}
void metinalifeyyaz::keyReleaseEvent(QKeyEvent *event) {

    switch (event->key()) {
    case Qt::Key_PageUp:
        keyPageUp = false;
        break;
    case Qt::Key_PageDown:
        keyPageDown = false;
        break;
    case Qt::Key_Left:
        keyLeft = false;
        break;
    case Qt::Key_Right:
        keyRight = false;
        break;
    case Qt::Key_Up:
        keyUp = false;
        break;
    case Qt::Key_Down:
        keyDown = false;
        break;
    default:
        QGLWidget::keyReleaseEvent(event);


    }
}
void metinalifeyyaz::drawScene(){

    glBegin(GL_QUADS);
    glNormal3f(0.0f,0.0f,1.0f);
    // glColor3f(0,0,1);           //back
    glVertex3f(-6,0,-4);
    glVertex3f(-6,-0.5,-4);
    glVertex3f(6,-0.5,-4);
    glVertex3f(6,0,-4);

    glEnd();

    glBegin(GL_QUADS);
    glNormal3f(0.0f,0.0f,-1.0f);                            //front
    glVertex3f(6,0,4);
    glVertex3f(6,-0.5,4);
    glVertex3f(-6,-0.5,4);
    glVertex3f(-6,0,4);
    glEnd();

    glBegin(GL_QUADS);
    glNormal3f(-1.0f,0.0f,0.0f);
    // glColor3f(0,0,1);       //left
    glVertex3f(-6,0,4);
    glVertex3f(-6,-0.5,4);
    glVertex3f(-6,-0.5,-4);
    glVertex3f(-6,0,-4);
    glEnd();

    glBegin(GL_QUADS);
    glNormal3f(1.0f,0.0f,0.0f);
    // glColor3f(0,0,1);       //right
    glVertex3f(6,0,-4);
    glVertex3f(6,-0.5,-4);
    glVertex3f(6,-0.5,4);
    glVertex3f(6,0,4);
    glEnd();

    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glBegin(GL_QUADS);
    glNormal3f(0.0f,1.0f,0.0f);//top

    glTexCoord2f(1.0f,0.0f);
    glVertex3f(6,0,-4);
    glTexCoord2f(1.0f,1.0f);
    glVertex3f(6,0,4);
    glTexCoord2f(0.0f,1.0f);
    glVertex3f(-6,0,4);
    glTexCoord2f(0.0f,0.0f);
    glVertex3f(-6,0,-4);
    glEnd();


    glBegin(GL_QUADS);
    glNormal3f(0.0f,-1.0f,0.0f);
    //glColor3f(0,0,1);       //bottom
    glVertex3f(6,-0.5,-4);
    glVertex3f(6,-0.5,4);
    glVertex3f(-6,-0.5,4);
    glVertex3f(-6,-0.5,-4);

    glEnd();

   // glPushMatrix();


    glBindTexture(GL_TEXTURE_2D, texture[1]);
    glBegin(GL_QUADS);

    glNormal3f(1.0f,0.0f,0.0f);
    glTexCoord2f(1.0f,0.0f);   //right far goal post front face
    glVertex3f(5,0.5,-0.95);
    glTexCoord2f(1.0f,1.0f);
    glVertex3f(5,0,-0.95);
    glTexCoord2f(0.0f,1.0f);
    glVertex3f(5,0,-1);
    glTexCoord2f(0.0f,0.0f);
    glVertex3f(5, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post back face
    glVertex3f(5.05,0.5,-0.95);
    glVertex3f(5.05,0,-0.95);
    glVertex3f(5.05,0,-1);
    glVertex3f(5.05, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post left face
    glVertex3f(5,0.5,-1);
    glVertex3f(5,0,-1);
    glVertex3f(5.05,0,-1);
    glVertex3f(5.05, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post right face
    glVertex3f(5.05,0.5,-0.95);
    glVertex3f(5.05,0,-0.95);
    glVertex3f(5,0,-0.95);
    glVertex3f(5, 0.5, -0.95);


    glColor3f(1,1,1);               //right near goal post front face
    glVertex3f(5,0.5,0.95);
    glVertex3f(5,0,0.95);
    glVertex3f(5,0,1);
    glVertex3f(5,0.5, 1);

    glColor3f(1,1,1);               //right near goal post back face
    glVertex3f(5.05,0.5,0.95);
    glVertex3f(5.05,0,0.95);
    glVertex3f(5.05,0,1);
    glVertex3f(5.05,0.5, 1);

    glColor3f(1,1,1);               //right near goal post left face
    glVertex3f(5,0.5,1);
    glVertex3f(5,0,1);
    glVertex3f(5.05,0,1);
    glVertex3f(5.05,0.5, 1);

    glColor3f(1,1,1);               //right near goal post right face
    glVertex3f(5.05,0.5,0.95);
    glVertex3f(5.05,0,0.95);
    glVertex3f(5,0,0.95);
    glVertex3f(5,0.5, 0.95);

    glColor3f(1,1,1);               //right crossbar front face
    glVertex3f(5,0.55,-1);
    glVertex3f(5,0.55,1);
    glVertex3f(5,0.5,1);
    glVertex3f(5,0.5,-1);

    glColor3f(1,1,1);               //right crossbar back face
    glVertex3f(5.05,0.55,-1);
    glVertex3f(5.05,0.55,1);
    glVertex3f(5.05,0.5,1);
    glVertex3f(5.05,0.5,-1);

    glColor3f(1,1,1);               //right crossbar bottom face
    glVertex3f(5.05,0.5,-1);
    glVertex3f(5.05,0.5,1);
    glVertex3f(5,0.5,1);
    glVertex3f(5,0.5,-1);

    glColor3f(1,1,1);               //right crossbar top face
    glVertex3f(5.05,0.55,-1);
    glVertex3f(5.05,0.55,1);
    glVertex3f(5,0.55,1);
    glVertex3f(5,0.55,-1);

    glColor3f(1,1,1);               //left far goal post front face
    glVertex3f(-5,0.5,-0.95);
    glVertex3f(-5,0,-0.95);
    glVertex3f(-5,0,-1);
    glVertex3f(-5, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post back face
    glVertex3f(-5.05,0.5,-0.95);
    glVertex3f(-5.05,0,-0.95);
    glVertex3f(-5.05,0,-1);
    glVertex3f(-5.05, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post left face
    glVertex3f(-5,0.5,-1);
    glVertex3f(-5,0,-1);
    glVertex3f(-5.05,0,-1);
    glVertex3f(-5.05, 0.5, -1);

    glColor3f(1,1,1);               //right far goal post right face
    glVertex3f(-5.05,0.5,-0.95);
    glVertex3f(-5.05,0,-0.95);
    glVertex3f(-5,0,-0.95);
    glVertex3f(-5, 0.5, -0.95);

    glColor3f(1,1,1);               //left near goal post front face
    glVertex3f(-5,0.5,0.95);
    glVertex3f(-5,0,0.95);
    glVertex3f(-5,0,1);
    glVertex3f(-5,0.5, 1);

    glColor3f(1,1,1);               //right near goal post back face
    glVertex3f(-5.05,0.5,0.95);
    glVertex3f(-5.05,0,0.95);
    glVertex3f(-5.05,0,1);
    glVertex3f(-5.05,0.5, 1);

    glColor3f(1,1,1);               //right near goal post left face
    glVertex3f(-5,0.5,1);
    glVertex3f(-5,0,1);
    glVertex3f(-5.05,0,1);
    glVertex3f(-5.05,0.5, 1);

    glColor3f(1,1,1);               //right near goal post right face
    glVertex3f(-5.05,0.5,0.95);
    glVertex3f(-5.05,0,0.95);
    glVertex3f(-5,0,0.95);
    glVertex3f(-5,0.5, 0.95);


    glColor3f(1,1,1);               //left crossbar front face
    glVertex3f(-5,0.55,-1);
    glVertex3f(-5,0.55,1);
    glVertex3f(-5,0.5,1);
    glVertex3f(-5,0.5,-1);

    glColor3f(1,1,1);               //right crossbar back face
    glVertex3f(-5.05,0.55,-1);
    glVertex3f(-5.05,0.55,1);
    glVertex3f(-5.05,0.5,1);
    glVertex3f(-5.05,0.5,-1);

    glColor3f(1,1,1);               //right crossbar bottom face
    glVertex3f(-5.05,0.5,-1);
    glVertex3f(-5.05,0.5,1);
    glVertex3f(-5,0.5,1);
    glVertex3f(-5,0.5,-1);

    glColor3f(1,1,1);               //right crossbar top face
    glVertex3f(-5.05,0.55,-1);
    glVertex3f(-5.05,0.55,1);
    glVertex3f(-5,0.55,1);
    glVertex3f(-5,0.55,-1);

    glEnd();


 //   glPopMatrix();


//    glPushMatrix();
//    glTranslatef(0,0,0);



//    glutSolidSphere(0.10005,500,30);
//    glPopMatrix();

}

© Game Development or respective owner

Related posts about opengl

Related posts about camera