I will spam the forum now with a few threads, because I think it would be too much if I summarize everything in one.
Third-Person View
Here, I want to target the camera to the head of my character or at least something higher than the feet. If you zoom in, you realize, the bottom of the character is the target of the camera.
With the scaling-function (line 146) I could scale the head with skeleton.bones[4], but I can’t target the head with camera.target = skeleton.bones[4] and I don’t know how to get the camera to focus the head or shoulders.
First-Person View
Of course I want the FreeCamera also on an higher place. If you change the view and look above, you can see the upper part of the character.
I already tried to change that with camera2.ellipsoid = new BABYLON.Vector3(1, 2, 1); after line 125, but this also doesn’t seem to work.
Certainly there are a lot of possibilities, but I see the cameras as being somewhat separate from the player model.
For first person the camera is inside (or at the front) of the head but doesn’t necessarily stick to any of the bones. For me that would make the base mesh its parent so that it moves along with it, but then at a position hardcoded to be at the correct height. Also every frame I would copy the rotation.y between the camera and the mesh so that the camera and the player mesh both face the same direction. If it is a multiplayer game then perhaps the head (just the head!) should also rotate in the x direction so that other players can see people look up and down. In singleplayer I would just totally remove/hide the head while in first person because it would be invisible anyways.
pseudocode
camera.setParent(playerMesh) // or parent = playerMesh, can't rememebr
camera.position.y = 8 // or something
// optionally hide the head
// then every frame...
function fakeUpdateExample() {
playerMesh.rotation.y = camera.rotation.y // or the other way around
head.rotation.x = camera.rotation.x // hypothetical
}
For third person everything is similar except the camera isn’t floated at the head/face and instead is floated on an invisible pole above and behind the player. Similarly to before I perceive this relationship as being the camera parented to the mesh, and then hardcoded to a position that offsets it appropriately. I believe this will cause it to magically (and rigidly) remain behind the player without any custom logic each frame.
That’s just the position of the camera, its rotation on the other hand requires some math. Maybe something like moving the hypothetical first person camera’s position 100 units forward and then calling thirdPersonCamera.lookAt(positionWayInfrontOfHead).
@timetocode
Thank you for your explanations and ideas.
I’m planing to make a FPS, so it is supposed to be a multiplayer game.
You have a good point with moving the head with the camera, I didn’t think of that.
Apparently I can’t rotate a bone on its own.
I tried:
botHead = skeleton.bones[4]
botHead.rotation.x = -2; // the same with x/z and other numbers
But at least the whole mesh looks in the direction of the mouse now (still two dimensional)
Even in first person.