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图形库)
Android的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia.docAndroid的Graphic系统分析之skia...
Java bindings for Skia.zip
skia.zip
skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...
skia_svn_sln.zip skia_svn_sln.zip skia_svn_sln.zip 带工程文件的skia
skia 编译好的库(windows) 包括库、调试信息等。 是在windows下面用vs2010编译的,共20多个库。
need to explicitly declare this, or we get some weird infinite loop llist template TestRegistry TestRegistry::gHead .
Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See full details, and build instructions, at https://skia.org.
skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...
Skia4Delphi is a cross-platform 2D graphics API for Delphi based on Google's Skia Graphics Library
完整的skia vs2017 sln工程项目可直接编译运行 并且结合SDL添加绘画示例,在MFC窗口上直接显示 skia为2017.11最新的源码
移植skia到ppc上的.net ui类库
它基于Google的Skia图形引擎,因此产生的结果与Chrome的结果非常相似 元素。 尽管该项目的主要目标是根据规范提供对标准API的可靠仿真,但它还将其扩展到与静态图形文件的生成更为相关的许多领域,而不是“动态”...
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.
用vs2015编译的skia静态链接库,release模式 64位
Android 添加多国语言 只要有下面几个步骤,就...4) 修改./external/skia/src/ports/SkFontHost_android.cpp; 5)去修改./build/target/product/languages_small.mk 6) 在external/icu4c/studata下的Android.mk下添加.
/frameworks/base/core/jni/android/graphics/Bitmap.cpp Skia引擎 https://skia.org/index_zh Google 研发、开源的C++二维图形库 Android: 阉割的skia版本,对jpeg的处理基于libjpeg,对png则是基于libpng。 ...