Android中OpenGL使用Matrix.rotateM的困惑

在学习OpenGL并尝试将Android的Java代码转换为C实现时,遇到Matrix.rotateM函数的困惑。问题主要在于旋转矩阵是左乘还是右乘。经过研究,发现在Android中,rotateM方法是将旋转矩阵左乘于原始矩阵,这与OpenGL的行向量表示法一致。一个StackOverflow的回答提供了关于setRotateM和rotateM区别的详细解释。
摘要由CSDN通过智能技术生成

使用Android那本书在学习OpenGL,学习的过程中需要把代码从java翻译为C的实现,于是对android中使用Matrix.rotateM的使用有一些困惑,关于左乘还是右乘的问题,在stackoverflow上面发现一个解答,是把rotate的矩阵左乘以原始的矩阵,这跟OpenGL是以行向量表示是相符合的。

Let's say matrix R is rotation matrix around (x,y,z) axis by angle a, then rotateM method modifies existing matrix m like this: m = R * m

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码也是在OpenGL ES用于渲染3D场景的。下面是对代码的解释: 1. `Matrix.translateM(modelMatrix, 0, 0f, -50f, 50f);` 这行代码是将模型矩阵(modelMatrix)进行平移变换,将模型沿着y轴负方向移动50个单位长度,同时沿着z轴正方向移动50个单位长度。 2. `Matrix.rotateM(modelMatrix, 0, 90.0f, 1.0f, 0f, 0f);` 这行代码是将模型矩阵(modelMatrix)进行旋转变换,将模型绕着x轴旋转90度。这里的参数90.0f表示旋转的角度,(1.0f, 0f, 0f)表示旋转的轴向为x轴。 3. `Matrix.multiplyMM(modelViewProjection, 0, projectionMatrix, 0, modelMatrix, 0);` 这行代码是将投影矩阵(projectionMatrix)与新的模型矩阵(modelMatrix)相乘,得到一个最终的模型视图投影矩阵(modelViewProjection)。这个矩阵包含了设备的姿态信息、模型的位置信息和投影信息。 4. `GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 36);` 这行代码是使用三角形(Triangles)的方式渲染模型。第一个参数指定了渲染的方式,第二个参数指定了渲染的起始位置,第三个参数指定了渲染的顶点数。 5. `GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, modelViewProjection, 0);` 这行代码是将模型视图投影矩阵传递给着色器程序的统一变量(mvpMatrixHandle)。这个变量在着色器程序用于将顶点坐标变换到屏幕坐标系。 总的来说,这段代码将一个3D模型渲染到屏幕上,并且包含了模型的位置、设备的姿态和投影信息。其模型进行了平移和旋转变换,最终使用三角形的方式进行渲染。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值