【学习笔记】3D图形核心基础精炼版-5:stage3D实战-矩阵计算

M矩阵:物体总会在这个世界的某一处,而具体在哪里,旋转角度是多少,是否缩放了,这里每一个物体就可以用这个M矩阵来记录。

V矩阵:虽然物体不是变动的,但你视角变动了,物体显示在屏幕中的画面也就不同了吧,这个时候我们物体的M矩阵没有变,但我们的世界唯一的一个相机矩阵V变动了。

P矩阵:这个一般是整个世界最终的投影了,如果你现在无法理解,反正你记得就两个投影矩阵,一个越远的物体显示越小,根我们现实世界一样,一个不管远近都一样大小。


最终物体坐标=原始坐标+MVP (这里的+仅代表结合的意思,并不是直接数学相加)


原始坐标是什么呢,这里我们用2D来说明下吧,在2D里就有相对坐标,而原始坐标就是指一个物体相对于0,0点的坐标,比如一个三角形A(0,0)B(10,0)C(0,10),他肯定是一个在舞台左上角的一个三角形吧,那么我让他的X=100,Y=100,旋转180度,很显然,它在屏幕中的最终坐标并不再是A(0,0)B(10,0)C(0,10)了吧,具体是多少你可以自己建一个工程试试看,可以利用localToGlobal来转换下看具体是多少。所以这里的X、Y和旋转的变动我们可以用一个矩阵变换来表示,用一个3x3的矩阵(Matrix)即可表示了。也就是说 最终物体坐标 = 原始坐标+Matrix。同样,3D同理,这个matrix就是matrix3D,是一个4x4的矩阵,也就是M矩阵,代表物体的变换的矩阵。

这个时候你又要有镜头的概念,如果镜头向下移动了100个像素,当然flash里面没有镜头的概念,我们无法操作这个镜头,那么我们肯定就会用替代方案来制作镜头的效果,比如让所有物体都向上移动100像素,是不是就显得镜头向下移动了100像素呢?而这个换算我们就可以创造出一个“镜头”的类来代替计算,所有物体在最终显示前还要再跟镜头计算下,恩,没错,所以在3D中就存在了一个V矩阵。

P矩阵前面说过了。


所以绘制一个物体无非就是知道这个物体的形状的坐标原始点+物体矩阵变换+镜头矩阵变换+投影矩阵变换:

// 该物体的最终矩阵归零,表示没有变换
finalMatrix.identity();
// 该物体的最终矩阵乘上模型矩阵M-物体的变换信息
finalMatrix.append(ModelMatrix);
// 该物体的最终矩阵乘上相机矩阵V-相机的变换信息
finalMatrix.append(ViewMatrix);
// 该物体的最终矩阵乘上投影矩阵P-投影的变换信息
finalMatrix.append(projectionMatrix);

这里仅仅获得了最终矩阵,而原始坐标点则在shader里面计算,让GPU来计算(AGAL中的m44方法),当然,如果这个物体在屏幕中一直不用变动的话,你甚至可以在CPU上计算,将该物体的所有顶点乘上finalMatrix缓存好最终坐标点以提升效率。


大多数情况下物体的变动都是通过CPU的矩阵计算来进行计算的,比如计算该物体当前的位置、计算该物体中某一点所在屏幕的点位置(localToGlobal的3D版)等等。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值