Quick answer: Pass an explicit up vector (0, 0, 1) to Look at position action. Default up may differ between C3 versions or 3D camera modes.
A 3D arcade racer’s camera looks at the player but the horizon tilts wrong. Construct’s look-at function assumed an up vector that doesn’t match world setup.
Specify Up
3DCamera → Look at position (x, y, z) with up (0, 0, 1)
(0, 0, 1) for typical C3 setup (Z is up). If your scene uses Y up, supply (0, 1, 0).
Gimbal Lock
Looking straight up/down can cause gimbal lock with bad up vectors. Add small offset to camera target or use quaternion math via Browser/JavaScript:
Browser → Execute JS: "camera.lookAt(target); camera.rotation.z = 0;"
Pre-Defined Up Per Mode
For first-person, up = world up. For chase cam, up could be player’s up. For roller-coaster, up = vehicle up. Pick per camera mode.
Verifying
Camera follows player, horizon level. Looking straight down (with offset) doesn’t glitch. Switching modes doesn’t tilt.
“Look-at needs three vectors: eye, target, up. Provide all three or get surprises.”
For vehicle camera, smooth-interp the up vector toward vehicle up — corner-banking effect like real driving sims.