`
daojin
  • 浏览: 677179 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Skia的SkCamera.cpp的doUpdate() 算法。

 
阅读更多
1.一个空间坐标系A1由U,V 和Origin来表述。
其中U,代表横轴。V代表纵轴。Origin代表原点。[初始值与屏幕坐标相同]

2.另外一个空间坐标系A2由当前矩阵Matrix描述。

3.A1经过A2进行变换,变换后的值A3为新的坐标系下的值。


4.A4是另外一个新的坐标系,代表的是一个方锥形的投影。
  A3经过A4进行变换,得到一个新的矩阵A5.代表的是A1在视口中的矩阵标示。


观察点在0,0,-576 (fLocation.fZ 和 fObserver 是同一值,标示观察的位置)
向前的方向为 0,0,1  fAxis 标示观察方向
向上的方向为 0, -1, 0  fZenith标示相机向上的方向。

doUpdate方法中。
对fZenith和fAxis求了一次点积。然后通过以下方法对位置fZenith的坐标进行了调整


SkUnit3D    axis, zenith, cross;
         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);

然后对zenith 和 axis求了一次叉积。很明显,是再求相机朝右的方向。

      SkUnit3D::Cross(axis, zenith, &cross);


最后,对这个相机针对观察点 fObserver。要进行一次平移变换。

           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);
分享到:
评论

相关推荐

    skia.rar(2D图形库)

    skia.rar(2D图形库)

    Android的Graphic系统分析之skia.doc

    Android的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia...

    Java bindings for Skia.zip

    Java bindings for Skia.zip

    skia.zip

    skia.zip

    skia-master.zip

    skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...

    skia_svn_sln.zip

    skia_svn_sln.zip skia_svn_sln.zip skia_svn_sln.zip 带工程文件的skia

    skia 编译好的库(windows)

    skia 编译好的库(windows) 包括库、调试信息等。 是在windows下面用vs2010编译的,共20多个库。

    skia_test.rar_Weird_skia

    need to explicitly declare this, or we get some weird infinite loop llist template TestRegistry TestRegistry::gHead .

    Skia-Windows-Release-x64

    Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See full details, and build instructions, at https://skia.org.

    skia研究文档

    skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...

    Skia4Delphi-20220427.zip

    Skia4Delphi is a cross-platform 2D graphics API for Delphi based on Google's Skia Graphics Library

    skia最新版本VS2017工程项目

    完整的skia vs2017 sln工程项目可直接编译运行 并且结合SDL添加绘画示例,在MFC窗口上直接显示 skia为2017.11最新的源码

    .net UI类..基于skia库形图的ppc类

    移植skia到ppc上的.net ui类库

    Skia Canvas是Node.js的画布环境-JavaScript开发

    它基于Google的Skia图形引擎,因此产生的结果与Chrome的结果非常相似 元素。 尽管该项目的主要目标是根据规范提供对标准API的可靠仿真,但它还将其扩展到与静态图形文件的生成更为相关的许多领域,而不是“动态”...

    Skia4Delphi 3.2.0 from March 04, 2022

    Cross-platform 2D graphics API based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile, server and desktop models to render images.

    skia for windows 静态库

    用vs2015编译的skia静态链接库,release模式 64位

    Android怎么添加多国语言

    Android 添加多国语言 只要有下面几个步骤,就...4) 修改./external/skia/src/ports/SkFontHost_android.cpp; 5)去修改./build/target/product/languages_small.mk 6) 在external/icu4c/studata下的Android.mk下添加.

    Android性能优化(六)图片压缩

    /frameworks/base/core/jni/android/graphics/Bitmap.cpp Skia引擎 https://skia.org/index_zh Google 研发、开源的C++二维图形库  Android:  阉割的skia版本,对jpeg的处理基于libjpeg,对png则是基于libpng。 ...

Global site tag (gtag.js) - Google Analytics