Отсутствует изменение элементов массива с изменением времени (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 без аргумента?