假设我画一个像这样的立方体:
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 来说完全没问题。以下是使用它的说明:
- 创建一个执行必要顶点变换的着色器(仅包含顶点组件)。在链接之前调用 glTransformFeedbackVaryings 告诉 GL 您想要记录的着色器中的变化输出。
- 准备一个VBO来存储结果。在执行 TF 之前,调用 glBindBufferBase 告诉 GL 结果值的存储。
- 在进行 TF 时,调用 glBeginTransformFeedback() 并记录一个 GL_PRIMITIVES_WRITTEN 类型的查询。
关于opengl-es - 如何获取OpenGL ES中绘制的网格的顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987324/