feat: complete 2D/3D pick, overlap, and collision query APIs (#11)

Add Math geometry tests for 2D/3D picking and overlaps, Physics
rayCast/queryAABB/testPoint, and Camera2D/3D screen pick helpers,
with script bindings, docs, and unit tests.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This commit is contained in:
西风逍遥游andCursor Agent authored and GitHub committed 2026-08-10 07:42:09 +08:00
1 parent de49f9d2f1
commit d603219164
23 files changed
+773 -42

No files matched your search

+21
View File
@@ -369,3 +369,24 @@ TEST_CASE("Camera.panAndZoomAffectOffscreenPixels") {
cam->data()->active = false;
win->close();
}
TEST_CASE("Camera2D.screenWorldPick") {
auto *cam = Camera2D::createCamera();
cam->setPosition(100.f, 50.f);
cam->setZoom(2.f);
CHECK(std::fabs(cam->getX() - 100.f) < 1e-5f);
CHECK(std::fabs(cam->getZoom() - 2.f) < 1e-5f);
const float viewW = 200.f, viewH = 100.f;
// Screen center maps to camera look-at.
CHECK(std::fabs(cam->screenToWorldX(100.f, 50.f, viewW, viewH) - 100.f) < 1e-4f);
CHECK(std::fabs(cam->screenToWorldY(100.f, 50.f, viewW, viewH) - 50.f) < 1e-4f);
float sx = cam->worldToScreenX(100.f, 50.f, viewW, viewH);
float sy = cam->worldToScreenY(100.f, 50.f, viewW, viewH);
CHECK(std::fabs(sx - 100.f) < 1e-4f);
CHECK(std::fabs(sy - 50.f) < 1e-4f);
float wx = cam->screenToWorldX(120.f, 50.f, viewW, viewH);
CHECK(std::fabs(wx - 110.f) < 1e-4f); // (120-100)/2 + 100
}