Я работаю над программой OpenGL, и я должен вычислить ограничивающую рамку. Я сделал код для этого, но не могу получить координаты вершин из буфера вершин. Кто-нибудь может объяснить мне простой способ получить данные из буфера вершин? Я использую Java для Android и OpenGL es
преобразовать буфер вершин в массив вершин
Ответы (2)
Если вы используете OpenGL ES 3.0 или более позднюю версию, вы можете использовать glMapBufferRange()
для прямого доступа к данным буфера. См. справочную страницу для получения подробной информации о функциональных возможностях и документация по GLES30 для получения подробной информации о привязках Java в Android.
Я не думаю, что есть разумный способ сделать это в ES 2.0. Я мог бы придумать совершенно ужасные способы, но мне было бы неловко направлять вас в этом направлении. Хорошо, для полноты, но, пожалуйста, не делайте этого: вы можете отрендерить что-то, что в конечном итоге оставит данные вершины в цели рендеринга, и прочитать их обратно с помощью glReadPixels()
.
Если вам нужен частый доступ к данным вершин в вашем собственном коде, он, скорее всего, будет работать лучше, если вы сохраните его копию. У вас уже были данные, когда вы позвонили glBufferData()
. Если вы в настоящее время выбрасываете его после вызова glBufferData()
, просто сохраните его и используйте, когда вам понадобится доступ к данным вершин.
я нашел как это сделать
mFb= (FloatBuffer) vb.getData(UlVertexBuffer.VERTEX_FIELD_POSITION).position(0);
getmFloatArray(mFb);
mSb= (ShortBuffer) ib.getData();
getmShortArray(mSb);