Есть ли в Three.js функция, с помощью которой я могу закрыть промежутки между блоками?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Есть ли в Three.js функция, с помощью которой я могу закрыть промежутки между блоками?

Сообщение Anonymous »

функция animate() {
requestAnimationFrame(animate);

Код: Выделить всё

        if (controls.isLocked === true) {
const time = performance.now();
const delta = (time - prevTime) / 1000;

velocity.x -= velocity.x * 10.0 * delta;
velocity.z -= velocity.z * 10.0 * delta;

velocity.y -= 9.6 * 100.0 * delta; // gravity

direction.z = Number(moveForward) - Number(moveBackward);
direction.x = Number(moveRight) - Number(moveLeft);
direction.normalize(); // this ensures consistent movements in all directions

if (moveForward || moveBackward) velocity.z -= direction.z * 400.0 * delta;
if (moveLeft || moveRight) velocity.x -= direction.x * 400.0 * delta;

controls.moveRight(- velocity.x * delta);
controls.moveForward(- velocity.z * delta);

controls.getObject().position.y += (velocity.y * delta); // new behavior
if (controls.getObject().position.y < 10) {
velocity.y = 0;
controls.getObject().position.y = 10;
canJump = true;
}

prevTime = time;
}

renderer.render(scene, camera);
}

function onMouseDown(event) {
if (placingBlockType && controls.isLocked === true) {
let blockGeometry, blockMaterial;

switch (placingBlockType) {
case "door":
blockGeometry = new THREE.BoxGeometry(1, 2.5, 0.2); // Simple door dimensions
blockMaterial = new THREE.MeshBasicMaterial({ color: blockColor });
break;
case "window":
blockGeometry = new THREE.BoxGeometry(1, 1, 0.1); // Reduced width for the window
blockMaterial = new THREE.MeshBasicMaterial({ color: blockColor, transparent: true, opacity: 0.5 }); // Transparent window
break;
case "roof":
blockGeometry = new THREE.ConeGeometry(1.5, 1, 4); // Pyramidal roof with 4 sides
blockMaterial = new THREE.MeshBasicMaterial({ color: blockColor });
break;
case "block":
default:
blockGeometry = new THREE.BoxGeometry(2, 1, 1); // Rectangular brick shape
blockMaterial = new THREE.MeshBasicMaterial({ color: blockColor });
break;
}

const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();

mouse.x = 0;
mouse.y = 0;

raycaster.setFromCamera(mouse, camera);

const intersects = raycaster.intersectObjects(objects, false);

if (intersects.length > 0) {
const intersect = intersects[0];

const voxel = new THREE.Mesh(blockGeometry, blockMaterial);
voxel.position.copy(intersect.point).add(intersect.face.normal);
voxel.position.divideScalar(2).floor().multiplyScalar(2).addScalar(1);
scene.add(voxel);
objects.push(voxel);
actionHistory.push(voxel);

const edges = new THREE.LineSegments(new THREE.EdgesGeometry(blockGeometry), new THREE.LineBasicMaterial({ color: 0x000000 }));
edges.position.copy(voxel.position);
scene.add(edges);
actionHistory.push(edges);

// Make the new object selectable
voxel.userData.selectable = true;
edges.userData.selectable = true;
}
} else {
selectObject(event);
}
}

function selectObject(event) {
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();

mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = - (event.clientY / window.innerHeight) * 2 + 1;

raycaster.setFromCamera(mouse, camera);

const intersects = raycaster.intersectObjects(objects, false);

if (intersects.length >  0) {
const intersect = intersects[0].object;

if (intersect.userData.selectable) {
selectedObject = intersect;
transformControls.attach(selectedObject);
}
} else {
selectedObject = null;
transformControls.detach();
}
}
приведенный выше код отвечает за размещение блоков в трехмерном пространстве [вот как выглядит результат, вот как он выглядит, когда я пытаюсь разместить их в другом направлении] (https:// i.sstatic.net/xFvL15oi.png) Я перепробовал все, но когда я запускаю код, между блоками, которые я пытаюсь разместить, остается зазор, и я не могу размещать блоки во всех направлениях, я могу только размещать блоки в одном направлении, нельзя размещать вверх или в любом другом направлении только в одном направлении

Подробнее здесь: https://stackoverflow.com/questions/786 ... the-blocks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»