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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Реализация алгоритма приведения кривой к каноническому виду http://www.cyberforum.ru/cpp-beginners/thread1163916.html
Помогите, прошу. Нужно написать програму для приведение кривой к каноническому виду. Алгоритм вроде нашел, но вот записать в код не могу. Помогите
C++ Как проинициализировать весь массив объектов? // lab7.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <string.h> #include <stdlib.h> #include <iostream> #include <locale.h> #define N 2 http://www.cyberforum.ru/cpp-beginners/thread1163914.html
C++ Вычисление определенного интеграла методом центральных прямоугольников
Создал программу для вычисления определенного интеграла методом центральных прямоугольников, при компиляции ошибок нет, но при запуске выдаёт: "Run-Time Check Failure #3 - The variable 'x' is being used without being initialized." Прошу помочь найти ошибку. (Буду так же благодарен за прочие замечания.) Исходник: #include"stdafx.h" #include<stdio.h> #include<conio.h> #include<stdlib.h>...
C++ Разные способы подключения файла, или как еще можно передать функции двумерный массив?
Программа считает сумму положительных элементов каждого столбца и сумму отрицательных элементов каждой строки. Все работает как нужно, но мне не нравится как подключен файл. Есть ли другой способ его подключения? И как еще можно передать функции двумерный массив? #include <iostream> using std::cout; using std::endl; #include <ctime> #include <fstream> using std::ofstream; const int...
C++ Сортировка двумерного массива http://www.cyberforum.ru/cpp-beginners/thread1163897.html
Всем привет, покажите простые коды сортировки двумерных массивов (матриц) а) Элементы побочной диагонали отсортировать методом простого обмена б) Элементы главной диагонали отсортировать методом простой выборки в) Элементы первой строки отсортировать методом простой вставки
C++ Распарсить нелинейное уравнение и найти все его корни На вход задается нелинейное уравнение, содержащие операции +, -, *, /, ^. Необходимо найти все его корни (те, при которых уравнение будет = 0) или сказать, что решений не существует. подробнее

Показать сообщение отдельно
Neon_Burg
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 4
02.05.2014, 12:27     OpenGL вращение фигур, нарисованных точками
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 вращение фигур, нарисованных точками

Вот такая буква в итоге получается.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru