Russian Qt Forum
Ноябрь 24, 2024, 18:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Анимация математического маятника (OpenGL)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Анимация математического маятника (OpenGL) (Прочитано 11117 раз)
Asechka
Гость
Анимация математического маятника (OpenGL)
«
:
Декабрь 20, 2014, 14:45 »
Пытаюсь сделать анимацию маятника, но пока ничего не получается. Объясните как делать анимацию в qt с помощью OpenGL.
«
Последнее редактирование: Декабрь 20, 2014, 15:25 от Asechka
»
Записан
Alexu007
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #1 :
Декабрь 21, 2014, 09:15 »
А в чём затруднение? В самом процессе рисования или в программировании координат маятника?
Записан
8Observer8
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #2 :
Декабрь 21, 2014, 14:21 »
Вот хороший пример с анимацией: C:\Qt\Qt5.4.0\Examples\Qt-5.4\opengl\qopenglwidget
Я сделал по нему ещё более простой пример. Здесь треугольник вращается вокруг оси Z:
https://github.com/8Observer8/TexturedTriangle
Но это только анимация. А дальше сложнее. Нужна математика, чтобы описать, как будут меняться координаты центра шара. Для перемещения шара используйте метод:
Код
C++ (Qt)
void
QMatrix4x4
::
translate
(
float
x
,
float
y
,
float
z
)
Шар загрузите из Blender'а
P.S. Есть много путей решения задачи. Я описал, тот которым сам бы решал
Записан
Asechka
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #3 :
Декабрь 21, 2014, 14:46 »
Была проблема в создании самой анимации(движения). Она благополучно решилась.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Анимация математического маятника (OpenGL)
«
Ответ #4 :
Декабрь 21, 2014, 15:16 »
Цитата: Asechka от Декабрь 21, 2014, 14:46
Была проблема в создании самой анимации(движения). Она благополучно решилась.
Полагаю с помощью ф-ций sin/cos. И если только шарик на ниточке - зачем тащить OpenGL?
Записан
8Observer8
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #5 :
Декабрь 21, 2014, 15:19 »
Хорошо. Я там усложнил к тому же. Можно сделать в 2D и без текстур, просто цвета. Вот вращение треугольника по кругу:
https://github.com/8Observer8/TranslatedTriangle
Дополнительно в примере:
- Треугольник можно приближать и отдалять с помощью колёсика мыши
- Вращать с помощь зажатой левой кноки мыши (конечно, для 2D это нужно отключить)
Правда, я в замешательстве, как круг нарисовать с помощью треугольников. Алгоритм нужен
Ещё нужна математика, чтобы движения треугольника (для круга будет тоже самое и для шара тоже) замедлялось у границ, ускорялось внизу и затухало
Если есть проект, то скиньте, пожалуйста, ссылку
«
Последнее редактирование: Декабрь 21, 2014, 15:22 от 8Observer8
»
Записан
8Observer8
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #6 :
Декабрь 21, 2014, 15:38 »
Цитата: Asechka от Декабрь 21, 2014, 15:24
А можете мне помочь уже в другом вопросе? Я делаю таблицу QTableWidget. Не получается взять данные из ячейки и сделать так чтобы таблица реагировала на ввод с клавиатуры
Используйте QTableView. Он удобнее
Надеюсь, вам пригодится мой пример:
https://github.com/8Observer8/PointsOnCoordinatePlane
Записан
8Observer8
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #7 :
Декабрь 21, 2014, 15:47 »
График нарисован с помощью библиотеки QCustomPlot:
http://www.qcustomplot.com/
Из примера выше можно почерпнуть, как с таблицей работать
Записан
Asechka
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #8 :
Декабрь 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);
}
но планируется, что пользователь сам вводит данные в таблицу в первом столбце.
Как сделать чтобы таблица обновлялась после ввода?
Записан
Asechka
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #9 :
Декабрь 21, 2014, 15:51 »
Цитата: Igors от Декабрь 21, 2014, 15:16
Цитата: Asechka от Декабрь 21, 2014, 14:46
Была проблема в создании самой анимации(движения). Она благополучно решилась.
Полагаю с помощью ф-ций sin/cos. И если только шарик на ниточке - зачем тащить OpenGL?
Планировалась 3D модель маятника.
Записан
8Observer8
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #10 :
Декабрь 21, 2014, 16:13 »
Цитата: Asechka от Декабрь 21, 2014, 15:48
хотелось бы сделать QTableWidget
В QTableWidget не знею как, а в QTableView есть такая фишка: создаёшь объект класса QStandardItemModel и устанавливаешь для таблицы эту модель. Работаешь с моделью, а она сама синхронизует с GUI
Цитата: Asechka от Декабрь 21, 2014, 15:48
Планировалась 3D модель маятника
Поделитесь математикой. Мне интересно сделать пример
«
Последнее редактирование: Декабрь 21, 2014, 16:16 от 8Observer8
»
Записан
Asechka
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #11 :
Декабрь 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();
}
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Анимация математического маятника (OpenGL)
«
Ответ #12 :
Декабрь 21, 2014, 18:34 »
Цитата: Asechka от Декабрь 21, 2014, 16:17
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();
"Ну вы, блин, даете". В аттаче работающий пример, замените хедер(ы) если версия Qt поновее
Записан
Asechka
Гость
Re: Анимация математического маятника (OpenGL)
«
Ответ #13 :
Декабрь 21, 2014, 19:07 »
Цитата: Igors от Декабрь 21, 2014, 18:34
Цитата: Asechka от Декабрь 21, 2014, 16:17
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();
"Ну вы, блин, даете". В аттаче работающий пример, замените хедер(ы) если версия Qt поновее
Учту
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Анимация математического маятника (OpenGL)
«
Ответ #14 :
Декабрь 22, 2014, 14:14 »
Цитата: 8Observer8 от Декабрь 21, 2014, 16:13
Поделитесь математикой. Мне интересно сделать пример
Математика вверху (аттач). Жду красивого примера
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...