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

Как передать в процедуру рисования Draw коэффициенты прямой, вычисляемые в другой процедуре?

10.01.2014, 21:50. Просмотров 551. Ответов 5
Метки нет (Все метки)

Пишу программу, используя OPENGL.Проблема следующая, как мне передать в процедуру рисования Draw коэффициенты прямой,вычисляемые в другой процедуре, что только не пробовал.Если вызвать эту процедуру в Draw, то Draw почему-то выполняется 2 раза с интервалом в 10 секунд, то что нужно рисуется, но в итоге окно opengl не отвечает...в чем проблема?почему когда я вызываю процедуру в Draw, в программе Draw вдруг начинает выполняться 2 раза, хоть и рисует все верно...
А передать коэффициенты прямой как параметры в draw не получается, он по умолчанию пустой должна быть, когда делаем вызов glutDisplayFunc(Draw).Помогите разобраться..

Добавлено через 8 минут
Блин, вот это я ступил, draw же вызывается при любом действии на окне opengl, даже просто от щелчка мыши..вот и выполняется несколько раз...но вопрос все равно остается открытым..как правильно передать коэф-ты прямой в draw?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 21:50
Ответы с готовыми решениями:

Можно ли отрисовывать массив, передав его, как параметр в функцию draw, в glutDisplayFunc(draw);?
В рамках курсовой работы у меня появилось задание написать игру "Жизнь" с...

OpenGL. Передать в процедуру рисования Draw коэффициенты прямой, вычисляемые в другой процедуре
Пишу программу, используя OPENGL.Проблема следующая, как мне передать в...

Как передать процедуре событие и ссылку на процедуру?
Как передать процедуре событие и ссылку на процедуру для реализации примерно...

как вызвать процедуру в другой процедуре
имеется процедура: Private Sub txtStepen_TextChanged(sender As Object, e As...

Как вызвать процедуру с параметрами в другой процедуре?
Доброго времени суток. Помогите пожалуйста вызвать процедуру с параметрами в...

5
pHOMM
479 / 252 / 51
Регистрация: 30.06.2010
Сообщений: 651
11.01.2014, 13:12 2
Зависит от того , как Вы организуете всю прочую работу.
Можно описать функцию void Render() внутри которой уже будут вызовы нужные.
В целом у Вас может быть один из 2 распространённых подходов - процедурный и объектный (есть ещё функциональный, но я в нём практически несведущ, не буду тут упоминать).
Процедурный можно описать так - у Вас есть структура для линии, которая содержит данные.
struct Line {поля структуры с нужными данными} + функции по работе с линией, принимающие аргумент - структуру (также могут быть и функции - члены структуры, как у объектного метода, тогда аргументы не нужны), а объектный это будет class Line{} и методы работы с объектом данного класса.
Объектный подход или с функциями-членами структуры
C++
1
2
3
4
5
Line line = new Line(); // где-то при инициализации
void Render() {
line.Calc();
line.Draw();
}
или чисто процедурный подход, где всё - отдельные процедуры.
C++
1
2
3
4
5
Line line = new Line(); // где-то при инициализации
void Render() {
CalcLine(line);
DrawLine(line);
}
Тогда можно сделать так glutDisplayFunc(Render);
Тут Calc или CalcLine - как раз Ваша функция расчёта параметров линии.
Код практически идентичен и для C# и для паскаль диалектов тоже мало отличий - только синтаксически.
0
matthew123
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 22
11.01.2014, 13:42  [ТС] 3
Спасибо за ответ, я решил просто записать коэф-ты прямой в файл, а в процедуре draw уже считывать их и строить линию по 2 точкам, так вроде все работает)правда теперь проблема с масштабом возникла, как мне приблизить мой график не в центре, а в конкретном месте?
Вот инициализация и процедура glScalef приближает график..но только в центре, я же хочу чтоб приблизился кусок там, где будет моя прямая (она находится на определенном отрезке, а не на всем графике, так как это линия тренда)
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glScalef(25,25,0);
glOrtho(-250.0, 250.0, -250.0, 250.0, -5.0, 5.0);

}
0
pHOMM
479 / 252 / 51
Регистрация: 30.06.2010
Сообщений: 651
11.01.2014, 23:17 4
glTranslatef - поиграться с ней, совокупно с glScalef (можно сперва транслейт - перемещение, потом скейл - масштабирование, а можно и наоборот, но эффект разный будет), просто пробуйте подходящие Вам коэффициенты.
Не забывайте оформлять код - кнопочки с языком нажимайте, или просто кнопочку # - это всё при создании/правке сообщений.
1
matthew123
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 22
12.01.2014, 00:30  [ТС] 5
Спасибо, чуть позже этим займусь.А можно еще вопрос, как по заданным точкам нарисовать кривую?
0
pHOMM
479 / 252 / 51
Регистрация: 30.06.2010
Сообщений: 651
12.01.2014, 11:31 6
Кривые рисуются итеративно, т.е. вычисляете каждую точку в цикле с нужным шагом и потом ставите точку в нужных координатах.
Есть ещё кривые Безье, вон скооперируйтесь с товарищем из Поверхности Безье
0
12.01.2014, 11:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2014, 11:31

Как передать значения массива в подпрограммму процедуру и вывести элементы в процедуре
никак не получается Добавлено через 32 минуты чё никто не знает?

Как передать var переменную другой процедуре
В одной из процедур класса вот такая переменная: var shipping = ...

Переписать коэффициенты прямых, параллельных первой прямой (коэффициенты заданы в типизированном файле)
Прямая на плоскости задается уравнением Ax+by+c=0, где A и В одновременно не...


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

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

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