首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

在GLES20.glVertexAttribPointer/glDrawElements中,"offset"参数是一个整数值,表示顶点属性数据在缓冲区中的偏移量。这个偏移量用于确定顶点属性数据在缓冲区中的起始位置。

关于"ptr"和"indices",它们分别表示顶点属性数据和索引数据的指针。在glVertexAttribPointer函数中,"ptr"是一个指向顶点属性数据的指针,它通常是一个整数值,表示顶点属性数据在缓冲区中的偏移量。在glDrawElements函数中,"indices"是一个指向索引数据的指针,它通常是一个整数值,表示索引数据在缓冲区中的偏移量。

这些参数通常来自于顶点数据和索引数据的缓冲区,这些缓冲区可以通过glGenBuffers函数生成,并通过glBindBuffer和glBufferData函数进行绑定和数据填充。

以下是一个简单的示例代码,展示了如何使用glVertexAttribPointer和glDrawElements函数:

代码语言:java
复制
// 生成顶点缓冲区和索引缓冲区
int[] buffers = new int[2];
GLES20.glGenBuffers(2, buffers, 0);

// 绑定顶点缓冲区并填充顶点数据
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buffers[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexData.capacity() * 4, vertexData, GLES20.GL_STATIC_DRAW);

// 绑定索引缓冲区并填充索引数据
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, buffers[1]);
GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexData.capacity() * 2, indexData, GLES20.GL_STATIC_DRAW);

// 启用顶点属性数组
GLES20.glEnableVertexAttribArray(positionHandle);

// 指定顶点属性数据
GLES20.glVertexAttribPointer(positionHandle, 3, GLES20.GL_FLOAT, false, 12, 0);

// 绘制图形
GLES20.glDrawElements(GLES20.GL_TRIANGLES, indexData.capacity(), GLES20.GL_UNSIGNED_SHORT, 0);

