Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Shurick7
0 / 0 / 0
Регистрация: 18.11.2018
Сообщений: 3
1

Сделать задержку при рисовании

22.03.2019, 13:39. Просмотров 922. Ответов 3

При выполнении лабораторной работы необходимо ввести программную задержку. Попробовал использовать glfwWaitEventsTimeout(1000), но не получил необходимого результата. Просто буфер загружается немного дольше и видно белое окно. Вот мой код генерации окружности по Мичнеру. Помогите сделать так чтобы после отрисовки восьми точек была задержка в 1 секунду.

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
void drawMhCircle(float radius)
{
    float x = 0;
    float y = radius;
    float e = 0.3 - 2 * radius;
    glPointSize(8);
    glBegin(GL_POINTS);
    glColor3f(0.2, 0.2, 1);
    while (x < y)
    {
        glVertex2f(x, y);
        glVertex2f(y, x);
        glVertex2f(-x, y);
        glVertex2f(-y, x);
        glVertex2f(x, -y);
        glVertex2f(y, -x);
        glVertex2f(-x, -y);
        glVertex2f(-y, -x);
        if (e < 0) {
            e += 4 * x + 0.2;
        }
        else
        {
            e += 4 * (x - y) + 0.5;
            y -= 0.025;
        }
        x += 0.025;
        glfwWaitEventsTimeout(1000);
    }
    glEnd();
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2019, 13:39
Ответы с готовыми решениями:

Ошибка при рисовании сферы
Помогите, пожалуйста! Только начинаю разбирать с OpenGL и решила разобрать пример программы...

Как сделать задержку при загрузке на 15 сек?
После загрузки банера должно пройти 15 сек, и потом только должен запустится Movic clip с...

Как сделать задержку окна при запуске программы ?
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Как сделать, чтобы вместо цвета при рисовании в TImage ставилась фоновая картинка
Здравствуйте. Я начинающий программист, столкнулся с такой проблемой. я Рисую в Imaage рисунок ...

Рассчитать задержку распространения сигнала и задержку передачи данных
Здравствуйте. Рассчитайте задержку распространения сигнала и задержку передачи данных для...

3
COKPOWEHEU
1331 / 962 / 221
Регистрация: 09.09.2017
Сообщений: 3,970
22.03.2019, 15:43 2
Возможно, такой жуткий костыль сработает
C
1
2
3
4
glEnd();
glfwSwapBuffers(); //не знаю точно как оно в glfw называется
glfwWaitEventsTimeout(1000);
glBegin(...)
0
Shurick7
0 / 0 / 0
Регистрация: 18.11.2018
Сообщений: 3
22.03.2019, 18:14  [ТС] 3
Попробовал, часть окружности отрисовывается сразу, часть при движении курсора и когда окружность полностью формируется точки начинают мерцать. Но это уже огромный прогресс.
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
void drawMhCircle(GLFWwindow* window, float radius)
{
    float x = 0;
    float y = radius;
    float e = 0.3 - 2 * radius;
    glPointSize(8);
    glBegin(GL_POINTS);
    glColor3f(0.2, 0.2, 1);
    while (x < y)
    {
        glVertex2f(x, y);
        glVertex2f(y, x);
        glVertex2f(-x, y);
        glVertex2f(-y, x);
        glVertex2f(x, -y);
        glVertex2f(y, -x);
        glVertex2f(-x, -y);
        glVertex2f(-y, -x);
        glEnd();
        if (e < 0) {
            e += 4 * x + 0.2;
        }
        else
        {
            e += 4 * (x - y) + 0.5;
            y -= 0.025;
        }
        x += 0.025;
        glfwSwapBuffers(window);
        glfwWaitEventsTimeout(1000);
        glPointSize(8);
        glBegin(GL_POINTS);
        glColor3f(0.2, 0.2, 1);
    }
    glEnd();
}
0
8Observer8
2709 / 1668 / 293
Регистрация: 05.10.2013
Сообщений: 5,141
Записей в блоге: 89
22.03.2019, 22:16 4
Лучший ответ Сообщение было отмечено 8Observer8 как решение

Решение

C++
1
2
3
4
5
glEnd();
if (glfwGetTime() > 1.0f)
{
    glBegin(...);
}
Documentation: double glfwGetTime ( void )

Visual Studio S2015 Project: Delay_GlfwOpenGL11Cpp.zip

Название: Delay_GlfwOpenGL11Cpp.gif
Просмотров: 14

Размер: 146.4 Кб

main.cpp

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
#include <GLFW/glfw3.h>
#include <iostream>;
 
void draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
 
    // Red Square
    glBegin(GL_QUADS);
    {
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(-0.9f, 0.9f);
        glVertex2f(-0.9f, 0.1f);
        glVertex2f(-0.1f, 0.1f);
        glVertex2f(-0.1f, 0.9f);
    }
    glEnd();
 
    if (glfwGetTime() > 1.0f)
    {
        // Green Square
        glBegin(GL_QUADS);
        {
            glColor3f(0.0f, 1.0f, 0.0f);
            glVertex2f(0.1f, -0.1f);
            glVertex2f(0.1f, -0.9f);
            glVertex2f(0.9f, -0.9f);
            glVertex2f(0.9f, -0.1f);
        }
        glEnd();
    }
}
 
int main()
{
    glfwInit();
    GLFWwindow* window = glfwCreateWindow(256, 256, "Delay", 0, 0);
    glfwShowWindow(window);
    glfwMakeContextCurrent(window);
 
    while (!glfwWindowShouldClose(window))
    {
        glfwPollEvents();
 
        draw();
 
        glfwSwapBuffers(window);
    }
 
    glfwTerminate();
    return 0;
}
0
22.03.2019, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2019, 22:16

Как сделать задержку C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; double...

сделать задержку в циклі
Как сделать задержку в циклі??

Как сделать задержку 1 ms ?
Частота cpu= 41 780 000 Hz. В сети нашел следующий код: long volatile a=def_msec*ms;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru