arrays - 我如何获得 OpenGL ES 2.0 中顶点的实际位置
问题描述
在顶点数组上应用旋转或平移矩阵后,顶点缓冲区不会更新
那么如何在应用矩阵后得到顶点的位置呢?
这是onDrawFrame()
功能
public void onDrawFrame(GL10 gl) {
PositionHandle = GLES20.glGetAttribLocation(Program,"vPosition");
MatrixHandle = GLES20.glGetUniformLocation(Program,"uMVPMatrix");
ColorHandle = GLES20.glGetUniformLocation(Program,"vColor");
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT );
Matrix.rotateM(RotationMatrix,0,-90f,1,0,0);
Matrix.multiplyMM(vPMatrix,0,projectionMatrix,0,viewMatrix,0);
Matrix.multiplyMM(vPMatrix,0,vPMatrix,0,RotationMatrix,0);
GLES20.glUniformMatrix4fv(MatrixHandle, 1, false, vPMatrix, 0);
GLES20.glUseProgram(Program);
GLES20.glEnableVertexAttribArray(PositionHandle);
GLES20.glVertexAttribPointer(PositionHandle,3,GLES20.GL_FLOAT,false,0,vertexbuffer);
GLES20.glUniform4fv(ColorHandle,1,color,1);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES,0,6);
GLES20.glDisableVertexAttribArray(PositionHandle);
}
解决方案
GPU 通常不会在应用程序可以使用它们的任何地方写回转换后的结果。在 ES 3.0 中可以使用转换反馈,但它非常昂贵。
对于触摸事件“命中”测试,您通常不想使用原始几何图形。一般使用一些简单的代理几何,可以在CPU上用软件进行变换。
推荐阅读
- android - Flutter 后台操作 SQLite 数据库
- python - 异常 str() 失败 - py3
- html - XPath //*[text()] 没有选择我想要的文本
- nginx - 带有 NGINX 负载均衡器的 GKE 入口资源显示奇怪的 IP?
- reactjs - 如何在反应浏览器中导入 unpkg 组件
- ruby-on-rails - 如何在 Ruby 中轻松将 8.weeks 转换为“8 周”?
- sql - 查询空或仅一行
- c# - C# Selenium 谷歌表
- c++ - 使用 MinGW 32 位创建 python 包装器时出现“插件需要处理 lto 对象”问题
- yaml - YAML/Swagger 缩进错误