Started to work on placing grass
Not sure if I will keep this I must check to use InstancedMesh or something similar, as placing 300 objects is causing FPS drops
This commit is contained in:
@@ -357,6 +357,58 @@ export async function addAssetsOnScene(scene){
|
||||
signPlane.position.set(10.06 + i*5, 1.347, 1.65);//Determined by hand
|
||||
scene.add(signPlane);
|
||||
}
|
||||
|
||||
/* --------------------
|
||||
ADDING GRASS
|
||||
-------------------- */
|
||||
const grass1 = await loadModel('src/objects/models/grass/grass1.gltf');
|
||||
const grass2 = await loadModel('src/objects/models/grass/grass2.gltf');
|
||||
const grass3 = await loadModel('src/objects/models/grass/grass3.gltf');
|
||||
const grass4 = await loadModel('src/objects/models/grass/grass4.gltf');
|
||||
const grass5 = await loadModel('src/objects/models/grass/grass5.gltf');
|
||||
const grassModels = [grass1,grass2,grass3,grass4,grass5];//https://threejs.org/docs/#api/en/objects/InstancedMesh
|
||||
|
||||
grassModels.forEach(item => {
|
||||
//Prepare models before placing them
|
||||
item.scene.scale.set(0.1, 0.1, 0.1);
|
||||
item.scene.rotateOnWorldAxis(new THREE.Vector3(1,0,0), MathUtils.degToRad(90));
|
||||
alignGround(ground, item.scene);
|
||||
});
|
||||
|
||||
function getRndInteger(min, max) {
|
||||
return Math.floor(Math.random() * (max - min) ) + min;
|
||||
}
|
||||
|
||||
for (let i = 0; i < 280; i++) {
|
||||
let choosenGrassModel;
|
||||
let collision;
|
||||
|
||||
do {
|
||||
choosenGrassModel = grassModels[getRndInteger(0, grassModels.length)].scene.clone();
|
||||
|
||||
// Random position
|
||||
choosenGrassModel.position.x = getRndInteger(groundHitBox.min.x, groundHitBox.max.x);
|
||||
choosenGrassModel.position.y = getRndInteger(groundHitBox.min.y, groundHitBox.max.y);
|
||||
|
||||
// Checking collisions
|
||||
const grassHitbox = new THREE.Box3().setFromObject(choosenGrassModel);
|
||||
collision = false;
|
||||
|
||||
// Checking with other objects
|
||||
/*scene.children.forEach(object => {
|
||||
if (object !== ground && object !== choosenGrassModel) {
|
||||
const distance = choosenGrassModel.position.distanceTo(object.position);
|
||||
|
||||
if (distance < 0.5) {
|
||||
collision = true;
|
||||
}
|
||||
}
|
||||
});*/
|
||||
} while (collision);
|
||||
|
||||
// Adding to scene
|
||||
scene.add(choosenGrassModel);
|
||||
}
|
||||
|
||||
/* --------------------
|
||||
ADDING PLAYER
|
||||
|
||||
Reference in New Issue
Block a user