[Scummvm-git-logs] scummvm master -> ae2447d0c0ba9332b49df07958ddb1373d246317
aquadran
noreply at scummvm.org
Thu Oct 17 11:55:10 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
ae2447d0c0 WINTERMUTE: Get rid rayIntoScene from renderer
Commit: ae2447d0c0ba9332b49df07958ddb1373d246317
https://github.com/scummvm/scummvm/commit/ae2447d0c0ba9332b49df07958ddb1373d246317
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T13:55:04+02:00
Commit Message:
WINTERMUTE: Get rid rayIntoScene from renderer
Changed paths:
engines/wintermute/base/gfx/base_renderer3d.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/xmodel.cpp
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 96a8f3d5c17..32c558d586e 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -99,20 +99,6 @@ void BaseRenderer3D::project(const Math::Matrix4 &worldMatrix, const Math::Vecto
y = viewport[3] - windowCoords.y();
}
-Math::Ray BaseRenderer3D::rayIntoScene(int x, int y) {
- Math::Vector3d direction((((2.0f * x) / _viewportRect.width()) - 1) / _projectionMatrix(0, 0),
- -(((2.0f * y) / _viewportRect.height()) - 1) / _projectionMatrix(1, 1),
- -1.0f);
-
- Math::Matrix4 m = _viewMatrix;
- m.inverse();
- m.transpose();
- m.transform(&direction, false);
-
- Math::Vector3d origin = m.getPosition();
- return Math::Ray(origin, direction);
-}
-
bool BaseRenderer3D::setAmbientLightColor(uint32 color) {
_ambientLightColor = color;
_ambientLightOverride = true;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 185b4e8ffa8..11ea32b801e 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -146,7 +146,6 @@ public:
}
void project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y);
- Math::Ray rayIntoScene(int x, int y);
Camera3D *_camera;
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index f8991ca15b4..55a8e328549 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -479,8 +479,8 @@ bool XModel::render() {
// remember matrices for object picking purposes
_gameRef->_renderer3D->getWorldTransform(_lastWorldMat);
- _gameRef->_renderer3D->getWorldTransform(_lastViewMat);
- _gameRef->_renderer3D->getWorldTransform(_lastProjMat);
+ _gameRef->_renderer3D->getViewTransform(_lastViewMat);
+ _gameRef->_renderer3D->getProjectionTransform(_lastProjMat);
// remember scene offset
Rect32 rc;
@@ -562,15 +562,25 @@ bool XModel::isTransparentAt(int x, int y) {
y += _gameRef->_renderer3D->_drawOffsetY;
}
- Math::Ray ray = _gameRef->_renderer3D->rayIntoScene(x, y);
Math::Vector3d pickRayDir;
Math::Vector3d pickRayOrig;
- pickRayDir = ray.getDirection();
- pickRayOrig = ray.getOrigin();
+
+ // Compute the vector of the pick ray in screen space
+ Math::Vector3d vec((((2.0f * x) / _drawingViewport.width()) - 1) / _lastProjMat(0, 0),
+ -(((2.0f * y) / _drawingViewport.height()) - 1) / _lastProjMat(1, 1),
+ -1.0f);
+
+ Math::Matrix4 m = _lastViewMat;
+ m.inverse();
+ m.transpose();
+ m.transform(&vec, false);
+
+ pickRayDir = vec;
+ pickRayOrig = m.getPosition();
// transform to model space
Math::Vector3d end = pickRayOrig + pickRayDir;
- Math::Matrix4 m = _lastWorldMat;
+ m = _lastWorldMat;
m.inverse();
m.transform(&pickRayOrig, true);
m.transform(&end, true);
More information about the Scummvm-git-logs
mailing list