[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