преобразовать буфер вершин в массив вершин

Я работаю над программой OpenGL, и я должен вычислить ограничивающую рамку. Я сделал код для этого, но не могу получить координаты вершин из буфера вершин. Кто-нибудь может объяснить мне простой способ получить данные из буфера вершин? Я использую Java для Android и OpenGL es


person Francesco    schedule 16.10.2014    source источник
comment
Загрузка данных вершин с графического процессора в каждом кадре, вероятно, будет медленной. Попробуйте сохранить локальную копию информации о вершинах.   -  person Colonel Thirty Two    schedule 16.10.2014


Ответы (2)


Если вы используете OpenGL ES 3.0 или более позднюю версию, вы можете использовать glMapBufferRange() для прямого доступа к данным буфера. См. справочную страницу для получения подробной информации о функциональных возможностях и документация по GLES30 для получения подробной информации о привязках Java в Android.

Я не думаю, что есть разумный способ сделать это в ES 2.0. Я мог бы придумать совершенно ужасные способы, но мне было бы неловко направлять вас в этом направлении. Хорошо, для полноты, но, пожалуйста, не делайте этого: вы можете отрендерить что-то, что в конечном итоге оставит данные вершины в цели рендеринга, и прочитать их обратно с помощью glReadPixels().

Если вам нужен частый доступ к данным вершин в вашем собственном коде, он, скорее всего, будет работать лучше, если вы сохраните его копию. У вас уже были данные, когда вы позвонили glBufferData(). Если вы в настоящее время выбрасываете его после вызова glBufferData(), просто сохраните его и используйте, когда вам понадобится доступ к данным вершин.

person Reto Koradi    schedule 16.10.2014
comment
Мне нужно вычислить ограничивающую рамку, и я попытался прочитать буфер вершин подмножества, и я получаю ошибку доступности. Итак, я хочу попробовать с массивом вершин, но он находится в части кода, которая не принадлежит мне, поэтому я не могу так легко поместить туда свой код. - person Francesco; 17.10.2014
comment
Я бы попробовал с gbufferdata() - person Francesco; 17.10.2014

я нашел как это сделать

    mFb= (FloatBuffer)    vb.getData(UlVertexBuffer.VERTEX_FIELD_POSITION).position(0);
    getmFloatArray(mFb);
    mSb= (ShortBuffer) ib.getData();
    getmShortArray(mSb);
person Francesco    schedule 22.01.2015