void jfVector3_x86::crossProduct(const jfVector3& vec, jfVector3* result) const { jfVector3_x86 tempResult; tempResult.setX((m_Y*vec.getZ()) - (m_Z*vec.getY())); tempResult.setY((m_Z*vec.getX()) - (m_X*vec.getZ())); tempResult.setZ((m_X*vec.getY()) - (m_Y*vec.getX())); (*result) = tempResult; }
void jfRigidBody_x86::calculateTransformMatrix(jfMatrix4* transformMatrix, const jfVector3& pos, const jfQuaternion& orientation) const { //@ref: Millington p.195 transformMatrix->setElem(0, (1 - (2*orientation.getJ()*orientation.getJ()) - (2*orientation.getK()*orientation.getK()))); transformMatrix->setElem(1, ((2*orientation.getI()*orientation.getJ()) - (2*orientation.getR()*orientation.getK()))); transformMatrix->setElem(2, ((2*orientation.getI()*orientation.getK()) + (2*orientation.getR()*orientation.getJ()))); transformMatrix->setElem(3, pos.getX()); transformMatrix->setElem(4,((2*orientation.getI()*orientation.getJ()) + (2*orientation.getR()*orientation.getK()))); transformMatrix->setElem(5, ((1 - (2*orientation.getI()*orientation.getI())) - (2*orientation.getK()*orientation.getK()))); transformMatrix->setElem(6, ((2*orientation.getJ()*orientation.getK()) - (2*orientation.getR()*orientation.getI()))); transformMatrix->setElem(7, pos.getY()); transformMatrix->setElem(8, ((2*orientation.getI()*orientation.getK()) - (2*orientation.getR()*orientation.getJ()))); transformMatrix->setElem(9, ((2*orientation.getJ()*orientation.getK()) + (2*orientation.getR()*orientation.getI()))); transformMatrix->setElem(10, (1 - (2*orientation.getI()*orientation.getI()) - (2*orientation.getJ()*orientation.getJ()))); transformMatrix->setElem(11, pos.getZ()); }
void jfVector3_x86::addScaledVector(const jfVector3& v, jfReal scale) { m_X += (v.getX() * scale); m_Y += (v.getY() * scale); m_Z += (v.getZ() * scale); }
void jfVector3_x86::operator-=(const jfVector3& v) { m_X -= v.getX(); m_Y -= v.getY(); m_Z -= v.getZ(); }
void jfVector3_x86::operator+=(const jfVector3& v) { m_X += v.getX(); m_Y += v.getY(); m_Z += v.getZ(); }
void jfVector3_x86::componentProduct(const jfVector3& vec, jfVector3* result) const { result->setX(m_X * vec.getX()); result->setY(m_Y * vec.getY()); result->setZ(m_Z * vec.getZ()); }
void jfVector3_x86::subtract(const jfVector3& vec, jfVector3* result) const { result->setX(m_X - vec.getX()); result->setY(m_Y - vec.getY()); result->setZ(m_Z - vec.getZ()); }
void jfVector3_x86::add(const jfVector3& vec, jfVector3* result) const { result->setX(m_X + vec.getX()); result->setY(m_Y + vec.getY()); result->setZ(m_Z + vec.getZ()); }
jfReal jfVector3_x86::dotProduct(const jfVector3& v) const { return ( (v.getX()*m_X) + (v.getY()*m_Y) + (v.getZ()*m_Z) ); }
void jfVector3_x86::componentProductUpdate(const jfVector3& v) { m_X *= v.getX(); m_Y *= v.getY(); m_Z *= v.getZ(); }