Euan Kirkhope wrote :
Ok! To clear things up, a quaternion is a math object that represents a 3d rotation with 4 floats, here is what i need for glteapot, i was just lazy and took an existing implementation :-DIf it's just the relevant source files cherry piced and compiled in to the exe, I'm all for it. :) I'd prefer not to have a whole physics lib added to the source just for a teapot and a couple of potential future games. R5 is renowned for being compact and minimalist in terms of libs etc. I think it would be overkill. Nice tea pot though.
Quaternion(const Vector3& axis, const float& angle) { setRotation(axis, angle); } void Quaternion::setRotation(const Vector3& axis, const float& angle) { float d = axis.length(); assert(d != float(0.0)); float s = sin(angle * float(0.5)) / d; setValue(axis.x() * s, axis.y() * s, axis.z() * s, cos(angle * float(0.5))); } Quaternion& operator*=(const Quaternion& q) { setValue(m_w * q.x() + m_x * q.m__w + m_y * q.z() - m_z * q.y(), m_w * q.y() + m_y * q.m_w + m_z * q.x() - m_x * q.z(), m_w * q.z() + m_z * q.m_w + m_x * q.y() - m_y * q.x(), m_w * q.m_w - m_x * q.x() - m_y * q.y() - m_z * q.z()); return *this; } //This one is not from bullet, found it on the web void Quaternion::toOpenGLMatrix(float m[4][4]){float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; // calculate coefficients
x2 = m_x + m_x; y2 = m_y + m_y; z2 = m_z + m_z; xx = m_x * x2; xy = m_x * y2; xz = m_x * z2; yy = m_y * y2; yz = m_y * z2; zz = m_z * z2; wx = m_w * x2; wy = m_w * y2; wz = m_w * z2;m[0][0] = 1.0 - (yy + zz); m[1][0] = xy - wz;
m[2][0] = xz + wy; m[3][0] = 0.0;m[0][1] = xy + wz; m[1][1] = 1.0 - (xx + zz);
m[2][1] = yz - wx; m[3][1] = 0.0;m[0][2] = xz - wy; m[1][2] = yz + wx;
m[2][2] = 1.0 - (xx + yy); m[3][2] = 0.0;m[0][3] = 0; m[1][3] = 0;
m[2][3] = 0; m[3][3] = 1;}
That's all the big deal :)
It could have its use in a 3d interface, or a 3rd party app, just the problem of picking an object with a mouse needs 3d ray-object collision. I can imagine other non-game uses too. But like you, i'm not sure if it has to be included in an os or not, it's debatable i think!I don't really think a physics engine is appropriate for an operating system. I personally wouldn't even want one part of the standard build if it was included.
Sure it was just a thought, we don't want to Be-ify everything, or bloat the sources :-) Having a nice modern bumpy demo to attract the eye on booths with the Haiku brand could be worth it though! Like you said, Haiku is compact and minimalist, but it has to be fun and exciting too :-) The application source folder would contain a copy of the lib's sources, just like we do when needed (ex: translators, codecs, new layout), and keep in mind that bullet source size is really reasonable (200 files, 1MB), the size argument isn't really fair imho.It's certainly a really nice download for people to pull from bebits / haikuware though, or be packaged in a distro.
Regards, Alex