Skip to content

Commit f3f33cc

Browse files
kalwaltclaude
andcommitted
fix(#55): populate pose3d + rename getPoseMatrix/getPoseMatrix2
getPoseMatrix() returned a zero matrix: it reads _patternTrackingInfo.pose3d, which the live tracking path never wrote (the pose flows _pose -> transMat -> trans; pose3d was touched only by the dead computePose). cameraPoseFromPoints now also builds pose3d (the raw 4x4 OpenCV-convention pose) from the same rMat/tvec, so the CV getter reflects the current frame. Rename the two pose getters so the distinction is explicit (they differ in both convention and shape, which the "2" suffix hid): getPoseMatrix -> getPoseMatrixCV (raw OpenCV 4x4 pose) getPoseMatrix2 -> getPoseMatrixGL (right-handed / GL-corrected pose, trans) Hard rename across WebARKitManager + WebARKitTracker (decls, inner impl, outer wrapper). The matching emscripten bindings / controller live in webarkit-testing. Verified: static (1920x1440) and webcam (640x480) examples both track (1000 matches); getPoseMatrixCV() now returns a valid [R|t;0001] (was all zeros). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 28ff065 commit f3f33cc

5 files changed

Lines changed: 28 additions & 13 deletions

File tree

WebARKit/WebARKitManager.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ std::vector<double> WebARKitManager::getOutputData() {
9797
return m_tracker->getOutputData();
9898
};
9999

100-
cv::Mat WebARKitManager::getPoseMatrix() {
101-
return m_tracker->getPoseMatrix();
100+
cv::Mat WebARKitManager::getPoseMatrixCV() {
101+
return m_tracker->getPoseMatrixCV();
102102
}
103103

104-
float* WebARKitManager::getPoseMatrix2() {
105-
return m_tracker->getPoseMatrix2();
104+
float* WebARKitManager::getPoseMatrixGL() {
105+
return m_tracker->getPoseMatrixGL();
106106
}
107107

108108
cv::Mat WebARKitManager::getGLViewMatrix() {
@@ -111,7 +111,7 @@ cv::Mat WebARKitManager::getGLViewMatrix() {
111111

112112
std::array<double, 16> WebARKitManager::getTransformationMatrix() {
113113
std::array<double, 16> transformationMatrix;
114-
webarkit::arglCameraViewRHf((float (*)[4])m_tracker->getPoseMatrix2(), (float*)transformationMatrix.data(), 1.0f);
114+
webarkit::arglCameraViewRHf((float (*)[4])m_tracker->getPoseMatrixGL(), (float*)transformationMatrix.data(), 1.0f);
115115
return transformationMatrix;
116116
}
117117

WebARKit/WebARKitPattern.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ void WebARKitPatternTrackingInfo::cameraPoseFromPoints(cv::Mat& pose, const std:
1919
cv::Mat rMat;
2020
Rodrigues(rvec, rMat);
2121
cv::hconcat(rMat, tvec, pose);
22+
23+
// WebARKitLib#55: also populate pose3d -- the raw 4x4 OpenCV-convention camera
24+
// pose returned by getPoseMatrixCV(). The live path previously left pose3d at its
25+
// zero-initialised value (only the now-dead computePose wrote it), so
26+
// getPoseMatrixCV() returned an all-zero matrix. Build it here from the same
27+
// rMat/tvec the GL path uses, so the CV and GL getters both reflect the current
28+
// frame. No handedness/scale correction is applied (that is getPoseMatrixGL's
29+
// trans); pose3d stays in raw OpenCV convention.
30+
for (int row = 0; row < 3; ++row) {
31+
for (int col = 0; col < 3; ++col) {
32+
pose3d.at<double>(row, col) = rMat.at<double>(row, col);
33+
}
34+
pose3d.at<double>(row, 3) = tvec.at<double>(row, 0);
35+
}
36+
pose3d.at<double>(3, 3) = 1.0;
2237
};
2338

2439
void WebARKitPatternTrackingInfo::computePose(std::vector<cv::Point3f>& treeDPoints,

WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,9 @@ class WebARKitTracker::WebARKitTrackerImpl {
190190

191191
std::vector<double> getOutputData() { return output; };
192192

193-
cv::Mat getPoseMatrix() { return _patternTrackingInfo.pose3d; };
193+
cv::Mat getPoseMatrixCV() { return _patternTrackingInfo.pose3d; };
194194

195-
float* getPoseMatrix2() { return (float*)_patternTrackingInfo.trans; }
195+
float* getPoseMatrixGL() { return (float*)_patternTrackingInfo.trans; }
196196

197197
//float[3][4] getPoseMatrix3() { return _patternTrackingInfo.trans; }
198198
//float (*getPoseMatrix3())[3][4] { return &_patternTrackingInfo.trans; }
@@ -892,9 +892,9 @@ void WebARKitTracker::processFrameData(uchar* frameData, size_t frameCols, size_
892892

893893
std::vector<double> WebARKitTracker::getOutputData() { return _trackerImpl->getOutputData(); }
894894

895-
cv::Mat WebARKitTracker::getPoseMatrix() { return _trackerImpl->getPoseMatrix(); }
895+
cv::Mat WebARKitTracker::getPoseMatrixCV() { return _trackerImpl->getPoseMatrixCV(); }
896896

897-
float* WebARKitTracker::getPoseMatrix2() { return _trackerImpl->getPoseMatrix2(); }
897+
float* WebARKitTracker::getPoseMatrixGL() { return _trackerImpl->getPoseMatrixGL(); }
898898

899899
//float[3][4] WebARKitTracker::getPoseMatrix3() { return _trackerImpl->getPoseMatrix3(); }
900900
//float (*WebARKitTracker::getPoseMatrix3())[3][4]) { return &_trackerImpl->getPoseMatrix3(); }

WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ class WebARKitTracker {
3131

3232
std::vector<double> getOutputData();
3333

34-
cv::Mat getPoseMatrix();
34+
cv::Mat getPoseMatrixCV();
3535

36-
float* getPoseMatrix2();
36+
float* getPoseMatrixGL();
3737

3838
//float (*WebARKitTracker::getPoseMatrix3()[3][4]);
3939

WebARKit/include/WebARKitManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ class WebARKitManager {
102102

103103
std::vector<double> getOutputData();
104104

105-
cv::Mat getPoseMatrix();
105+
cv::Mat getPoseMatrixCV();
106106

107-
float* getPoseMatrix2();
107+
float* getPoseMatrixGL();
108108

109109
cv::Mat getGLViewMatrix();
110110

0 commit comments

Comments
 (0)