[ODE] dCollideRTL issue: improper usage?
Chris Ledwith
cledwith at d-a-s.com
Wed Aug 20 14:05:02 2003
This is a multi-part message in MIME format.
------=_NextPart_000_0013_01C3673D.60DA96B0
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Hello,
My collisions are reported back at incorrect coordinates. For example,
if an object in my space is at 1200, 30, 500, and I fire a ray at it,
the collision point comes back as 2400, 60, 1000 (or rather, in the
neighborhood of this). In other words there is a doubling of
coordinates, as if a point was translated from object space to world
space, and then again to world space. I've narrowed the problem down to
these lines in dCollideRTL:
const dVector3& TLPosition = *(const
dVector3*)dGeomGetPosition(TriMesh);
const dMatrix3& TLRotation = *(const
dMatrix3*)dGeomGetRotation(TriMesh);
.
dVector3 dv[3];
FetchTriangle(TriMesh, TriIndex, TLPosition, TLRotation,
dv);
dVector3 Temp;
GetPointFromBarycentric(dv, Faces[i].mU, Faces[i].mV, Temp);
dMULTIPLY0_331(Contact->pos, TLRotation, Temp);
Contact->pos[0] += TLPosition[0];
Contact->pos[1] += TLPosition[1];
Contact->pos[2] += TLPosition[2];
Contact->pos[3] = REAL(0.0);
FetchTriangle fills in dv with the world coordinates of the three
vertices of the intersected triangle, because it is passed the position
and rotation (in TLPosition, TLRotation, respectively) of the
intersected geom. Then the exact point of contact on the triangle is
transformed to world coordinates and placed in Temp. The problem then
arises when Temp is transformed again before filling in Contact->pos
(the last block of code, above). This results in the doubling of the
world coordinates.
When I replace the last block of code with:
Contact->pos[0] = Temp[0];
Contact->pos[1] = Temp[1];
Contact->pos[2] = Temp[2];
Contact->pos[3] = REAL(0.0);
Collisions then work correctly in my application
Please, does anyone know the proper solution?
Thanks,
Chris Ledwith
------=_NextPart_000_0013_01C3673D.60DA96B0
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 10 (filtered)">
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
span.EmailStyle17
{font-family:Arial;
color:windowtext;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=3DEN-US link=3Dblue vlink=3Dpurple>
<div class=3DSection1>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Hello,</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>My collisions are reported back at incorrect =
coordinates.
For example, if an object in my space is at 1200, 30, 500, and I fire a =
ray at
it, the collision point comes back as 2400, 60, 1000 (or rather, in the
neighborhood of this). In other words there is a doubling of =
coordinates, as if
a point was translated from object space to world space, and then again =
to
world space. I’ve narrowed the problem down to these lines in =
dCollideRTL:</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
const
dVector3& TLPosition =3D *(const =
dVector3*)dGeomGetPosition(TriMesh);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
const
dMatrix3& TLRotation =3D *(const =
dMatrix3*)dGeomGetRotation(TriMesh);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>…</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal style=3D'text-indent:.5in'><font size=3D2 =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'>dVector3 =
dv[3];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
FetchTriangle(TriMesh,
TriIndex, TLPosition, TLRotation, dv);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
dVector3
Temp;</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
GetPointFromBarycentric(dv,
Faces[i].mU, Faces[i].mV, Temp);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
dMULTIPLY0_331(Contact->pos,
TLRotation, Temp);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[0]
+=3D TLPosition[0];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[1]
+=3D TLPosition[1];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[2]
+=3D TLPosition[2];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[3]
=3D REAL(0.0);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>FetchTriangle fills in dv with the world coordinates =
of the
three vertices of the intersected triangle, because it is passed the =
position
and rotation (in TLPosition, TLRotation, respectively) of the =
intersected geom.
Then the exact point of contact on the triangle is transformed to world
coordinates and placed in Temp. The problem then arises when Temp is
transformed again before filling in Contact->pos (the last block of =
code,
above). This results in the doubling of the world =
coordinates.</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>When I replace the last block of code =
with:</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[0]
=3D Temp[0];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[1]
=3D Temp[1];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[2]
=3D Temp[2];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
Contact->pos[3]
=3D REAL(0.0);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Collisions then work correctly in my =
application</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Please, does anyone know the proper =
solution?</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Thanks,</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Chris Ledwith</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
</div>
</body>
</html>
------=_NextPart_000_0013_01C3673D.60DA96B0--