opengl-es - 如何获取OpenGL ES中绘制的网格的顶点?

标签 opengl-es

假设我画一个像这样的立方体:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerticesBuffer);

        gl.glTranslatef(x, y, z);
        gl.glRotatef(rz, 0, 0, 1);
        gl.glRotatef(rx, 1, 0, 0);
        gl.glRotatef(ry, 0, 1, 0);

        gl.glDrawElements(GL10.GL_TRIANGLES, mNumOfIndices,
                GL10.GL_UNSIGNED_SHORT, mIndicesBuffer);
           float[] result = getVertices(mVerticesBuffer);

其中 mVerticesBuffer 是具有立方体顶点的 FloatBuffer。移动旋转立方体后,我希望 mVerticesBuffer 中的值发生变化,并且我应该能够将这些值作为普通 float 组返回。当我尝试从 mVerticesBuffer 获取这些值时,我总是在任何平移/旋转之前获取与立方体位置相对应的值。是否有 OpenGL API 可以获取正确的值,还是我遗漏了什么?

最佳答案

您需要的是变换反馈(TF)的确切情况:您想要取回变换后的顶点。 这对于当今的 OpenGL 来说完全没问题。以下是使用它的说明:

  1. 创建一个执行必要顶点变换的着色器(仅包含顶点组件)。在链接之前调用 glTransformFeedbackVaryings 告诉 GL 您想要记录的着色器中的变化输出。
  2. 准备一个VBO来存储结果。在执行 TF 之前,调用 glBindBufferBase 告诉 GL 结果值的存储。
  3. 在进行 TF 时,调用 glBeginTransformFeedback() 并记录一个 GL_PRIMITIVES_WRITTEN 类型的查询。

关于opengl-es - 如何获取OpenGL ES中绘制的网格的顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987324/

相关文章:

android - 在 Android OpenGL 类(class)上工作无法弄清楚我做错了什么

ios - 使用 glReadPixel() 和多重采样读取数据

java - 使用 fragment 着色器和GL_LINE_STRIP在OpenGL GLES20 android中绘制简单的虚线或短划线

ios - 是否可以通过 iOS 纹理缓存 API 从 OpenGL ES 帧缓冲区读取 float ?

opengl-es - 使用 webGL 库进行数据可视化和数据分析?

iphone - 如何识别 OpenGL ES 立方体的哪一面已被触摸?

javascript - WebGL 中的索引缓冲区?

iphone - 未调用 glkView drawInRect

user-interface - WebGL 中的完整 UI 小部件工具包渲染

opengl-es - OpenGL 混合将黑色呈现为灰色?