Hi everybody,
Happy New Year !
I have some interrogations about a project I made few months ago : I recreated the Shutdown Gallery website, where you can visit an exhibition, but I made it multi-player : you can see it on oskawa.fr
I used the PointerLockControls demo and because I didn’t want to use any Physics library ( and because I don’t know how to use it), I used a simple function to make the collision between the camera and the walls. Also, I used Firebase to make the visit a little more dynamic : you can discover the exhibition with a friend and see him walk.
(Since the last THREE Update, I have a problem with the envmap, so you can’t really visit…)
For this project, I made it with the Wordpress CMS, to automaticaly create exhibitions, upload the GLTF file, etc. But since, I learned Vue (And Nuxt), and now, I tend to recreate my old projects with this technology, like my portfolio(HERE), and I want to use SocketIO for the multiplayer.
It’s also time to refactor my code, to create something more readable, so here I am, I have some questions !
- When I make the collision, the code will check every meshes in my GLTF file, and will create simple boundaries. It works well with walls, but to work, I need to create a 3D file with 1 mesh = 1 wall. It’s not practical when you decide to model something… ( As you can see in the screenshot)
So I would like to know :
- Is there a way to make complex boundaries with a single mesh?
- Do I need to use physics library ? If yes, I didn’t find anything, I don’t really understand the documentation (I tried to use cannon-es). Could you advise me ?
- If I want to make stairs, how can I make the player up and down?
Also, here the Collision code :
// cube is the player
// objects is the array of all the meshes in my GLTF model
function collision() {
cube.position.copy(controls.getObject().position)
cameraBox.copy(cube.geometry.boundingBox).applyMatrix4(cube.matrixWorld)
for (var i = 0; i < objects.length; i++) {
collisionBox.copy(objects[i].geometry.boundingBox).applyMatrix4(objects[i].matrixWorld)
if (cameraBox.intersectsBox(collisionBox)) {
controls.getObject().position.copy(currentPosition)
}
}
currentPosition.copy(controls.getObject().position)
}
I would like your wisdom to clear my mind !
Thank you very much.