Форум программистов, компьютерный форум CyberForum.ru

OpenGL вращение фигур, нарисованных точками - C++

Восстановить пароль Регистрация
 
Neon_Burg
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 4
02.05.2014, 12:27     OpenGL вращение фигур, нарисованных точками #1
Hi всем. Ломаю голову над задачей о вращении фигур, нарисованных точками. Обычные фигуры (триугольники, полигоны и т.д) , построенные по точкам в openGL я вращаю функцией glRotatef(angle, x, y, z);

Но есть и не обычные фигуры. В моем случае это блок, который строится циклом из точек. В функцию передается значение Xo, Yo, - откуда начинать строить, а так же width и height - ширина и высота соответственно.

Задача: Научить получившеюся бувку Щ вращаться по нажатию клавиш. Работаю в Qt creator, реакция на нажатие клавиш обеспечивается функцией QkeyPressEvent. По нажатию я увеличиваю переменную angle += 0.5

Вопрос, какую использовать формулу для нахождения координат точек при изменении угла поворота ??

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
void GLbukva::paintGL() {
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        /*---- Буква Щ ----*/
 
        /* 1 */
        int height(160), width(50);
        int x(50), y(20);
 
        setBlock(x,y,height,width);
 
        /* 2 */
        height= 90; width = 50; x = 125; y = 90;
 
        setBlock(x,y,height,width);
 
        /* 3 */
        height= 160; width = 50; x = 200; y = 20;
 
        setBlock(x,y,height,width);
 
        /* 4 */
        height= 50; width = 250; x = 50; y = 180;
 
        setBlock(x,y,height,width);
 
        /* 5 */
        height= 50; width = 50; x = 250; y = 230;
 
        setBlock(x,y,height,width);
 
}
 
/*Функция построения блока буквы из точек*/
void GLbukva::setBlock(int Xo, int Yo, int height, int width) {
    int p_size(5); //Размер пикселя
    glPointSize(p_size);
    int x(0),y(0);
    GLint color(1);
    y = Yo;
    for (int i=1; i<=height; i+=p_size)
    {
        x = Xo;
        for (int j=1; j<=width; j+=p_size) {
            color = rand() % 4; //Рандом (0;4)
            glBegin(GL_POINTS);
                switch(color) //Цвет точки
                {
                case 0:
                   glColor3f(1,0,0);
                   break;
                case 1:
                   glColor3f(0,1,0);
                   break;
                case 2:
                   glColor3f(0,0,1);
                   break;
                case 3:
                   glColor3f(1,1,0);
                   break;
                }
 
                glVertex2f(x,y);    // Ее координаты (x,y)
            glEnd();
            x+=p_size;
        }
        y+=p_size;
    }
}
 
/*Нажатие клавиши "стрелка вверх"*/
void GLbukva::keyPressEvent(QKeyEvent *event) {
    switch(event->key()) {
    case Qt::Key_Up: {
        m_xRotate+=0.9;
        updateGL();
        qDebug() << "UP !";
        break;
    }
    default:
        break;
    }
}
Добавлено через 5 минут

OpenGL вращение фигур, нарисованных точками

Вот такая буква в итоге получается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 12:27     OpenGL вращение фигур, нарисованных точками
Посмотрите здесь:

C++ Вращение отрезка
C++ Вращение куба
C++ Вращение фигуры
Подкиньте код нарисованных фигур в с++ C++
C++ вращение фигуры
C++ Преобразовать строку, заменив точками все двоеточия, встречающиеся среди первых n/2 символов, и заменив точками все восклицательные знаки...
C++ вращение фигуры
C++ найти максимальное и минимальное значение между точками и вывести их вместе с точками

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru