Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > как передать переменную с++ в glфункцию?


Автор: wolver17 15.5.2011, 18:14
Здраствуйте, возник вопрос такого плана:
есть одномерный массив n-элементов, описанный в main функции, например:
Код
int main(int argc, char **argv)
{
float x[n]={1,2,3,4,5};
...


далее, я делаю кучу различный расчётов в ф-циях, и в конце мне надо отобразить визуально значения элементов массива, построивши график.
вызов ф-ции
glutDisplayFunc(Display);
вызывает ф-цию 
void Display(void)
а вот сами значения массива x не передаёт же. Как сделать чтобы в Display я мог увидеть массив?
(например что-то вроде этого:
Код
...
glBegin(GL_LINE_STRIP);    
        glColor3f(1.0f,0.0f, 0.0f);        
        for(int i=0;i<n;i++)
        glVertex2f(x[i], y[i]);        
glEnd();
...
)

Модератор: пользуйтесь тэгом "код"

Автор: volatile 15.5.2011, 20:07
float x[n]={1,2,3,4,5};
вероятно объявить глобальной ? ну или во всяком случае видимой как из main();, так и из Display();
Насколько помню, по-другому там не сделаешь. Хотя с OpenGL давно не работал, так что возможно ошибаюсь.

Добавлено через 51 секунду
Увы, OpenGL далека от таких идей С++ как инкапсуляции и проч.

Автор: wolver17 15.5.2011, 21:09
ну у мя было 2 идеи: 
1) как ты, volatile, сказал, глобальными объявить, но а если у мя динамич. массив будет, его что тож глобальным делать?
и 2) загнать все другие не opengl ф-ции в display, и объявить массив там, только это както кверху попой всё наверно получится....

я думал, что может я чегото недопонимаю в связке с++ и opengl? и просто чтото не так описываю?

Автор: Vetos 15.5.2011, 21:16
Ты можешь глобально объявить указатель, и в функции main присвоить указателю ссылку на массив. Если же массив у тебя динамический то естественно можно сделать его глобальным, я чет непонимаю чего тут такого страшногоsmile
Кстати загонять все функции в Display не самый лучший вариант с точки зрения производительности, ведь эта функция вызывается каждый кадр.

Автор: wolver17 15.5.2011, 21:59
да, ничё страшного   smile , просто пока отписываться тут на форуме, перерыл в гугле кучу хлама, так ничё и не найдя, зато  про глобальный дин. массив писали, что это не очень красиво так делать, что луче по другому делать.
ладно. завтра переделавши прогу, поспрашиваю тут ещё, если возникнут вопросы))
всем спс за варианты решения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)