Как использовать 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);