Как переместить один объект из другого класса с помощью клавиатуры в OpenGL?

Как я могу переместить с клавиатуры свою сферу в OpenGL, если моя сфера является одним классом?

главный:

#include "glos.h"
#include <gl.h>
#include <glu.h>
#include <glut.h>
#include <glaux.h>
#include <math.h>  
#include"Sphere.cpp"
using namespace std;

void myinit(void);
void CALLBACK myReshape(GLsizei w, GLsizei h);
void CALLBACK display(void);

Sphere sfera1(0, 0, 0, 1);
Sphere sfera2(5, 0, 0, 1);


void myinit(void)
{
    glEnable(GL_LIGHTING); // activare iluminare
    glEnable(GL_LIGHT0);    // activare sursa 0

    glDepthFunc(GL_LESS);
    glEnable(GL_DEPTH_TEST);
}

void CALLBACK display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    sfera1.draw();
    sfera2.draw();
    glFlush();
}

void CALLBACK myReshape(GLsizei w, GLsizei h)
{
    if (!h) return;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRotated(25, 0.0, 1.0, 1.0);
    glTranslatef(0.0, -1.0, -6.0);
}

int main(int argc, char** argv)
{
    auxInitDisplayMode(AUX_SINGLE | AUX_RGB | AUX_DEPTH16);
    auxInitPosition(0, 0, 850, 850);
    auxInitWindow("Iluminarea");
    myinit();
    glutSpecialFunc(sfera1.keyboardown);
    auxReshapeFunc(myReshape);
    auxMainLoop(display);
    return(0);
}

Класс сферы:

#include "glos.h"
#include <glut.h>
#include <math.h>  
class Sphere{

public:
    float x, y, z, r;
    bool testColision = false;
    Sphere(float x, float y, float z, float r){
        this->x = x;
        this->y = y;
        this->z = z;
        this->r = r;
    }
    bool colision(Sphere sfera){
        float d = sqrt(pow(++x - ++sfera.x, 2) + pow(++y - ++sfera.y, 2) + pow(++z - ++sfera.z, 2));
        if (d <= r + sfera.r){
            return true;
        }
        else{
            return false;
        }
    }
    void draw(){
        glPushMatrix();
        glTranslatef(x, y, z);
        glutSolidSphere(r, 100, 100);
        glPopMatrix();
    }
    void keyboardown(int key, int x, int y) {
        if (key == 'w')
            this->x += x;
        if (key == 'a')
            this->x -= x;
        if (key == 'd')
            this->y += y;
        if (key == 's')
            this->y -= y;

        glutPostRedisplay();
    }
};

Я пытаюсь переместить его с помощью glutSpecialFunc(sfera1.keyboardown) или с помощью auxKeyFunc(AUX_RIGHT,sphere1.MutaDreapta1), но в обоих случаях я не могу... кто-нибудь может сказать мне, как это сделать?


person cavaler12345    schedule 29.05.2015    source источник


Ответы (1)


Действительно ли Glut и aux должны быть совместимы? или же glutSpecialFunc был опечаткой для auxSpecialFunc? ;-)

в любом случае часто лучше использовать (перенасыщение)KeyboardFunc (на некоторых системах Up/Down/Special делают странные вещи).

person Fabrice NEYRET    schedule 05.10.2015
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. - person Toby Speight; 05.10.2015
comment
Несколько минут назад у меня не было права комментировать ;-). - person Fabrice NEYRET; 05.10.2015
comment
... в любом случае, почему мой ответ не смешивает aux и перенасыщение, не является правильным ответом? - person Fabrice NEYRET; 05.10.2015
comment
Действительно ли Glut и aux должны быть совместимы? больше похоже на вопрос. Не смешивайте aux и glut был бы лучшим ответом, если бы вы написали именно это. Вы должны отредактировать свой ответ, чтобы он более очевидно предлагал решение. Спасибо. - person Toby Speight; 05.10.2015
comment
Нет: я никогда не пробовал смешивать глют и аукс, поэтому я не позволю себе утверждать, что это неправильно, даже если я уверен на 99%. Таким образом, правильный способ - указать, что, за исключением того, что если я ошибаюсь, и парень знает, что он делает, то проблема может заключаться в xxx. Просто подумайте обо всех отрицательных голосах, которые вы получили здесь от людей, понимающих вещи хуже, чем вы, или от того, что они аятоллы какого-то стиля кодирования :-(. Это заставляет меня рекомендовать более скромное и позитивное поведение. Я думаю, что любой может узнать ответы, даже недо- утвердительный. - person Fabrice NEYRET; 06.10.2015