Название: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 20, 2014, 14:45 Пытаюсь сделать анимацию маятника, но пока ничего не получается. Объясните как делать анимацию в qt с помощью OpenGL.
Название: Re: Анимация математического маятника (OpenGL) Отправлено: Alexu007 от Декабрь 21, 2014, 09:15 А в чём затруднение? В самом процессе рисования или в программировании координат маятника?
Название: Re: Анимация математического маятника (OpenGL) Отправлено: 8Observer8 от Декабрь 21, 2014, 14:21 Вот хороший пример с анимацией: C:\Qt\Qt5.4.0\Examples\Qt-5.4\opengl\qopenglwidget
Я сделал по нему ещё более простой пример. Здесь треугольник вращается вокруг оси Z: https://github.com/8Observer8/TexturedTriangle Но это только анимация. А дальше сложнее. Нужна математика, чтобы описать, как будут меняться координаты центра шара. Для перемещения шара используйте метод: Код
Шар загрузите из Blender'а P.S. Есть много путей решения задачи. Я описал, тот которым сам бы решал Название: Re: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 21, 2014, 14:46 Была проблема в создании самой анимации(движения). Она благополучно решилась.
Название: Re: Анимация математического маятника (OpenGL) Отправлено: Igors от Декабрь 21, 2014, 15:16 Была проблема в создании самой анимации(движения). Она благополучно решилась. Полагаю с помощью ф-ций sin/cos. И если только шарик на ниточке - зачем тащить OpenGL?Название: Re: Анимация математического маятника (OpenGL) Отправлено: 8Observer8 от Декабрь 21, 2014, 15:19 Хорошо. Я там усложнил к тому же. Можно сделать в 2D и без текстур, просто цвета. Вот вращение треугольника по кругу: https://github.com/8Observer8/TranslatedTriangle
(http://i9.pixs.ru/storage/8/9/1/Translated_7713172_15261891.png) Дополнительно в примере: - Треугольник можно приближать и отдалять с помощью колёсика мыши - Вращать с помощь зажатой левой кноки мыши (конечно, для 2D это нужно отключить) Правда, я в замешательстве, как круг нарисовать с помощью треугольников. Алгоритм нужен Ещё нужна математика, чтобы движения треугольника (для круга будет тоже самое и для шара тоже) замедлялось у границ, ускорялось внизу и затухало Если есть проект, то скиньте, пожалуйста, ссылку Название: Re: Анимация математического маятника (OpenGL) Отправлено: 8Observer8 от Декабрь 21, 2014, 15:38 А можете мне помочь уже в другом вопросе? Я делаю таблицу QTableWidget. Не получается взять данные из ячейки и сделать так чтобы таблица реагировала на ввод с клавиатуры Используйте QTableView. Он удобнееНадеюсь, вам пригодится мой пример: https://github.com/8Observer8/PointsOnCoordinatePlane (http://i9.pixs.ru/storage/2/5/3/Plotpng_3149755_15262253.png) Название: Re: Анимация математического маятника (OpenGL) Отправлено: 8Observer8 от Декабрь 21, 2014, 15:47 График нарисован с помощью библиотеки QCustomPlot: http://www.qcustomplot.com/
Из примера выше можно почерпнуть, как с таблицей работать Название: Re: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 21, 2014, 15:48 Спасибо. Но все таки хотелось бы сделать QTableWidget.
QTableWidgetItem *item = new QTableWidgetItem(); for(int row = 0; row < ui->tableWidget->rowCount(); row++) for(int column = 0; column < 1; column++) { l=item->text(); } ...... for(int row = 0; row < ui->tableWidget->rowCount(); row++) for(int column = 1; column < 2; column++) { item->setText(QString("%1").arg(l)); ui->tableWidget->setItem(row, column, item); } но планируется, что пользователь сам вводит данные в таблицу в первом столбце. Как сделать чтобы таблица обновлялась после ввода? Название: Re: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 21, 2014, 15:51 Была проблема в создании самой анимации(движения). Она благополучно решилась. Полагаю с помощью ф-ций sin/cos. И если только шарик на ниточке - зачем тащить OpenGL?Планировалась 3D модель маятника. Название: Re: Анимация математического маятника (OpenGL) Отправлено: 8Observer8 от Декабрь 21, 2014, 16:13 хотелось бы сделать QTableWidget В QTableWidget не знею как, а в QTableView есть такая фишка: создаёшь объект класса QStandardItemModel и устанавливаешь для таблицы эту модель. Работаешь с моделью, а она сама синхронизует с GUIПланировалась 3D модель маятника Поделитесь математикой. Мне интересно сделать примерНазвание: Re: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 21, 2014, 16:17 Только пока он у меня немного корявый но работает вроде.
*.h #ifndef GLWIDGET_H #define GLWIDGET_H #include <QGLWidget> #include <QtOpenGL> #include <QTimer> #include <glut.h> #include <GLAUX.H> #include <math.h> class GLWidget : public QGLWidget { Q_OBJECT private: GLdouble x1; GLdouble y1; double n, N; QTimer *timer; public: explicit GLWidget(QWidget *parent = 0); // ~GLWidget(); void initializeGL(); void paintGL(); void resizeGL(int w, int h); void stopTmr(); void startTmr(); public slots: void change(); }; #endif // GLWIDGET_H *.cpp #include "glwidget.h" #include <QtGui> #include <math.h> int l=0; double x=0.0, y=0.0; GLWidget::GLWidget(QWidget *parent): QGLWidget(parent) { x1=0.0; y1=0.0; n=30; N=10; timer = new QTimer; QPushButton *start = new QPushButton("start",this); start->setGeometry(280,290,91,31); connect(start, SIGNAL(clicked()), this, SLOT(change())); timer->start(1000); QGLFormat frmt; frmt.setSwapInterval(1); setFormat(frmt); } void GLWidget::initializeGL() { glClearColor(1.0, 1.0, 1.0, 1.0); glShadeModel(GL_FLAT); } void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glBegin(GL_LINES); glLineWidth(6); glVertex3f(x1, y1, 0.0); glVertex3f(0.0, 1.0, 0.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(x1, y1, 0.0); glColor3f(2.0, 0.0, 0.0); glutSolidSphere(0.2, 21, 2); glPopMatrix(); } void GLWidget::change() { for(double j=0.0; j<N; j++) { for(double i=0.0; i<n; i+=0.5) { x1 += 0.005; y1 += 0.002; updateGL(); } timer->stop(); for(double i=0.0; i<n; i+=0.5) { x1 -= 0.005; y1 -= 0.002; updateGL(); } timer->stop(); for(double i=0.0; i<n; i+=0.5) { x1 -= 0.005; y1 += 0.002; updateGL(); timer->stop(); } timer->stop(); for(double i=0.0; i<n; i+=0.5) { x1 += 0.005; y1 -= 0.002; updateGL(); } timer->stop(); } } void GLWidget::resizeGL(int w, int h) { glViewport(0, 0, (GLint)w, (GLint)h); } void GLWidget::stopTmr() { timer->stop(); } void GLWidget::startTmr() { timer->start(); } Название: Re: Анимация математического маятника (OpenGL) Отправлено: Igors от Декабрь 21, 2014, 18:34 void GLWidget::change() "Ну вы, блин, даете". В аттаче работающий пример, замените хедер(ы) если версия Qt поновее{ for(double j=0.0; j<N; j++) { for(double i=0.0; i<n; i+=0.5) { x1 += 0.005; y1 += 0.002; updateGL(); Название: Re: Анимация математического маятника (OpenGL) Отправлено: Asechka от Декабрь 21, 2014, 19:07 void GLWidget::change() "Ну вы, блин, даете". В аттаче работающий пример, замените хедер(ы) если версия Qt поновее{ for(double j=0.0; j<N; j++) { for(double i=0.0; i<n; i+=0.5) { x1 += 0.005; y1 += 0.002; updateGL(); Название: Re: Анимация математического маятника (OpenGL) Отправлено: Igors от Декабрь 22, 2014, 14:14 Поделитесь математикой. Мне интересно сделать пример Математика вверху (аттач). Жду красивого примера :) |