Отрисовка множества точек и передаваемые аргументы в функции OpenGL

Поставлена задача: реализовать графическую демонстрацию множества точек. Для этих целей я взял OPENGl (glut.h). (то, что мне хоть отчасти известно). Проблема возникла в том, что на функцию отрисовки glutDisplayFunc(Draw()) (располагаемую в идеале в другом, подключаемом через заголовки, файле .cpp, невозможно никак передать необходимые параметры: при желании добавить аргументы в объявлении функции - все сыпется. Отказывает уже glutDisplayFunc. Что справедливо (ведь так написано в ее спецификациях). Но как тогда мне передать три параметра, генерируемых в главной функции: A (массив из X-координатных значений точек),B (аналогично, только по Y) ,n (количество точек) - которые, собственно позволят написать цикл отрисовки GL_POINTS.

main.cpp:

#include <glut.h> 
// а также другие библиотеки: conio/iostream
int main(int argc, char **argv) {   
       setlocale (0, "");
       glutInit(&argc,argv);
       glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
       glutInitWindowSize(1000,1000);       //Указываем размер окна
       glColor3f(0, 0, 0);
       glutInitWindowPosition(100,100); //Позиция окна
       glutCreateWindow("ТЕST");        //Имя окна

       //--------Код, реализующий ряд функций по обработке различных массивов
       //...

        int n;
        cout<<"Количество точек в двухмерном (прямоугольном) декартовом пространстве(x;y):";
        cin>>n;

        int* A=new int[n]; // Икс-координаты точек
        RandomFill(A,n); // генерация данных в файле
        input_geometryX(A,n); 

        int* B=new int[n]; //y-координаты точек
        RandomFill(B,n);    // генерация данных в файл      
        input_geometryY(B,n);    

        alldist(A,B,n);  //большая функция обработки и нахождения расстояний между точками

        glutDisplayFunc(Display());             //Вызов функции отрисовки Display()

        glutMainLoop();

        delete[] A;
        delete[] B;
}

void Draw() {
    glColor3f(1, 1, 1);
    float x = 0.25;
    float y = x * sqrt(3.0);
    for(int i = 0; i < 3; i++) {
        glRotatef(120, 0, 0, 1);   //поворот на 120 градусов
        glBegin(GL_TRIANGLE_FAN);  //рисуем ромб, который формируется
        //по вершинам как прав.треугольник
        glVertex2f(0, 0);
        glVertex2f(x, y);
        glVertex2f(0, 2 * y);
        glVertex2f(-x, y);
        glEnd();
        glFlush();
    }
    glutSwapBuffers();
}

Ответы (1 шт):

Автор решения: Arenoros

Для начала ошибка в вызове glutDisplayFunc. У неё следующая сигнатура

void glutDisplayFunc(void (*func)(void));

То есть ты должен передать указатель на функцию, а не вызвать её

glutDisplayFunc(Draw);
                   ^^^
→ Ссылка