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”压缩包很可能包含了Skia图形库的源代码、头文件、构建脚本以及其他相关资源,使得开发者能够在其项目中集成和使用Skia进行2D图形渲染。 Skia提供了丰富的API,支持多种硬件加速技术,以实现高效的...
Skia是一款强大的2D图形库,广泛应用于Android、Windows以及其他跨平台系统中。它由Google开发并维护,为各种应用程序提供了高效且灵活的图形渲染能力。Skia支持多种硬件平台和软件环境,使得开发者能够在不同的操作...
Skia是一个开源的2D图形库,由Google开发并维护,它被广泛应用于各种平台,包括Android、Chrome、Chromium以及其他许多软件项目中。Skia提供了丰富的2D图形API,支持矢量图形、文本渲染、图像处理等功能,使得开发者...
Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See full details, and build instructions, at https://skia.org.
开发人员在构建应用程序时,可以将提供的`skia.lib`文件添加到项目的依赖项中,以便在编译时链接Skia库的函数和类。 使用静态库有一些优点,比如避免了运行时库文件缺失导致的问题,以及确保了应用程序在不同系统上...
Skia的工程文件通常会包含一系列的源码文件(如.c、.cpp、.h等)、资源文件、编译设置和链接器选项。通过打开和编译这个.sln文件,开发者可以查看Skia的源代码,理解其内部实现,甚至对其进行修改和扩展,以满足特定...
3. `HelloWorld.cpp`、`skottieTool.cpp`、`skottie2movie.cpp`、`Sample.cpp`、`Timer.cpp`、`skottie_test.cpp`:这些都是C++源代码文件,很可能包含使用Skia和Lottie库进行动画处理的示例代码。例如,`skottie_...
Skia图形库SDK是一款强大的开源2D图形处理库,由Google开发并维护,广泛应用于Android、Chrome、Chrome OS以及各种嵌入式系统等项目中。它提供了丰富的API,支持多种平台,包括Windows、Linux、MacOS等。SDK中的...
Android的Graphic系统分析之skia.doc
skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...
Java Bindings for Skia是一个将Google的Skia图形库与Java平台紧密结合的项目。Skia是一个强大的2D图形处理库,被广泛应用于Android、Chrome、Chrome OS等Google产品中,提供高效、跨平台的图形渲染能力。Java ...
**Google Skia 2D渲染引擎详解** Google Skia是一个开源的2D图形处理库,由Google开发并维护,主要用于构建高性能的图形渲染系统。它被广泛应用于Android、Chrome和其他Google产品中,提供了丰富的2D图形API,支持...
自己生成的skia静态库,包括core的全部
2. **render-skia.dll**:这是Skia图形库的组件,用于图形渲染。Skia是一个高性能的2D图形库,广泛应用于Android、Chrome等项目,为SOUI提供了强大的图形绘制能力。 3. **soui.dll**:这是SOUI库的核心组件,包含了...
在Microsoft.Maui.Graphics.Skia中,`DrawString`方法是用于在画布上渲染文本的核心功能。这个方法的使用有时会涉及到一些坐标系统和布局的问题,特别是对于初学者来说可能会遇到一些困惑。本篇文章将深入探讨`...
need to explicitly declare this, or we get some weird infinite loop llist template TestRegistry TestRegistry::gHead .
《Skia4Delphi:基于谷歌Skia图形库的跨平台2D图形API》 Skia4Delphi,如其名所示,是一个专为Delphi开发者设计的跨平台2D图形应用程序接口(API)。该库的核心是Google的Skia图形库,一个广泛应用于多个操作系统和...
《Skia图形库深度解析与应用实践》 Skia,这个看似简单的名字,背后却蕴含着强大的图形处理能力。作为Google开发的一款2D图形库,它在Android、Chrome OS、Chrome浏览器以及诸多开源项目中扮演着核心角色。本文将...
在`main.cpp`文件中,导入Skia库的头文件,并编写基本的Skia绘图代码。例如,你可以创建一个`SkCanvas`对象,使用`drawRect`函数绘制一个矩形。 ```cpp #include "SkPaint.h" #include "SkSurface.h" #include ...