48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import {
|
|
BoxGeometry,
|
|
TextureLoader,
|
|
MeshBasicMaterial,
|
|
SRGBColorSpace,
|
|
Vector3,
|
|
Mesh,
|
|
RepeatWrapping,
|
|
} from "three";
|
|
|
|
export const createFloor = (
|
|
position: Vector3,
|
|
sizeObject: { x: number; y: number; z: number },
|
|
texturePath: string,
|
|
floorSize: number,
|
|
repeating: boolean = false,
|
|
repeatX: number = 1,
|
|
repeatY: number = 1
|
|
) => {
|
|
const textureLoader = new TextureLoader();
|
|
const floorGeometry = new BoxGeometry(
|
|
floorSize * sizeObject.x,
|
|
floorSize * sizeObject.y,
|
|
floorSize * sizeObject.z
|
|
);
|
|
|
|
const floorTexture = textureLoader.load(texturePath);
|
|
floorTexture.colorSpace = SRGBColorSpace;
|
|
if (repeating) {
|
|
floorTexture.wrapS = RepeatWrapping;
|
|
floorTexture.wrapT = RepeatWrapping;
|
|
floorTexture.repeat.set(repeatX, repeatY);
|
|
}
|
|
|
|
const floorMaterial = [
|
|
new MeshBasicMaterial(),
|
|
new MeshBasicMaterial(),
|
|
new MeshBasicMaterial({ map: floorTexture }),
|
|
new MeshBasicMaterial({ map: floorTexture }),
|
|
new MeshBasicMaterial(),
|
|
new MeshBasicMaterial(),
|
|
];
|
|
const floor = new Mesh(floorGeometry, floorMaterial);
|
|
floor.name = "floor";
|
|
floor.position.copy(position);
|
|
|
|
return floor;
|
|
};
|