Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 15.11.2012
Сообщений: 27

Повторный вызов функции для рисования

16.02.2013, 00:05. Показов 1890. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Помогите, пожалуйста, определиться с реализацией программы.
Итак, мне нужно построить n-прямых с помощью определенной функции. Сама функция получает на вход координаты начальной точки.
Т.е вот пример функции:
C++
1
2
3
4
5
6
7
8
9
void line(int d, int f)
{
  glBegin(GL_LINES);
  glColor3f(1.0, 0.0, 0.0);
  glVertex2f(d, f);
  glVertex2f(d + rand(), f + rand());
  glEnd();
  glFlush();
}
Проблема в том, что при первом вызове функции все срабатывает, но вот уже при последующих почему-то ничего не рисуется(т.е на "картинке" остается только самая первая прямая)

Вот пример:
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
#include <GL/glut.h>
#include <cmath>
 
int a = 0;
float b = 0;
void line(int d, int f)
{
  glBegin(GL_LINES);
  glColor3f(1.0, 0.0, 0.0);
  glVertex2f(d, d);
  glVertex2f(f, f);
  glEnd();
  glFlush();
}
void display()
{
  glClear(GL_COLOR_BUFFER_BIT);
  glutSwapBuffers();
  line(15,35);
  line(25,35);
}
int main(int argc, char **argv)
{
 glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(240, 240);
  glutInitWindowPosition(100, 740);
  glutCreateWindow("Test");
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0, 100, 0, 100, 0, 100);
  glutDisplayFunc(display);
  glutMainLoop();
}

Повторный вызов функции line идет в функции display(19 и 20 строчка). Естественно, таких вызовов должно быть n-штук, но для примера я взял только 2.

Вопрос: Как нужно выстроить программу, чтобы функция line срабатывала повторно, т.е отображала все n-прямых, а не только первую.

Итак, почему я решил реализовывать именно так? Дело в том, что все это мне нужно реализовать на Cuda. Причем за каждый вызов функции line будет отвечать отдельный поток. Сама функция будет гораздо сложнее. Просто решил начать с простого примера.

Ребят, если что-то непонятно, то, пожалуйста, пишите в топике. И, пожалуйста, не нужно троллинга. Я знаю, что в глазах профессионалов это выглядит белибердой, но все с чего-то начинали.

Спасибо за внимание!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2013, 00:05
Ответы с готовыми решениями:

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

Функции, повторный вызов
Здравствуйте! Можете помочь? Например есть функция любая например: void showMsg{cout&lt;&lt;&quot;Foo&quot;;}и мне надо вызвать ее N раз,...

повторный вызов функции
Привет. Не получается вызвать функцию повторно, чтобы при каждом нажантии выводился массив globalArray по порядку с использованием метода...

4
Ах ты! All we Astronautы
 Аватар для Ух ты!
121 / 98 / 1
Регистрация: 20.10.2012
Сообщений: 373
Записей в блоге: 2
16.02.2013, 08:42
C++
1
2
3
4
5
6
7
8
9
10
11
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 
//очистка предыдущей мазни
  glClear(GL_COLOR_BUFFER_BIT);
 
// прорисовка новой
  line(15,35);
  line(25,35);
 
// вывод ее на экран
  glutSwapBuffers();
1
0 / 0 / 1
Регистрация: 15.11.2012
Сообщений: 27
16.02.2013, 10:44  [ТС]
Вы имели в виду так?

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
#include <GL/glut.h>
#include <cmath>
 
int a = 0;
float b = 0;
void line(int d, int f)
{
  glBegin(GL_LINES);
  glColor3f(1.0, 0.0, 0.0);
  glVertex2f(d, d);
  glVertex2f(f, f);
  glEnd();
  glFlush();
}
void display()
{
  glClear(GL_COLOR_BUFFER_BIT);
  line(15,35);
  line(25,35);
  glutSwapBuffers();
}
int main(int argc, char **argv)
{
 glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(240, 240);
  glutInitWindowPosition(100, 740);
  glutCreateWindow("Test");
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0, 100, 0, 100, 0, 100);
  glutDisplayFunc(display);
  glutMainLoop();
}

К сожалению, результат тот же, что и выше =(
0
Ах ты! All we Astronautы
 Аватар для Ух ты!
121 / 98 / 1
Регистрация: 20.10.2012
Сообщений: 373
Записей в блоге: 2
16.02.2013, 14:54
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
#include <GL/freeglut.h>
#include <cmath>
 
#pragma comment(lib, "freeglut.lib")
 
int a = 0;
float b = 0;
 
void line(float d, float f)
{
    glBegin(GL_LINES);
    glVertex2f(d, d);
    glVertex2f(f, f);
    glEnd();
    //glFlush();
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);
    line(15,35);
    
    glColor3f(0.0, 1.0, 0.0);
    line(25, 35);
    
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(400, 300);
    //glutInitWindowPosition(100, 740);
    glutCreateWindow("Test");
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 100, 100, 0, 0, 100);
 
    glutDisplayFunc(display);
    glutMainLoop();
}
1
8 / 6 / 2
Регистрация: 12.12.2017
Сообщений: 46
13.12.2017, 19:52
За ранее прошу прощения за некропостинг, у меня почти аналогичный вопрос только
Можно ли вызывать glBegin и glEnd два раза в функции отрисовки. Или же нужно создавать отделенную функцию
Т.е. нужно нарисовать GL_LINES, затем поверх GL_QUADS
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2017, 19:52
Помогаю со студенческими работами здесь

Повторный вызов функции с методом
Задача: подсчитать часы, минуты, секунды в сутках. Подскажите, пожалуйста, как сделать так: Хочу сделать так, чтобы при загрузке...

Повторный вызов деструктора для объекта
Здравствуйте! К сожалению, я пока не умею пользоваться отладчиком для анализа работы программ, поэтому в очередной раз обращаюсь к вам...

Повторный вызов GET
Добрый день! Написал простой парсинг курса валют с сайта cbr.ru первый раз гет запрос вида:...

Повторный вызов конструктора?!
Мой небольшой класс class CString { private: char* str; int len; int real_size; public: CString() : len(0),...

Повторный вызов GetWindowText
Len = GetWindowText(hEdt1, strEdt1, 5); memcpy(charFromEdt1, strEdt1, 5); //Len =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru