Thanks for the tip, although I'm not entirely sure how I'd do what you suggested.

I currently have this on each click:

**Code:**

// This should be the bullet's world-coordinates, right now it just draws infront of the player

bulletPositions[shots] = glm::vec3(getPosition().x+0.3, getPosition().y, getPosition().z-2);

// This should be the bullet's world-rotation, right now it just takes the camera's angles with an offset

bulletRotations[shots] = glm::normalize(glm::quat(glm::vec3(1.5708-getVertical(), 0.03054326+getHorizontal(), 0)));

btDefaultMotionState* bulletMotionstate = new btDefaultMotionState(btTransform(

btQuaternion(bulletRotations[shots].x, bulletRotations[shots].y, bulletRotations[shots].z, bulletRotations[shots].w),

btVector3(bulletPositions[shots].x, bulletPositions[shots].y, bulletPositions[shots].z)

));

btRigidBody::btRigidBodyConstructionInfo bulletRigidBodyCI(bulletMass, bulletMotionstate, bulletCollisionShape, bulletInertia);

bulletRigidBody = new btRigidBody(bulletRigidBodyCI);

bulletCount--;

shots++;

How can I get a rotation quaternion from the view matrix, a forward vector, where would I add the offset etc.? I'm currently doing just this:

**Code:**

mat4 inverseViewMatrix = inverse(ViewMatrix);

vec3 cameraPos(inverseViewMatrix[3]);

glm::quat ViewRotation = (glm::quat)ViewMatrix;

//glm::vec3 forward = (glm::vec3)(0, 0, 1); Tried this

glm::vec3 normal = normalize(ViewRotation * cameraPos);

std::cout << glm::to_string(normal) << std::endl;

I'm getting values roughly in the range of -1 to 1 for each axis in the print-out, is that correct? I'd still be unsure about where to use the normal exactly though, as I'm not too familiar with Bullet at this stage, so example code would really help. Thanks.