android - GLES20.glVertexAttribPointer/glDrawElements中的 "offset"参数是什么,ptr/indices是从哪里来的?

标签 android opengl-es opengl-es-2.0

我正在 Android 中使用 OpenGL ES 2.0,并查看 the docs for GLES20我遇到了以下方法:

public static void glDrawElements(
    int mode, int count, int type, Buffer indices)
public static void glDrawElements(
    int mode, int count, int type, int offset)

public static void glVertexAttribPointer(
    int indx, int size, int type, boolean normalized, int stride, Buffer ptr)
public static void glVertexAttribPointer(
    int indx, int size, int type, boolean normalized, int stride, int offset)

采用Buffer 对象的两种方法对我来说很有意义,但其他两种方法则没有。他们从哪里获得索引/属性值(分别),什么是 offset 偏移量? (我假设这两个问题有相同的答案。)

最佳答案

原型(prototype)中的偏移量意味着您在此调用之前提交了 INDEX 数组。如果您使用的是 VBO(顶点缓冲区对象),则应使用它。使用 glBindBuffer 绑定(bind)索引缓冲区并在需要时指定偏移量下一个电话。

首先,您需要绑定(bind)缓冲区(此处为索引缓冲区),您可以指定元素以“偏移量”开始的位置。

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_resources.element_buffer);
glDrawElements(
    GL_TRIANGLE_STRIP,  /* mode */
    4,                  /* count */
    GL_UNSIGNED_SHORT,  /* type */
    (void*)0            /* element array buffer offset */
);

对于

 public static void glVertexAttribPointer(
int indx, int size, int type, boolean normalized, int stride, int offset)

这意味着您在此调用之前提交顶点缓冲区,并且您可以指定缓冲区中应该使用的位置的偏移量。 请检查以下链接以获得更多帮助。 http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Chapter-2.3:-Rendering.html

如您所料,两者都有相同的原因:)。希望这对您有所帮助!

更新:您需要创建一个缓冲区来绑定(bind)它。这可以通过以下步骤完成。

     glGenBuffers(); // create a buffer object
     glBindBuffer(); // use the buffer
     glBufferData(); // allocate memory in the buffer

检查此链接以创建 VBO。 http://www.opengl.org/wiki/Vertex_Buffer_Object

关于偏移量类型:偏移量作为指针传递,但参数用于其整数值,因此我们将整数转换为 void*。

关于android - GLES20.glVertexAttribPointer/glDrawElements中的 "offset"参数是什么,ptr/indices是从哪里来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708745/

相关文章:

android - 如何在 Android 中创建 3D 图表?

objective-c - 将 openGL ES 纹理读取到原始数组

ios - 为什么这个 OpenGL ES 2.0 着色器不能与我在 iOS 上的 VBO 一起使用?

android - AccessibilityService - performGlobalAction 在自己的应用程序中不起作用

android - 长按android中textview中的选定文本

android - 我如何将@string 放入setHint

android - OpenGL ES 2.0 中的纹理图集

opengl-es - WebGL 是如何工作的?

android - glReadPixels 失败,格式为 GL_ALPHA

android - 可以为着色器统一设置初始值吗? (安卓,OpenGL ES 2.0)