Я использую Eigen3 2-мерный вектор в виде 2D точки для рисования OpenGL, сохраняя их в списке:указатель на `станд :: list` Эйгена DATAS
typedef Eigen::Vector2d Vec2D;
std::list<Vec2D> points;
Теперь мне нужен массив из GLfloat передать всю структуру данных необработанного поплавка значения координат в графическую карту:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
_vertex = new GLfloat[points.size()*2];
_colors = new GLfloat[points.size()*4];
std::list<Vec2D>::const_iterator it;
int i=0, j=0;
for(it=points.begin(); it!=points.end(); ++it) {
_vertex[i] = it->x()+2;
_vertex[i+1] = it->y()+2;
i+=2;
_colors[j] = getRed(j/4.0f, it);
_colors[j+1] = getGreen(j/4.0f, it);
_colors[j+2] = getBlue(j/4.0f, it);
_colors[j+3] = getAlpha(j/4.0f, it);
j+=4;
}
glColorPointer(4, GL_FLOAT, 0, _colors);
glVertexPointer(2, GL_FLOAT, 0, _vertex);
glDrawArrays(GL_LINE_STRIP, 0, points.size());
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
delete _vertex;
delete _colors;
есть ли более ЭФФЕКТИВНЫЙ способ для создания массивов для передачи графических карт? например, пройти points.begin()
и узнать, что такое смещение и не пропустить все точки?
Я имею в виду, что в памяти координаты x и y Eigen::Vector2d
должны храниться в некотором последовательном пространстве .. так что я думаю, что могу передать его прямо на графическую карту .. но я не могу нестандартный как.
Вам нужен пользовательский буфер gl? –
что жаль? Мне нужно - из opengl документации 'glVertexPointer': __a указатель на первую координату первой вершины в массиве .__ – nkint
Я также изменил название ответа, надеюсь немного более ясно – nkint