summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmiao <miao.zhao@mapbox.com>2019-11-13 14:10:29 +0200
committerzmiao <miao.zhao@mapbox.com>2019-11-13 14:10:29 +0200
commit3274780dda19ec953617f75c2cf4e2a402ceee45 (patch)
treee26a9c5f155ac3736751a7dd110d535657335c65
parentcb9c2e817544522b3c678dd9c9c5b44c45aa4e55 (diff)
downloadqtlocation-mapboxgl-upstream/zmiao-batch-convention-latLng/srcreenCoord.tar.gz
-rw-r--r--src/mbgl/map/transform.cpp7
-rw-r--r--src/mbgl/map/transform_state.cpp36
-rw-r--r--src/mbgl/map/transform_state.hpp6
3 files changed, 30 insertions, 19 deletions
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 511c222417..ce0a932a34 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -57,6 +57,7 @@ void Transform::resize(const Size size) {
state.setSize(size);
state.constrain();
+ state.updateMatrix();
observer.onCameraDidChange(MapObserver::CameraChangeMode::Immediate);
}
@@ -157,6 +158,7 @@ void Transform::easeTo(const CameraOptions& camera, const AnimationOptions& anim
state.setPitch(std::min(maxPitch, util::interpolate(startPitch, pitch, t)));
}
}, duration);
+ state.updateMatrix();
}
/** This method implements an “optimal path” animation, as detailed in:
@@ -330,6 +332,8 @@ void Transform::flyTo(const CameraOptions &camera, const AnimationOptions &anima
state.setPitch(std::min(maxPitch, util::interpolate(startPitch, pitch, k)));
}
}, duration);
+ state.updateMatrix();
+
}
#pragma mark - Position
@@ -405,6 +409,7 @@ double Transform::getPitch() const {
void Transform::setNorthOrientation(NorthOrientation orientation) {
state.setNorthOrientation( orientation);
state.constrain();
+ state.updateMatrix();
}
NorthOrientation Transform::getNorthOrientation() const {
@@ -416,6 +421,7 @@ NorthOrientation Transform::getNorthOrientation() const {
void Transform::setConstrainMode(mbgl::ConstrainMode mode) {
state.setConstrainMode(mode);
state.constrain();
+ state.updateMatrix();
}
ConstrainMode Transform::getConstrainMode() const {
@@ -438,6 +444,7 @@ void Transform::setProjectionMode(const ProjectionMode& options) {
state.setAxonometric(options.axonometric.value_or(state.getAxonometric()));
state.setXSkew(options.xSkew.value_or(state.getXSkew()));
state.setYSkew(options.ySkew.value_or(state.getYSkew()));
+ state.updateMatrix();
}
ProjectionMode Transform::getProjectionMode() const {
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp
index 7123253075..42e248bdc9 100644
--- a/src/mbgl/map/transform_state.cpp
+++ b/src/mbgl/map/transform_state.cpp
@@ -108,15 +108,17 @@ void TransformState::getProjMatrix(mat4& projMatrix, uint16_t nearZ, bool aligne
}
}
+void TransformState::updateMatrix() {
+ coordiMatrix = coordinatePointMatrix();
+ mat4 mat = coordiMatrix;
+
+ bool err = matrix::invert(invertedMatrix, mat);
+
+ if (err) throw std::runtime_error("failed to invert coordinatePointMatrix");
+}
+
void TransformState::setSize(const Size& size_) {
size = size_;
-// coordiMatrix = coordinatePointMatrix();
-// mat4 mat = coordiMatrix;
-//
-// bool err = matrix::invert(invertedMatrix, mat);
-//
-// if (err) throw std::runtime_error("failed to invert coordinatePointMatrix");
-
}
#pragma mark - Dimensions
@@ -292,11 +294,11 @@ ScreenCoordinate TransformState::latLngToScreenCoordinate(const LatLng& latLng)
return {};
}
- mat4 mat = coordinatePointMatrix();
+ // mat4 mat = coordinatePointMatrix();
vec4 p;
Point<double> pt = Projection::project(latLng, scale) / util::tileSize;
vec4 c = {{ pt.x, pt.y, 0, 1 }};
- matrix::transformMat4(p, c, mat);
+ matrix::transformMat4(p, c, coordiMatrix);
return { p[0] / p[3], size.height - p[1] / p[3] };
}
@@ -306,12 +308,12 @@ TileCoordinate TransformState::screenCoordinateToTileCoordinate(const ScreenCoor
}
float targetZ = 0;
- mat4 mat = coordinatePointMatrix();
+ // mat4 mat = coordinatePointMatrix();
- mat4 inverted;
- bool err = matrix::invert(inverted, mat);
+ // mat4 inverted;
+ // bool err = matrix::invert(inverted, mat);
- if (err) throw std::runtime_error("failed to invert coordinatePointMatrix");
+ // if (err) throw std::runtime_error("failed to invert coordinatePointMatrix");
double flippedY = size.height - point.y;
@@ -323,8 +325,8 @@ TileCoordinate TransformState::screenCoordinateToTileCoordinate(const ScreenCoor
vec4 coord1;
vec4 point0 = {{ point.x, flippedY, 0, 1 }};
vec4 point1 = {{ point.x, flippedY, 1, 1 }};
- matrix::transformMat4(coord0, point0, inverted);
- matrix::transformMat4(coord1, point1, inverted);
+ matrix::transformMat4(coord0, point0, invertedMatrix);
+ matrix::transformMat4(coord1, point1, invertedMatrix);
double w0 = coord0[3];
double w1 = coord1[3];
@@ -449,11 +451,11 @@ float TransformState::maxPitchScaleFactor() const {
return {};
}
auto latLng = screenCoordinateToLatLng({ 0, static_cast<float>(getSize().height) });
- mat4 mat = coordinatePointMatrix();
+ // mat4 mat = coordinatePointMatrix();
Point<double> pt = Projection::project(latLng, scale) / util::tileSize;
vec4 p = {{ pt.x, pt.y, 0, 1 }};
vec4 topPoint;
- matrix::transformMat4(topPoint, p, mat);
+ matrix::transformMat4(topPoint, p, coordiMatrix);
return topPoint[3] / getCameraToCenterDistance();
}
diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp
index 621a810a5f..165e4fcec6 100644
--- a/src/mbgl/map/transform_state.hpp
+++ b/src/mbgl/map/transform_state.hpp
@@ -119,6 +119,8 @@ public:
void moveLatLng(const LatLng&, const ScreenCoordinate&);
void setLatLngZoom(const LatLng &latLng, double zoom);
+
+ void updateMatrix();
private:
bool rotatedNorth() const;
void constrain(double& scale, double& x, double& y) const;
@@ -176,8 +178,8 @@ private:
double Bc = Projection::worldSize(scale) / util::DEGREES_MAX;
double Cc = Projection::worldSize(scale) / util::M2PI;
- // mat4 coordiMatrix;
- // mat4 invertedMatrix;
+ mat4 coordiMatrix;
+ mat4 invertedMatrix;
};
} // namespace mbgl