Yeah it's pretty stale, but then bullet 2 hasn't really moved on much in that time
There's a lot of stuff in the port for pooling frequent objects and an attempt to pass by structs's by reference where possible which helps a lot in terms of memory usage and general performance. It should work under mono as well (you may need to remove the #define XNA which is there to provide compatability between the XNA Vector3,Matrix,etc classes and the local Indexed versions of those). Anyway it would be interesting to see another port if you have the code hosted somewhere.
While porting this I found this...
-
- Posts: 225
- Joined: Wed Jan 07, 2009 11:43 am
- Location: London
-
- Posts: 51
- Joined: Tue Dec 11, 2012 9:59 pm
Re: While porting this I found this...
I made too many find and replace errors on a global scale.
I feel I need to restart given what I know now about what it needs.
Made some errors in conversion where vector*matrix was assumed to be the same as matrix*vector and I can't find them now.
Was trying to stick to the original names; bullet XNA renames everything...
or give up and use XNA...
Hard to validate the conversion too...
could wish for a more mechanical conversion... but sorting out things like classes declared in methods would be difficult
I dunno so close... yet so far... was a long way into converting Dbvh and ended up swiping the one from XNA; which I learned about the global pools... probably a good thing to have.
I feel I need to restart given what I know now about what it needs.
Made some errors in conversion where vector*matrix was assumed to be the same as matrix*vector and I can't find them now.
Was trying to stick to the original names; bullet XNA renames everything...
or give up and use XNA...
Hard to validate the conversion too...
could wish for a more mechanical conversion... but sorting out things like classes declared in methods would be difficult
I dunno so close... yet so far... was a long way into converting Dbvh and ended up swiping the one from XNA; which I learned about the global pools... probably a good thing to have.
-
- Posts: 225
- Joined: Wed Jan 07, 2009 11:43 am
- Location: London
Re: While porting this I found this...
Definitely. I ran it a lot with the JetBrains tools and the early versions generated a lot of garbage which the pools helped almost completely eradicate. Some of the common vector functions (dot,cross and so on) also are 'unrolled' to avoid some extra function calls.
The biggest thing that I wished I'd done at the beginning would have been coming up with the Indexed (Vector ,Matrix,BasisMatrix) classes first as they make the code conversion from cpp so much easier. Lots of little bugs because I switched vector * matrix to matrix* vector over and they took a _long_ time to track down.
If you want some help removing any XNA hangovers from it, or have some good mono optimisations give me a shout.
The biggest thing that I wished I'd done at the beginning would have been coming up with the Indexed (Vector ,Matrix,BasisMatrix) classes first as they make the code conversion from cpp so much easier. Lots of little bugs because I switched vector * matrix to matrix* vector over and they took a _long_ time to track down.
If you want some help removing any XNA hangovers from it, or have some good mono optimisations give me a shout.
-
- Site Admin
- Posts: 4221
- Joined: Sun Jun 26, 2005 6:43 pm
- Location: California, USA
Re: While porting this I found this...
Yes, this is my sloppy from my side. There are also not enough unit tests there should be more documentation etc.1e30 instead of BT_LARGE_FLOAT
I hope to find some time to sort it out in a future revision (Bullet 4.x).
-
- Posts: 51
- Joined: Tue Dec 11, 2012 9:59 pm
Re: While porting this I found this...
in btHingeConstraint.cpp
m_useOffsetForConstraintFrame is typically set to true which is used in things like...
but then there's
which still calls getInfo2Internal (without frame offset) and doesn't switch on obsolete.
------------
Comment error in btMatrix3x3
shouldn't this be
which I actually found because the same routine is basically in Generic6DofConstraint as matrixToEulerXYZ which fills in a btVector3
m_useOffsetForConstraintFrame is typically set to true which is used in things like...
Code: Select all
void btHingeConstraint::getInfo2 (btConstraintInfo2* info)
{
if(m_useOffsetForConstraintFrame)
{
getInfo2InternalUsingFrameOffset(info, m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform(),m_rbA.getAngularVelocity(),m_rbB.getAngularVelocity());
}
else
{
getInfo2Internal(info, m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform(),m_rbA.getAngularVelocity(),m_rbB.getAngularVelocity());
}
}
Code: Select all
void btHingeConstraint::getInfo2NonVirtual (btConstraintInfo2* info,const btTransform& transA,const btTransform& transB,const btVector3& angVelA,const btVector3& angVelB)
{
///the regular (virtual) implementation getInfo2 already performs 'testLimit' during getInfo1, so we need to do it now
testLimit(transA,transB);
getInfo2Internal(info,transA,transB,angVelA,angVelB);
}
------------
Comment error in btMatrix3x3
Code: Select all
/*@brief Get the matrix represented as euler angles around ZYX
@param yaw Yaw around X axis
@param pitch Pitch around Y axis
@param roll around X axis
@param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/
public void getEulerZYX( out double yaw, out double pitch, out double roll, int solution_number = 1 )
Code: Select all
@param yaw Yaw around Y axis
@param pitch Pitch around X axis
@param roll around Z axis