163 lines · 4.7 KB · C++
RawDownload
////  BulletUtilTests.cpp//  tests/physics/src////  Created by Andrew Meadows on 2014.11.02//  Copyright 2014 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include "BulletUtilTests.h" #include <iostream> #include <BulletUtil.h>#include <NumericalConstants.h>#include <GLMHelpers.h> // Add additional qtest functionality (the include order is important!)#include <test-utils/QTestExtensions.h> // Constantsconst glm::vec3 origin(0.0f);const glm::vec3 xAxis(1.0f, 0.0f, 0.0f);const glm::vec3 yAxis(0.0f, 1.0f, 0.0f);const glm::vec3 zAxis(0.0f, 0.0f, 1.0f);  QTEST_MAIN(BulletUtilTests) void BulletUtilTests::fromBulletToGLM() {    btVector3 bV(1.23f, 4.56f, 7.89f);    glm::vec3 gV = bulletToGLM(bV);        QCOMPARE(gV.x, bV.getX());    QCOMPARE(gV.y, bV.getY());    QCOMPARE(gV.z, bV.getZ());     float angle = 0.317f * PI;    btVector3 axis(1.23f, 2.34f, 3.45f);    axis.normalize();    btQuaternion bQ(axis, angle);     glm::quat gQ = bulletToGLM(bQ);    QCOMPARE(gQ.x, bQ.getX());    QCOMPARE(gQ.y, bQ.getY());    QCOMPARE(gQ.z, bQ.getZ());    QCOMPARE(gQ.w, bQ.getW());     // mat4    btMatrix3x3 basis(bQ);    btVector3 origin(100.0f, 200.0f, 300.0f);    btTransform bM(basis, origin);     glm::mat4 gM = bulletToGLM(bM);     glm::vec3 translation = extractTranslation(gM);    QCOMPARE(translation.x, bM.getOrigin().getX());    QCOMPARE(translation.y, bM.getOrigin().getY());    QCOMPARE(translation.z, bM.getOrigin().getZ());     glm::quat rotation = glmExtractRotation(gM);    QCOMPARE(rotation.x, bM.getRotation().getX());    QCOMPARE(rotation.y, bM.getRotation().getY());    QCOMPARE(rotation.z, bM.getRotation().getZ());    QCOMPARE(rotation.w, bM.getRotation().getW());     // As a sanity check, transform vectors by their corresponding matrices and compare the result.    btVector3 bX = bM * btVector3(1.0f, 0.0f, 0.0f);    btVector3 bY = bM * btVector3(0.0f, 1.0f, 0.0f);    btVector3 bZ = bM * btVector3(0.0f, 0.0f, 1.0f);     glm::vec3 gX = transformPoint(gM, glm::vec3(1.0f, 0.0f, 0.0f));    glm::vec3 gY = transformPoint(gM, glm::vec3(0.0f, 1.0f, 0.0f));    glm::vec3 gZ = transformPoint(gM, glm::vec3(0.0f, 0.0f, 1.0f));     QCOMPARE(gX.x, bX.getX());    QCOMPARE(gX.y, bX.getY());    QCOMPARE(gX.z, bX.getZ());    QCOMPARE(gY.x, bY.getX());    QCOMPARE(gY.y, bY.getY());    QCOMPARE(gY.z, bY.getZ());    QCOMPARE(gZ.x, bZ.getX());    QCOMPARE(gZ.y, bZ.getY());    QCOMPARE(gZ.z, bZ.getZ());} void BulletUtilTests::fromGLMToBullet() {    glm::vec3 gV(1.23f, 4.56f, 7.89f);    btVector3 bV = glmToBullet(gV);     QCOMPARE(gV.x, bV.getX());    QCOMPARE(gV.y, bV.getY());    QCOMPARE(gV.z, bV.getZ());     float angle = 0.317f * PI;    btVector3 axis(1.23f, 2.34f, 3.45f);    axis.normalize();    btQuaternion bQ(axis, angle);     glm::quat gQ = bulletToGLM(bQ);    QCOMPARE(gQ.x, bQ.getX());    QCOMPARE(gQ.y, bQ.getY());    QCOMPARE(gQ.z, bQ.getZ());    QCOMPARE(gQ.w, bQ.getW());     // mat3    glm::mat3 gM3 = glm::mat3_cast(gQ);    btMatrix3x3 bM3 = glmToBullet(gM3);    bM3.getRotation(bQ);    QCOMPARE(gQ.x, bQ.getX());    QCOMPARE(gQ.y, bQ.getY());    QCOMPARE(gQ.z, bQ.getZ());    QCOMPARE(gQ.w, bQ.getW());     // mat4    glm::mat4 gM4 = createMatFromQuatAndPos(gQ, gV);    btTransform bM4 = glmToBullet(gM4);    bQ = bM4.getRotation();    bV = bM4.getOrigin();    QCOMPARE(gQ.x, bQ.getX());    QCOMPARE(gQ.y, bQ.getY());    QCOMPARE(gQ.z, bQ.getZ());    QCOMPARE(gQ.w, bQ.getW());    QCOMPARE(gV.x, bV.getX());    QCOMPARE(gV.y, bV.getY());    QCOMPARE(gV.z, bV.getZ());} void BulletUtilTests::rotateVectorTest() {     float angle = 0.317f * PI;    btVector3 axis(1.23f, 2.34f, 3.45f);    axis.normalize();    btQuaternion q(axis, angle);     btVector3 xAxis(1.0f, 0.0f, 0.0f);     btVector3 result0 = rotateVector(q, xAxis);     btTransform m(q);    btVector3 result1 = m * xAxis;     QCOMPARE(result0.getX(), result0.getX());    QCOMPARE(result0.getY(), result1.getY());    QCOMPARE(result0.getZ(), result1.getZ());} void BulletUtilTests::clampLengthTest() {    btVector3 vec(1.0f, 3.0f, 2.0f);    btVector3 clampedVec1 = clampLength(vec, 1.0f);    btVector3 clampedVec2 = clampLength(vec, 2.0f);    btVector3 normalizedVec = vec.normalized();     QCOMPARE(clampedVec1.getX(), normalizedVec.getX());    QCOMPARE(clampedVec1.getY(), normalizedVec.getY());    QCOMPARE(clampedVec1.getZ(), normalizedVec.getZ());     QCOMPARE(clampedVec2.getX(), normalizedVec.getX() * 2.0f);    QCOMPARE(clampedVec2.getY(), normalizedVec.getY() * 2.0f);    QCOMPARE(clampedVec2.getZ(), normalizedVec.getZ() * 2.0f);}