Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SteerBehavior - Vehicle facing the wrong direction #71

Closed
mikeyriver2 opened this issue Sep 21, 2022 · 3 comments
Closed

SteerBehavior - Vehicle facing the wrong direction #71

mikeyriver2 opened this issue Sep 21, 2022 · 3 comments

Comments

@mikeyriver2
Copy link

Hi! I'm quite new to threejs and 3d stuff in general and I've been experimenting the SteeringBehavior.

I recently purchased a model from sketchfab and basically my goal is to have the model follow the cursor around in a 2d plane. The model seems to be following the target (point of the cursor) just fine, but the model is facing the wrong way.

Loading the gltf file:

let dog;
    const gltfLoader = new GLTFLoader();
    
    gltfLoader.load('./premium_wolf/source/model.gltf', (gltcScene) => {
      dog = gltcScene;
      dog.scene.matrixAutoUpdate = false; 
      vehicle.setRenderComponent(dog.scene, sync);
      scene.add(dog.scene);
    });

Applying seek behavior to vehicle/my model:

    const seekBehavior = new YUKA.ArriveBehavior(target.position, 2, 1); 
    vehicle.steering.add(seekBehavior);

Output:
Peek 2022-09-22 03-09

Expected Behavior:

  • Head should be facing towards the target (and not the butt :p)

Is there a way to rotate the model while the steering behavior is active?

@Mugen87
Copy link
Owner

Mugen87 commented Sep 21, 2022

Is there a way to rotate the model while the steering behavior is active?

Yes, you have to make sure that the default forward direction of the model is (0,0,1). That means when you load the model and add it to the scene, it should look along the positive z-axis.

Ideally, you fix this in Blender and just import the updated model. If you don't want to do that, transform the model's geometry via rotateX(), rotateY() or rotateZ()(depending on your use case). More information about the geometry API at the three.js docs.

@mikeyriver2
Copy link
Author

mikeyriver2 commented Sep 22, 2022

Hi @Mugen87 thanks for the reply! I managed to get around this by rotating the model by 180 degrees using the threejs editor :>

If you don't want to do that, transform the model's geometry via rotateX(), rotateY() or rotateZ()(depending on your use case). More information about the geometry API at the three.js docs.

Right, this was what I tried before editing the gltf itself. But if I'm not mistaken, since I had to call dog.scene.matrixAutoUpdate = false; to allow YUKA to do the calculations instead, using rotation.x or rotateX() did not apply. Is there a way for YUKA to handle rotations manually? I also tried rotateTo but since the steering behavior is applied to the model, it didn't rotate - https://mugen87.github.io/yuka/docs/Vehicle.html

@Mugen87
Copy link
Owner

Mugen87 commented Sep 22, 2022

using rotation.x or rotateX() did not apply.

You are using the Object3D interface. When using the methods from BufferGeometry, the calculations of Yuka do not interfere.

Check out how a cone geometry is transformed in order to achieve a proper alignment:

const entityGeometry = new THREE.ConeBufferGeometry( 0.1, 0.5, 8 );
entityGeometry.rotateX( Math.PI * 0.5 );

@Mugen87 Mugen87 closed this as completed Sep 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants