[ODE] Collision Trimesh-Box
Jon Watte (ODE)
hplus-ode at mindcontrol.org
Tue Aug 14 10:42:48 MST 2007
Well, feel free to supply a patch to make it better!
As you know, optimize for the common case, make the uncommon case correct...
Cheers,
/ h+
Oleh Derevenko wrote:
> I do not need to simulate physics. I implement collision checking for 3-D
> object space. So the only thing I need to know is if there is any collision
> or not. And for that, it's sufficient for me to have only one contact point
> or even not to have any at all - I just need to test for the fact of
> collision.
>
> Oleh Derevenko
> ----- Original Message -----
> From: "Jon Watte (ODE)"
> Subject: Re: [ODE] Collision Trimesh-Box
>
>
>
>> For trimeshes, you almost always want at least 10 contacts, preferrably
>> more. Asking for a single contact with a trimesh is a special case that
>> don't necessarily need to be tested for.
>>
>> Also, in the case you only want one (ray-trimesh with "closest" contact),
>> you still need to check all the contacts to find the closest one.
>>
>> So, can you optimize for the case where the user asks for fewer contacts
>> than he really needs to see? Yes, you can, but that's kind-of like
>> optimizing for a file-not-found error.
>>
>> Cheers,
>>
>> / h+
>>
>>
>> Oleh Derevenko wrote:
>>
>>> Hi
>>>
>>>
>>>
>>>>> What happens if you reverse the winding of all the faces?
>>>>>
>>>>>
>>>> No. That does not help.
>>>>
>>>>
>>> So, the reason was quite simple. Having believed the comment for
>>> dCollide,
>>> -----------------------------
>>> * @param flags The flags specify how contacts should be generated if
>>> * the geoms touch. The lower 16 bits of flags is an integer that
>>> * specifies the maximum number of contact points to generate. Note
>>> * that if this number is zero, this function just pretends that it is
>>> * one -- in other words you can not ask for zero contacts. All other
>>> bits
>>> * in flags must be zero. In the future the other bits may be used to
>>> * select from different contact generation strategies.
>>> -----------------------------
>>> which says that is flags is zero the function pretends it is one, I had
>>> made a mistake because this is a complete bullshit and there is no
>>> special processing of zero-value in the code. If flags is zero the
>>> function always returns zero contacts.
>>>
>>> Also, in GenerateContact() of collision_trimesh_box.cpp there is a cycle
>>> for (int i=0; i<OutTriCount; i++)
>>> which checks for matches with normals already generated. Why does not it
>>> bail out after the match has been found and continues checking all the
>>> rest contacts? Is not it one of the first optimization principles every
>>> student starting to write programs should know?
>>>
>>> Or the same thing in dCollideBTL() of collision_trimesh_box.cpp. If all
>>> the available contact return slots are already assigned, why the function
>>> continues executing cycle
>>> for (int i = 0; i < TriCount; i++){
>>> checking triangles and calculating intersections just to see every next
>>> time that there is no more room left to store result and just to ignore
>>> that result after all?
>>>
>>> It's really sad to see code like that. :(
>>>
>>> Oleh Derevenko
>>>
>>>
>>> _______________________________________________
>>> ODE mailing list
>>> ODE at ode.org
>>> http://ode.org/mailman/listinfo/ode
>>>
>>>
>>>
>>>
>>
>> --
>> No virus found in this incoming message.
>> Checked by AVG Free Edition. Version: 7.5.476 / Virus Database:
>> 269.11.15/949 - Release Date: 12.08.2007 11:03
>>
>>
>>
>
>
> _______________________________________________
> ODE mailing list
> ODE at ode.org
> http://ode.org/mailman/listinfo/ode
>
>
>
More information about the ODE
mailing list