[PATCH v2] d3dx9: Simplify math in D3DXSphereBoundProbe
Matteo Bruni
matteo.mystral at gmail.com
Thu Jul 9 04:54:32 CDT 2020
On Thu, Jul 9, 2020 at 11:17 AM A <abdaandroid at gmail.com> wrote:
>
>
> On 08/07/2020 10:31, Alex Henrie wrote:
> > Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
> > ---
> > v2: Calculating b isn't actually necessary at all.
> > ---
> > dlls/d3dx9_36/mesh.c | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
> > index 5e0bb98efc..381d19a2ee 100644
> > --- a/dlls/d3dx9_36/mesh.c
> > +++ b/dlls/d3dx9_36/mesh.c
> > @@ -2413,16 +2413,13 @@ BOOL WINAPI D3DXSphereBoundProbe(const D3DXVECTOR3 *pcenter, float radius,
> > const D3DXVECTOR3 *prayposition, const D3DXVECTOR3 *praydirection)
> > {
> > D3DXVECTOR3 difference;
> > - FLOAT a, b, c, d;
> > + FLOAT a, c;
> >
> > a = D3DXVec3LengthSq(praydirection);
> > if (!D3DXVec3Subtract(&difference, prayposition, pcenter)) return FALSE;
> > - b = D3DXVec3Dot(&difference, praydirection);
> > c = D3DXVec3LengthSq(&difference) - radius * radius;
> > - d = b * b - a * c;
> >
> > - if ( ( d <= 0.0f ) || ( sqrt(d) <= b ) ) return FALSE;
> > - return TRUE;
> > + return ( a * c < 0 );
> > }
> >
> > /*************************************************************************
>
> It doesn't make much sense to me. You're ignoring the direction of the
> ray. From what I could tell, it seems like you rearranged the right hand
> side of the "or" operator in the existing code, while ignoring the left
> hand side.
>
> Regards,
>
> Ariel
True. I'm not sure that the original code made much sense either (e.g.
not normalizing the ray direction vector seems suspicious)... I'm
going to have a proper look at this.
More information about the wine-devel
mailing list