Как использовать glVertexPointer для различных пользовательских данных OpenGL

Проблема заключается в следующем, создаю пользовательский тип данных хранящий точки объекта в структуре (представляю их как 2-ный массив) и передаю в функцию следующим образом.

double a = 0.5;
    struct {
        double e[3];
    } ver_cub[24] = {
            {-a, -a, a},  {a, -a, a},  {a, a, a},  {-a, a, a},
            {a, -a, -a},  {-a, -a, -a},  {-a, a, -a}, {a, a, -a},
            {-a, -a, -a},  {-a, -a, a},  {-a, a, a},  {-a, a, -a},
            {a, -a, a},  {a, -a, -a},  {a, a, -a},  {a, a, a},
            {-a, -a, a},  {a, -a, a},  {a, -a, -a},  {-a, -a, -a},
            {-a, a, a},  {a, a, a},  {a, a, -a},  {-a, a, -a}
        };

glVertexPointer(3, GL_DOUBLE, 0, &arr);

Всё отображается и меня устраивает, но что если моё хранение данных выглядит иначе, к примеру внешние библиотеки которые парсят модели из obj файлов представлены иначе. И реализациия их в примерах проходит с задействием 3 параметра функции glVertexPointer и выглядят они следующим образом.

class objLoader {
 public:
  objLoader() {}
  ~objLoader() { delete_obj_data(&data); }

  int load(char *filename);

  obj_vector **vertexList;
  obj_vector **normalList;
  obj_vector **textureList;

  obj_face **faceList;
  obj_sphere **sphereList;
  obj_plane **planeList;

  obj_light_point **lightPointList;
  obj_light_quad **lightQuadList;
  obj_light_disc **lightDiscList;

  obj_material **materialList;

  int vertexCount;
  int normalCount;
  int textureCount;

  int faceCount;
  int sphereCount;
  int planeCount;

  int lightPointCount;
  int lightQuadCount;
  int lightDiscCount;

  int materialCount;

  obj_camera *camera;

 private:
  obj_scene_data data;
};

На данный момент из этой струкруры мне необходимы только вершины

typedef struct obj_vector {
  double e[3];
} obj_vector;

Каким образом мне передать данные этого массива в glVertexPointer , чтобы тот обрабатывал данные с моего obj файла.

v -0.5 -0.5 0.5
v 0.5 -0.5 0.5
v 0.5 0.5 0.5
v -0.5 0.5 0.5
v 0.5 -0.5 -0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 -0.5
v 0.5 0.5 -0.5
v -0.5 -0.5 -0.5
v -0.5 -0.5 0.5
v -0.5 0.5 0.5
v -0.5 0.5 -0.5
v 0.5 -0.5 0.5
v 0.5 -0.5 -0.5
v 0.5 0.5 -0.5
v 0.5 0.5 0.5
v -0.5 -0.5 0.5
v 0.5 -0.5 0.5
v 0.5 -0.5 -0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 0.5
v 0.5 0.5 0.5
v 0.5 0.5 -0.5
v -0.5 0.5 -0.5

Мне необходимо конструкция подобна следующией записи

glVertexPointer(3, GL_DOUBLE, sizeof(obj_vector), &(objData->vertexList[0]->e));

как ёто описывается на внешних ресурсах.

Хочется использовать внешние библиотеки, а не

double arr[24][3];

for (int i = 0; i < 24; ++i) {
    for (int j = 0; j < 3; ++j) {
        arr[i][j] = objData->vertexList[i]->e[j];
    }
}

glVertexPointer(3, GL_DOUBLE, 0, &arr);

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