6DOF, and my game

Started by
30 comments, last by medevilenemy 16 years, 10 months ago
I wouldn't be surprised if my problems were being caused by that apparent lack of relevant code [grin]. In any case my main focus at the moment is getting object transformations and rotations working, so I would definitely like to get openglobject working properly. I'll experiment with it, and hopefully will notice some stupid mistake I've overlooked that has been causing all this.

Thanks again.
There was a saying we had in college: Those who walk into the engineering building are never quite the same when they walk out.
Advertisement
I was just looking at my version of the openglobject class:
class Object{    private:        void UpdateFromPitchYaw();        void Orthonormalize();        float DegToRad(float angle);        float RadToDeg(float angle);        Vector3 m_pos;        Vector3 m_side;        Vector3 m_up;        Vector3 m_forward;        Vector3 m_upMove;        Vector3 m_forwardMove;        float m_pitch;        float m_yaw;    public:        Vector3 GetPos() const;        Vector3 GetSide() const;        Vector3 GetUp() const;        Vector3 GetForward() const;        Vector3 GetUpMove() const;        Vector3 GetForwardMove() const;        void SetPos(const Vector3& pos);        void SetMode(int mode);        void Identity();        void ApplyYaw(float angle);        void ApplyPitch(float angle);        void ApplyRoll(float angle);        void MoveAlongSideAxis(float t);        void MoveAlongUpAxis(float t);        void MoveAlongForwardAxis(float t);        void LookAt(const Vector3& pos, const Vector3& target, const Vector3& up);        void SetOpenGLModelMatrix();        void SetOpenGLViewMatrix();        void MultOpenGLModelMatrix();        void MultOpenGLViewMatrix();        void GetModelMatrix(float m[16]) const;        void GetViewMatrix(float m[16]) const;        void Move(            bool yawLeft,     bool yawRight,            bool pitchDown,   bool pitchUp,            bool rollRight,   bool rollLeft,            bool moveLeft,    bool moveRight,            bool moveUp,      bool moveDown,            bool moveForward, bool moveBack,            float yawSpeed,   float pitchSpeed, float rollSpeed,            float sideSpeed,  float upSpeed,    float forwardSpeed,            float dt);};Vector3 Object::GetPos() const {return m_pos;}Vector3 Object::GetSide() const {return m_side;}Vector3 Object::GetUp() const {return m_up;}Vector3 Object::GetForward() const {return m_forward;}Vector3 Object::GetUpMove() const {return m_upMove;}Vector3 Object::GetForwardMove() const {return m_forwardMove;}void Object::SetPos(const Vector3& pos) {m_pos = pos;}void Object::Identity(){    m_pos.set(0.0f, 0.0f, 0.0f);    m_side.set(1.0f, 0.0f, 0.0f);    m_up.set(0.0f, 1.0f, 0.0f);    m_forward.set(0.0f, 0.0f, 1.0f);    m_upMove = m_up;    m_forwardMove = m_forward;    m_pitch = 0.0f;    m_yaw = 0.0f;}void Object::ApplyYaw(float angle){    // Rotate side and forward about up    float s = sinf(DegToRad(angle));    float c = cosf(DegToRad(angle));    Vector3 forward = c * m_forward + s * m_side;    Vector3 side = c * m_side - s * m_forward;    m_side = side;    m_forward = forward;    m_upMove = m_up;    m_forwardMove = m_forward;    Orthonormalize();}void Object::ApplyPitch(float angle){    // Rotate up and forward about side    float s = sinf(DegToRad(angle));    float c = cosf(DegToRad(angle));    Vector3 up = c * m_up + s * m_forward;    Vector3 forward = c * m_forward - s * m_up;    m_up = up;    m_forward = forward;    m_upMove = m_up;    m_forwardMove = m_forward;    Orthonormalize();}void Object::ApplyRoll(float angle){    // Rotate side and up about forward    float s = sinf(DegToRad(angle));    float c = cosf(DegToRad(angle));    Vector3 side = c * m_side + s * m_up;    Vector3 up = c * m_up - s * m_side;    m_side = side;    m_up = up;    m_upMove = m_up;    m_forwardMove = m_forward;    Orthonormalize();}void Object::MoveAlongSideAxis(float t){    m_pos += m_side * t;}void Object::MoveAlongUpAxis(float t){    m_pos += m_upMove * t;}void Object::MoveAlongForwardAxis(float t){    m_pos += m_forwardMove * t;}void Object::LookAt(const Vector3& pos, const Vector3& target, const Vector3& up){    m_forward = target - pos;    m_forward.normalize();    m_side = up.cross(m_forward);    m_side.normalize();    m_up = m_forward.cross(m_side);    m_pos = pos;}void Object::SetOpenGLModelMatrix(){    float m[16];    GetModelMatrix(m);    glLoadMatrixf(m);}void Object::SetOpenGLViewMatrix(){    float m[16];    GetViewMatrix(m);    glLoadMatrixf(m);}void Object::MultOpenGLModelMatrix(){    float m[16];    GetModelMatrix(m);    glMultMatrixf(m);}void Object::MultOpenGLViewMatrix(){    float m[16];    GetViewMatrix(m);    glMultMatrixf(m);}void Object::GetModelMatrix(float m[16]) const{    m[0] =  m_side[0];    m[1] =  m_side[1];    m[2] =  m_side[2];    m[3] =  0.0f;    m[4] =  m_up[0];    m[5] =  m_up[1];    m[6] =  m_up[2];    m[7] =  0.0f;    m[8] =  m_forward[0];    m[9] =  m_forward[1];    m[10] = m_forward[2];    m[11] = 0.0f;    m[12] = m_pos[0];    m[13] = m_pos[1];    m[14] = m_pos[2];    m[15] = 1.0f;}void Object::GetViewMatrix(float m[16]) const{    m[0] =  -m_side[0];    m[1] =   m_up[0];    m[2] =  -m_forward[0];    m[3] =   0.0f;    m[4] =  -m_side[1];    m[5] =   m_up[1];    m[6] =  -m_forward[1];    m[7] =   0.0f;    m[8] =  -m_side[2];    m[9] =   m_up[2];    m[10] = -m_forward[2];    m[11] =  0.0f;    m[12] =  m_pos.dot(m_side);    m[13] = -m_pos.dot(m_up);    m[14] =  m_pos.dot(m_forward);    m[15] =  1.0f;}void Object::UpdateFromPitchYaw(){    float sp = sinf(DegToRad(m_pitch));    float cp = cosf(DegToRad(m_pitch));    float sy = sinf(DegToRad(m_yaw));    float cy = cosf(DegToRad(m_yaw));    m_side.set(cy, 0.0f, -sy);    m_forward.set(sy * cp, -sp, cy * cp);    m_up = m_forward.cross(m_side);    m_upMove.set(0.0f, 1.0f, 0.0f);    m_forwardMove = m_forward;}void Object::Orthonormalize(){    m_forward.normalize();    m_side = m_up.cross(m_forward);    m_side.normalize();    m_up = m_forward.cross(m_side);}void Object::Move(    bool yawLeft,     bool yawRight,    bool pitchDown,   bool pitchUp,    bool rollRight,   bool rollLeft,    bool moveLeft,    bool moveRight,    bool moveUp,      bool moveDown,    bool moveForward, bool moveBack,    float yawSpeed,   float pitchSpeed, float rollSpeed,    float sideSpeed,  float upSpeed,    float forwardSpeed,    float dt){    if (yawLeft)        ApplyYaw(yawSpeed * dt);    if (yawRight)        ApplyYaw(-yawSpeed * dt);    if (pitchDown)        ApplyPitch(pitchSpeed * dt);    if (pitchUp)        ApplyPitch(-pitchSpeed * dt);    if (rollRight)        ApplyRoll(rollSpeed * dt);    if (rollLeft)        ApplyRoll(-rollSpeed * dt);    if (moveLeft)        MoveAlongSideAxis(sideSpeed * dt);    if (moveRight)        MoveAlongSideAxis(-sideSpeed * dt);    if (moveUp)        MoveAlongUpAxis(upSpeed * dt);    if (moveDown)        MoveAlongUpAxis(-upSpeed * dt);    if (moveForward)        MoveAlongForwardAxis(forwardSpeed * dt);    if (moveBack)        MoveAlongForwardAxis(-forwardSpeed * dt);}float Object::DegToRad(float angle){    const float DEG_TO_RAD = (atanf(1.0f) * 4.0f) / 180.0f;    return angle * DEG_TO_RAD;}// --------------------------------------------------------------------------------------float Object::RadToDeg(float angle){    const float DEG_TO_RAD = 180.0f / (atanf(1.0f) * 4.0f);    return angle * DEG_TO_RAD;}


and I really did do a very bad job at adapting it. I left a lot of camera functions in there etc. Perhaps we can take the original openglobject class and strip out everything but the model manipulation functions and perhaps simplify the interface a bit? After all, all I am doing is manipulating objects with it.
There was a saying we had in college: Those who walk into the engineering building are never quite the same when they walk out.

This topic is closed to new replies.

Advertisement