`
daojin
  • 浏览: 697719 次
  • 性别: 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”压缩包很可能包含了Skia图形库的源代码、头文件、构建脚本以及其他相关资源,使得开发者能够在其项目中集成和使用Skia进行2D图形渲染。 Skia提供了丰富的API,支持多种硬件加速技术,以实现高效的...

    skia源码下载

    Skia是一款强大的2D图形库,广泛应用于Android、Windows以及其他跨平台系统中。它由Google开发并维护,为各种应用程序提供了高效且灵活的图形渲染能力。Skia支持多种硬件平台和软件环境,使得开发者能够在不同的操作...

    skia 编译好的库(windows)

    Skia是一个开源的2D图形库,由Google开发并维护,它被广泛应用于各种平台,包括Android、Chrome、Chromium以及其他许多软件项目中。Skia提供了丰富的2D图形API,支持矢量图形、文本渲染、图像处理等功能,使得开发者...

    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 for windows 静态库

    开发人员在构建应用程序时,可以将提供的`skia.lib`文件添加到项目的依赖项中,以便在编译时链接Skia库的函数和类。 使用静态库有一些优点,比如避免了运行时库文件缺失导致的问题,以及确保了应用程序在不同系统上...

    skia_svn_sln.zip

    Skia的工程文件通常会包含一系列的源码文件(如.c、.cpp、.h等)、资源文件、编译设置和链接器选项。通过打开和编译这个.sln文件,开发者可以查看Skia的源代码,理解其内部实现,甚至对其进行修改和扩展,以满足特定...

    skia lottie动画调测

    3. `HelloWorld.cpp`、`skottieTool.cpp`、`skottie2movie.cpp`、`Sample.cpp`、`Timer.cpp`、`skottie_test.cpp`:这些都是C++源代码文件,很可能包含使用Skia和Lottie库进行动画处理的示例代码。例如,`skottie_...

    Skia图形库SDK,带头文件和静态lib(x86)解压共1.8GB

    Skia图形库SDK是一款强大的开源2D图形处理库,由Google开发并维护,广泛应用于Android、Chrome、Chrome OS以及各种嵌入式系统等项目中。它提供了丰富的API,支持多种平台,包括Windows、Linux、MacOS等。SDK中的...

    Android的Graphic系统分析之skia.doc

    Android的Graphic系统分析之skia.doc

    skia-master.zip

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

    Java bindings for Skia.zip

    Java Bindings for Skia是一个将Google的Skia图形库与Java平台紧密结合的项目。Skia是一个强大的2D图形处理库,被广泛应用于Android、Chrome、Chrome OS等Google产品中,提供高效、跨平台的图形渲染能力。Java ...

    Google Skia 2D渲染引擎 最新版本 编译库

    **Google Skia 2D渲染引擎详解** Google Skia是一个开源的2D图形处理库,由Google开发并维护,主要用于构建高性能的图形渲染系统。它被广泛应用于Android、Chrome和其他Google产品中,提供了丰富的2D图形API,支持...

    Skia静态库-自己生成的

    自己生成的skia静态库,包括core的全部

    SOUI界面库生成的EXE

    2. **render-skia.dll**:这是Skia图形库的组件,用于图形渲染。Skia是一个高性能的2D图形库,广泛应用于Android、Chrome等项目,为SOUI提供了强大的图形绘制能力。 3. **soui.dll**:这是SOUI库的核心组件,包含了...

    Microsoft.Maui.Graphics.Skia 使用 DrawString 绘制文本的坐标问题.rar

    在Microsoft.Maui.Graphics.Skia中,`DrawString`方法是用于在画布上渲染文本的核心功能。这个方法的使用有时会涉及到一些坐标系统和布局的问题,特别是对于初学者来说可能会遇到一些困惑。本篇文章将深入探讨`...

    skia_test.rar_Weird_skia

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

    Skia4Delphi-20220427.zip

    《Skia4Delphi:基于谷歌Skia图形库的跨平台2D图形API》 Skia4Delphi,如其名所示,是一个专为Delphi开发者设计的跨平台2D图形应用程序接口(API)。该库的核心是Google的Skia图形库,一个广泛应用于多个操作系统和...

    skia.zip

    《Skia图形库深度解析与应用实践》 Skia,这个看似简单的名字,背后却蕴含着强大的图形处理能力。作为Google开发的一款2D图形库,它在Android、Chrome OS、Chrome浏览器以及诸多开源项目中扮演着核心角色。本文将...

    skia描画库实例

    在`main.cpp`文件中,导入Skia库的头文件,并编写基本的Skia绘图代码。例如,你可以创建一个`SkCanvas`对象,使用`drawRect`函数绘制一个矩形。 ```cpp #include "SkPaint.h" #include "SkSurface.h" #include ...

Global site tag (gtag.js) - Google Analytics