Отсутствует изменение элементов массива с изменением времени (Qt, OpenGL)

Сначала была проблема с connect таймаута и слота change, т.к. изначально в drawBalls вызывал change с аргументом в виде массива, но connect не хотел кушать слот с аргументом, и пришлось пофиксить это. Но появилась новая проблема: change не изменяет массив posсо временем.

balls.h

 struct Position
{
    float x,y,z;

};
struct Move
{
    float dx=0.1,dy=0.1,dz=0.1;
};

class balls : public QOpenGLWidget
{
    Q_OBJECT
public:
    int n=10;
    float a=1;
    explicit balls(QWidget *parent = nullptr);
    void drawBalls(float a);
    QTimer tmr;
    Position *pos=new Position[n];
    Move *move=new Move[3];
public slots:
    void change(/*int n, Position *pos*/);

}; 
    

balls.cpp

balls::balls(QWidget *parent)
    : QOpenGLWidget(parent)
{
    connect(&tmr,SIGNAL(timeout()),this,SLOT(change()),Qt::AutoConnection);
    tmr.start(10);
}

void balls::change(/*int n,Position *pos*/)
{
    float dx1=0.1,dy1=0.1,dz1=0.1;

    for (int i=0;i<n;i+=3)
    {
        pos[i].x+=dx1;
        pos[i].y+=dy1;
        pos[i].z+=dz1;
    }

    update();
}

void balls::drawBalls(float a)
{
    
    srand((float)time(0));
    for (int i=0;i<n;i++)
    {

        pos[i].x=(float)((rand()/((float)RAND_MAX*(2*a)))+rand()/((float)RAND_MAX*(-a)));

        pos[i].y=(float)((rand()/((float)RAND_MAX*(2*a)))+rand()/((float)RAND_MAX*(-a)));

        pos[i].z=(float)((rand()/((float)RAND_MAX*(2*a)))+rand()/((float)RAND_MAX*(-a)));
    }


    glPointSize(10);
    glColor4f(0,0,0,1);
    glVertexPointer(3,GL_FLOAT,0,pos);
    glEnableClientState(GL_VERTEX_ARRAY);
        glDrawArrays(GL_POINTS,0,n);
        change();
    glDisableClientState(GL_VERTEX_ARRAY);
}

Даже отдельно создал переменные dx1,dy1 и dz1, думал что со structом не хочет работать.

Может как-то можно засунуть change в connect с аргументами, если проблема с вызовом change без аргумента?


Ответы (0 шт):