在这个示例中,vertexData是一个包含顶点数据的FloatBuffer对象,indexData是一个包含索引数据的ShortBuffer对象。positionHandle是一个整数值,表示顶点属性位置。在glVertexAttribPointer函数中,我们指定了顶点属性数据的大小、类型、步长和偏移量。在glDrawElements函数中,我们指定了索引数据的类型、数量和偏移量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • OpenGLES-04 绘制带颜色的立方体

    , 0.7, 1.0); } 如果我们想在外面的代码中动态修改它的颜色,我们需要定义一个变量来接收传入的颜色。...); 参数 index :为顶点数据(如顶点,颜色,法线,纹理或点精灵大小)在着色器程序中的槽位; 参数 size :指定每一种数据的组成大小,比如顶点由 x, y, z 3个组成部分,纹理由 u,...; ptr :值得注意,这个参数是个多面手。...这里它指向 CPU 内存中的顶点数据数组; 代码中我们给stride填值,以前都是写的0,现在是写出了具体步长,写0是针对单一数据,如只有顶点数据或颜色数据的时候,系统会自己计算匹配,这时候可以写0,若不是单一数据...再看后面ptr的填值,对颜色数据,我们给出的是vertices+3,表示颜色数据从vertices的第4位开始,往后4位是颜色数据(size为4)。 代码的运行结果如下: ?

    1.6K90

    OpenGLES-04 绘制带颜色的立方体

    , 0.7, 1.0); } 如果我们想在外面的代码中动态修改它的颜色,我们需要定义一个变量来接收传入的颜色。...); 参数 index :为顶点数据(如顶点,颜色,法线,纹理或点精灵大小)在着色器程序中的槽位; 参数 size :指定每一种数据的组成大小,比如顶点由 x, y, z 3个组成部分,纹理由 u,...; ptr :值得注意,这个参数是个多面手。...这里它指向 CPU 内存中的顶点数据数组; 代码中我们给stride填值,以前都是写的0,现在是写出了具体步长,写0是针对单一数据,如只有顶点数据或颜色数据的时候,系统会自己计算匹配,这时候可以写0,若不是单一数据...再看后面ptr的填值,对颜色数据,我们给出的是vertices+3,表示颜色数据从vertices的第4位开始,往后4位是颜色数据(size为4)。 代码的运行结果如下: ?

    67020

    NDK OpenGL ES 3.0 开发(十三):实例化(Instancing)

    使用实例化渲染需要使用的绘制接口: //普通渲染 glDrawArrays (GLenum mode, GLint first, GLsizei count); glDrawElements (GLenum..., GLsizei instancecount); 相对于普通绘制,实例化绘制多了一个参数instancecount,表示需要渲染的实例数量,调用完实例化绘制函数后,我们便将绘制数据一次性发送给 GPU...效果图 利用内建变量 gl_InstanceID和偏移数组进行实例化绘制还存在一个问题,那就是着色器中 uniform 类型数据存在上限,也就是 u_offsets 这个数组的大小有限制,最终导致我们绘制的实例存在上限...,1 表示每绘制一个实例,更新一次数组中的元素 glVertexAttribDivisor(2, 1); // Tell OpenGL this is an instanced vertex attribute...,更新一次数组中的元素。

    1.2K30

    OpenGL 的 glDrawElements 绘制方法

    在之前的绘制中,我们都是通过 glDrawArrays 方法来实现的,它会按照我们传入的顶点顺序和指定的绘制方式进行绘制。...然后再向渲染管线传递要绘制的顶点数据的索引,根据索引从顶点数据中取出对应的顶点,然后再按照指定的方式进行绘制。 如下图所示,图片截自《OpenGL ES 3.x 游戏开发上卷》: ?...frontBuffer) 19 // glDrawArrays 绘制 20 // GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4) 在函数原型中定义了要传入的参数...对于绘制时有重复点,采用这种方式,就可以减少向渲染管线中传递重复的点了。...glDrawElements 和 glDrawArrays 的对比 glDrawElements 方法的 count 的参数定义了要取多少个索引出来绘制,而且这个绘制是连续的,必须要把 count 数量的顶点绘制完

    2.4K21

    图元装配和光栅化

    count : 一共绘制的顶点数量 void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices...) mode : 三角行、直线、点精灵对应的7种模式 start : 指定indices最小的数组索引 end : 指定indices最大 的数组索引 count : 指定要绘制的索引数量 type...(GL_TRIANGLES, sizeof(indices) / sizeof(GLubyte), GL_UNSIGNED_BYTE, indices); 图元重启 使用图元重启 可以 在一次绘图调用中渲染多个不相连的图元...indices中的元素索引类型(GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT,GL_UNSIGNED_INT) indices : 元素索引储存位置的一个指针 instaceCount...可通过如下API设置偏移量,也可以通过glEnable(GL_POLYGON_OFFSET_FILL)和glDisable(GL_POLYGON_OFFSET_FILL)启用或者禁用多边形偏移 void

    3.1K20

    顶点属性、顶点数组和缓冲区对象

    在 一个缓冲区 中存储所有顶点属性—— 结构数组 在 单独的缓冲区 中保存 每个顶点 的属性—— 数组结构 性能上, 结构数组 的分配方法 在OpenGL ES 3.0的硬件实现中更高效。...在 顶点着色器 中 顶点属性的变量是 只读变量,不能修改。...glGenBuffer 分配了 n 个 缓冲区对象名称(0 以外的无符号整数),并在buffers中返回它们。..., GL_FLOAT, GL_FALSE, vtxStride, (const void*)offset); glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT...writetarget :写入的缓冲区对象目标 readoffset : 需要复制的读缓冲区数据中的偏移量,以字节表示 writeoffset : 需要渎职的写缓冲区数据中的偏移量,以字节表示 size

    84510

    NVIDIA HugeCTR,GPU版本参数服务器---(3)

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 0x00 摘要 0x01 回顾 0x02...模型文件应指定训练和测试(评估)集的文件名,样本中的元素(键)最大数目和标签维度,具体如图 1(a)所示。...Parquet 文件中的数据列可以按任何顺序排列。...一个 SparseTensor 使用三个稠密张量来表示: indices 表示稀疏张量的非零元素坐标。 values 则对应每个非零元素的值。 shape 表示本稀疏张量转换为稠密形式后的形状。...TensorBufferImpl 的 offset_ 就指向了 GeneralBuffer2 的 ptr 之中具体的某一个内存偏移; BufferBlockImpl 用来实现一个连续的Tensor内存。

    1.2K30

    NVIDIA HugeCTR,GPU版本参数服务器---(3)

    本系列其他文章如下: [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(1) [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (2) 0x01 回顾 我们首先回归一下前文内容...模型文件应指定训练和测试(评估)集的文件名,样本中的元素(键)最大数目和标签维度,具体如图 1(a)所示。...Parquet 文件中的数据列可以按任何顺序排列。...一个 SparseTensor 使用三个稠密张量来表示: indices 表示稀疏张量的非零元素坐标。 values 则对应每个非零元素的值。 shape 表示本稀疏张量转换为稠密形式后的形状。...TensorBufferImpl 的 offset_ 就指向了 GeneralBuffer2 的 ptr 之中具体的某一个内存偏移; BufferBlockImpl 用来实现一个连续的Tensor内存。

    77710

    OpenCV4.x的EAST场景文字检测

    ,这个有点像UNet图像分割网络,最后输出层,通过1x1的卷积分别得到score、RBOX、QUAD,输出参数的解释如下: OpenCV DNN使用 OpenCV4.0 的深度神经网络(DNN)模块能力大大加强...表示score的阈值 nms_threshold表示非最大抑制阈值 indices表示输出的结果,是每个box的索引index数组 eta表示自适应的阈值nms阈值方式 top_k表示前多少个,为0表示忽略...std::vector indices;         NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, indices);..._data = geometry.ptr(0, 1, y);         const float* x2_data = geometry.ptr(0, 2, y);         ...const float* x3_data = geometry.ptr(0, 3, y);         const float* anglesData = geometry.ptr<float

    51110

    mold源码阅读十二 创建一些输出段

    前者是verdef的信息,后者则是指向对应字符串在dynstr中的offset。...传入的verstr实际保存在ctx.dynstr中,而Verdaux中保存的是则是verstr在dynstr中的offset,而VerDef仅保存索引,hash等信息。...contents.resize(ptr - buf); } 处理过程中根据如果是第一个符号或者连续两个符号不是相同的file就start_group。...parse的,因此需要再手动构造output中eh_frame的部分,在构造的过程中主要是消除重复的部分,另外各个段是由offset以及idx关联起来的,更新这些信息也是必要的工作。...确保输入存在eh_frame,不存在则无需构造 删除dead fed,重新设置offset uniquify cie,重新设置offset fde idx的更新 重新设置文件中存储的fde的offset

    21020

    OpengL ES _ 入门_02

    , GLenum type, const GLvoid *indices); 我们下面讲的内容将围绕这两个函数展开, 先看两个函数的参数:都有mode,那么这个mode 代表什么意思的,其实就是绘制模式...GL_POINTS 给n个顶点的每一个都绘制一个点 GL_POINTS ,如果你选择这个模式,一般四面体的顶点数据就要放在一个数组中: static GLfloat vertex[4\*3\*3]...: void glDrawArrays (GLenum mode, GLint first, GLsizei count); 我解释一下参数的含义: 参数1 :Mode :这个不用说,绘制模式...,在这种方式我们选择GL_POINTS 参数2: first :从数组的那个位置开始,一般如果数组没有其他类型的数据,只有顶点数据,我们就填 0 参数3: count 就是绘制顶点的个数, 例子中是...mode, GLsizei count, GLenum type, const GLvoid *indices); 当然 解释一下: 参数1: mode : 绘制方式 参数2:顶点索引个数 参数

    73810
    领券