假设我画了一个像这样的立方体:
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中的valuse已经改变,我应该能够将这些值作为普通的浮点数组返回。当我尝试从mVerticesBuffer获取这些值时,我总是在任何平移/旋转之前获得与多维数据集的位置相对应的值。是否有OpenGL API来获取正确的值或者我错过了什么?
答案 0 :(得分:2)
OpenGL不是数学库。它不会对您传递给它的数据进行任何修改。您可以请求缓冲区等内容,但仅限于明确请求,而不是您错误预期的方式。
由模型视图和投影矩阵定义的变换,使用glLoadMatrix,glMultMatrix,glTranslate,glRotate,glScale进行操作,这些变换原位应用于顶点位置,仅用于处理每个顶点并且不会持久存储。有转换反馈来检索转换后的顶点数据,但这会通过不同的OpenGL对象和缓冲区。
答案 1 :(得分:2)
你需要的是变换反馈(TF)的确切情况:你想要获得变换后的顶点。 这对今天的OpenGL来说非常好。以下是使用它的说明: