Вывод координат точек с динамического массива в OpenGL
Возникла проблема с репрезентацией значений динамических массивов определенных и полученных в классе App (посредством вызова функций - этот аспект проверен) в графическом режиме в рамках OpenGL. В сети натолкнулся на подобную проблему (прикладываю код со своим комментарием чуть ниже). Однако, решение затрагивает вопрос статически определенных массивов и приведение их к типу GLFloat не получает необходимого отклика у меня в плане написания нужных строк. Да и честно говоря - я не понимаю, почему этот шаг нужен. И нужен ли (ранее работал с точками и иными моментами - glut.h совершенно не ругался на float? Прикладываю cвой простой вариант цикл прохождения по массивам (А и B в классе App - это - x и y в функции), он описан в: void Display(int *x, int *y, int n) в первом сегменте кода.
#include <glut.h>
using namespace std;
void Display(int *x, int *y, int n);
class App
{
public:
void run(int argc, char **argv)
{
setlocale(0, "");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(1000, 1000); //Указываем размер окна
glColor3f(1, 1, 1);
glutInitWindowPosition(100, 100); //Позиция окна
glutCreateWindow("ТЕST"); //Имя окна
cout << "Количество точек в двухмерном (прямоугольном) декартовом пространстве(x;y):";
cin >> n;
A = new int[n]; // Икс-координаты точек
RandomFill(A, n); // генерация данных в файле
input_geometryX(A, n);
B = new int[n]; //y-координаты точек
RandomFill(B, n); // генерация данных в файл
input_geometryY(B, n);
alldist(A, B, n); //большая функция обработки и нахождения расстояний между точками
glutDisplayFunc(Draw);
glutMainLoop();
delete[] A;
delete[] B;
}
private:
static void Draw()
{
Display(A, B, n);
}
static int* A;
static int* B;
static int n;
};
int* App:: A = NULL;
int* App:: B = NULL;
int App:: n = 0;
int main(int argc, char **argv)
{ //setlocale (LC_ALL,"Russian");
setlocale (0, "");
// .....
void Display(int *x, int *y, int n)
{
glBegin( GL_POINTS );
glColor3d(1,0,0);
glPointSize(8);
for ( int i = 0; i < n; ++i )
{
glVertex2f( x[i], y[i] );
}
glEnd();
glFlush(); //перенос всего нарисованного в экран
}
Возможное решение проблемы (однако пример со статическим определением массива):
GLint NumberOfPoints = 10; // в нашем случае можно n
GLfloat x[10],y[10]; // как тогда переопределить массивы динамические
for(int i = 0; i < NumberOfPoints; i++){
x[i] = y[i] = (GLfloat) i;
}
glBegin( GL_POINTS );
for ( int i = 0; i < NumberOfPoints; ++i )
{
glVertex2f( x[i], y[i] );
}
glEnd();