| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| // Inspired by Rob Johnson's most excellent QuickDraw GX sample code |
| |
| #ifndef SkCamera_DEFINED |
| #define SkCamera_DEFINED |
| |
| #include "include/core/SkM44.h" |
| #include "include/core/SkMatrix.h" |
| #include "include/private/SkNoncopyable.h" |
| |
| // NOTE -- This entire header / impl is deprecated, and will be removed from Skia soon. |
| // |
| // Skia now has support for a 4x matrix (SkM44) in SkCanvas. |
| // |
| |
| class SkCanvas; |
| |
| // DEPRECATED |
| class SkPatch3D { |
| public: |
| SkPatch3D(); |
| |
| void reset(); |
| void transform(const SkM44&, SkPatch3D* dst = nullptr) const; |
| |
| // dot a unit vector with the patch's normal |
| SkScalar dotWith(SkScalar dx, SkScalar dy, SkScalar dz) const; |
| SkScalar dotWith(const SkV3& v) const { |
| return this->dotWith(v.x, v.y, v.z); |
| } |
| |
| // deprecated, but still here for animator (for now) |
| void rotate(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {} |
| void rotateDegrees(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {} |
| |
| private: |
| public: // make public for SkDraw3D for now |
| SkV3 fU, fV; |
| SkV3 fOrigin; |
| |
| friend class SkCamera3D; |
| }; |
| |
| // DEPRECATED |
| class SkCamera3D { |
| public: |
| SkCamera3D(); |
| |
| void reset(); |
| void update(); |
| void patchToMatrix(const SkPatch3D&, SkMatrix* matrix) const; |
| |
| SkV3 fLocation; // origin of the camera's space |
| SkV3 fAxis; // view direction |
| SkV3 fZenith; // up direction |
| SkV3 fObserver; // eye position (may not be the same as the origin) |
| |
| private: |
| mutable SkMatrix fOrientation; |
| mutable bool fNeedToUpdate; |
| |
| void doUpdate() const; |
| }; |
| |
| // DEPRECATED |
| class SK_API Sk3DView : SkNoncopyable { |
| public: |
| Sk3DView(); |
| ~Sk3DView(); |
| |
| void save(); |
| void restore(); |
| |
| void translate(SkScalar x, SkScalar y, SkScalar z); |
| void rotateX(SkScalar deg); |
| void rotateY(SkScalar deg); |
| void rotateZ(SkScalar deg); |
| |
| #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
| void setCameraLocation(SkScalar x, SkScalar y, SkScalar z); |
| SkScalar getCameraLocationX() const; |
| SkScalar getCameraLocationY() const; |
| SkScalar getCameraLocationZ() const; |
| #endif |
| |
| void getMatrix(SkMatrix*) const; |
| void applyToCanvas(SkCanvas*) const; |
| |
| SkScalar dotWithNormal(SkScalar dx, SkScalar dy, SkScalar dz) const; |
| |
| private: |
| struct Rec { |
| Rec* fNext; |
| SkM44 fMatrix; |
| }; |
| Rec* fRec; |
| Rec fInitialRec; |
| SkCamera3D fCamera; |
| }; |
| |
| #endif |