先插入一段代码,然后对这段代码进行解释。网上很多地方讲解了如何进行绕x轴,y轴旋转产生3D效果。但是没有任何人对矩阵的算法进行剖析。本文档对其算法进行解释。

void SkCamera3D::doUpdate() const {
SkUnit3D    axis, zenith, cross;
fAxis.normalize(&axis);
{
SkScalar dot = SkUnit3D::Dot(*(const SkUnit3D*)(const void*)&fZenith, axis);
zenith.fX = fZenith.fX - SkUnitScalarMul(dot, axis.fX);
zenith.fY = fZenith.fY - SkUnitScalarMul(dot, axis.fY);
zenith.fZ = fZenith.fZ - SkUnitScalarMul(dot, axis.fZ);
(void)((SkPoint3D*)(void*)&zenith)->normalize(&zenith);
}
/*
[-z, 0, x]   [cross.fX,     cross.fY,       cross.fZ]
[0, -z, y]* [zenith.fx,     zenith.fY,  zenith.fZ]
[0,  0,  1]  [axis.fx,  axis.fY,        axis.fZ]
*/
SkUnit3D::Cross(axis, zenith, &cross);
{
SkMatrix* orien = &fOrientation;
SkScalar x = fObserver.fX;
SkScalar y = fObserver.fY;
SkScalar z = fObserver.fZ;
orien->set(SkMatrix::kMScaleX, SkUnitScalarMul(x, axis.fX) - SkUnitScalarMul(z, cross.fX));
orien->set(SkMatrix::kMSkewX,  SkUnitScalarMul(x, axis.fY) - SkUnitScalarMul(z, cross.fY));
orien->set(SkMatrix::kMTransX, SkUnitScalarMul(x, axis.fZ) - SkUnitScalarMul(z, cross.fZ));
orien->set(SkMatrix::kMSkewY,  SkUnitScalarMul(y, axis.fX) - SkUnitScalarMul(z, zenith.fX));
orien->set(SkMatrix::kMScaleY, SkUnitScalarMul(y, axis.fY) - SkUnitScalarMul(z, zenith.fY));
orien->set(SkMatrix::kMTransY, SkUnitScalarMul(y, axis.fZ) - SkUnitScalarMul(z, zenith.fZ));
orien->set(SkMatrix::kMPersp0, axis.fX);
orien->set(SkMatrix::kMPersp1, axis.fY);
orien->set(SkMatrix::kMPersp2, axis.fZ);
}
}

大家看了上面一段代码可能云里雾里。具体参照SkCamera.cpp。目录在android的 extern目录的libskia下。

这个矩阵算出来的是orien。orien顾名思义就是方位。但是上面的运算又是什么意思呢。很多线性代数不好的同学,或者线性代数很好的同学,都不知道。究其原因就是不能理论联系实际。这是中国人大学生的通病。

废话少说,解释一下。

[-z, 0, x]   [cross.fX,   cross.fY,   cross.fZ ]
[0, -z, y]* [zenith.fx, zenith.fY, zenith.fZ]
[0, 0, 1]    [ axis.fx,        axis.fY,     axis.fZ ]

今天就到这里。明天继续。和明显x,y 表示的是偏移量。而-z,-z表示了放大缩小倍数。就相当于根据z的值,对原来的坐标系的沿着x,y方向进行放大z倍,然后平移到x,y。一般情况下,x=0,y=0,。因此,此函数就相当于放大了-z倍。

【脚下有根】之Skia库的matrix代码解读相关推荐

  1. skia 源码分析_【脚下有根】之Skia库的matrix代码解读

    先插入一段代码,然后对这段代码进行解释.网上很多地方讲解了如何进行绕x轴,y轴旋转产生3D效果.但是没有任何人对矩阵的算法进行剖析.本文档对其算法进行解释. void SkCamera3D::doUp ...

  2. skia库的3D变换研究

    skia库的3D坐标变换其实也是无奈之举.参照SKCamera.cpp: 首先,定义了一个虚拟相机: void SkCamera3D::reset() { fLocation.set(0, 0, -S ...

  3. Skia深入分析10——Skia库的性能与优化潜力

    Skia库性能与优化潜力 图形/渲染 算法/架构 作为图形渲染引擎,性能上是非常重要的,按通常Android手机60帧的刷新率,绘制一帧的总时间只有16ms,可谓是毫厘必争.提升性能到最后,就必然跟不 ...

  4. Android编译Skia库

    Android编译Skia库 本文档提供两种方法编译Skia库 使用aosp源码进行编译 使用skia源码进行编译 两种编译方法都可以编译,并且都可以使用在多个平台中,且可以使用在不同Android版 ...

  5. windows下编译skia库

    windows下编译skia库 环境需求: 1.安装python2.7.x: python3系列可能又某些库不支持,所以推荐使用python2.7.15(最新). 如何检查是否安装python: 1. ...

  6. Windows版skia库的编译及下载(VS2019)

    工作需要使用skia库,但是这个库的源代码不好访问,编译工具也是要科学访问才行,windows上自己编译一份很麻烦,可是网上找不到编译好的库...... 不对,至少能找到一份,但是居然它的debug版 ...

  7. Windows环境VS2017编译skia库-m84,亲测成功,使用官方编译的方法

    环境准备 Windows7/10电脑需要能访问https://skia.org/和https://skia.googlesource.com/skia.git 在Windows上安装Visual St ...

  8. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  9. [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互

    [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互 原文:[WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互 1. 前言 WPF有一个灵活的 ...

最新文章

  1. Blender中的大师级3D环境场景制作学习教程
  2. 怎样设计一个商城项目?
  3. 1390 游戏得分(贪心)
  4. 2016年金融全行业网络安全状况调研报告
  5. 遮挡目标检测优化笔记
  6. 360安全卫士 导致MySQL 5.0.24 自动关闭
  7. 开源资讯- Jeecg 在线聊天MQ插件发布
  8. tiny服务器系列,项目:TinyHTTP服务器
  9. ip subnet-zero
  10. saltstack计划任务工具和其他命令
  11. Mac WebStorm 破解
  12. 财务部计算机操作规程,财务部操作规程.pdf
  13. PostgreSQL文本搜索(七)——自定义配置
  14. git入门-----远程操作相关命令(remote 、push、fetch 、pull)
  15. 51单片机:1602液晶显示屏
  16. A protocol for Dying
  17. 从小玩到大的铁哥们突然跟我表白,该怎么面对?
  18. 虚拟示波器-开天斧-STC8H8K64U核心功能实验板测试
  19. Mybatis学习一
  20. 服务器主板四路SLI时候出现的问题

热门文章

  1. minicom的按键控制_minicom使用指南
  2. kodi教程_KODI清理缓存插件安装设置教程
  3. 1.72java8_JDK 1.7 1.8 新特性
  4. opengl绘制长方体线框_OpenGL 绘制长方体 计算机图形学
  5. calico跨主机ping不通_戳穿 Calico 的谎言
  6. 2.MOC文件解读(上)——MOC文件中的数据
  7. mysql中group concat_mysql中group_concat()函数的使用方法总结
  8. 如何在geth中创建genesis.json_如何在Photoshop中应用“通道混合器”创建一个复古韵味色调...
  9. MySQL 表中添加 时间戳 字段
  10. 你需要知道的Android View的布局