@Tereverda

Three.js объект сзади не виден при повороте к нему лицом?

При повороте камеры на заднюю сторону - смотришь на нее фронтально, исчезает объект - полоски.
Не понимаю как это исправить, живой пример.

Песочница

662917031c0be719091326.png
662916f33bad7043865029.png
662916fa765f0445147854.png

const scene = new THREE.Scene(); // создаем сцену
    scene.background = new THREE.Color(0xffffff); // фон сцены

    const renderer = new THREE.WebGLRenderer({antialias : true}); // сглаживание углов
    renderer.setSize(divSize["width"], divSize["height"]); // размер холста
    renderer.sortObjects = false;

    visualization.appendChild(renderer.domElement); // подключаем к div Three.js
    const camera = new THREE.PerspectiveCamera(fov, divSize["width"] / divSize["height"] , 0.1, null); // создаем камеру


// Общая группа в которую вносим все объекты
        const group = new THREE.Group();
        group.name  = 'Гофролист';

        // Создаем гофролист X-length + Y-height + Z-width
        const sheetGeometry = new THREE.BoxGeometry(width, length, 0);
        const sheetMaterial = new THREE.MeshStandardMaterial({
            map: sheetTexture,
            side: THREE.DoubleSide,
            depthWrite: false,
            transparent: false, // прозрачность
            opacity: 1, // непрозрачность
            alphaTest: 0.1
        });

        const sheet = new THREE.Mesh(sheetGeometry, sheetMaterial);
        sheet.geometry.computeBoundingBox(); // создаем невидимую рамку-каркас для замера вершин
        sheet.name = name; // название гофролиста


pointsRight.push( new THREE.Vector3(x, bSheet.max.y, -50) );
            pointsRight.push( new THREE.Vector3(x, bSheet.min.y, -50) );

            let lineRightGeometry = new THREE.BufferGeometry().setFromPoints(pointsRight);
            let lineRight = new THREE.Line(lineRightGeometry, lineMaterial);
            lineRight.name  = 'Линия в право ' + lineQuantity;

           group.add(lineRight);
  • Вопрос задан
  • 534 просмотра
Решения вопроса 1
sfi0zy
@sfi0zy
Creative frontend developer
Без полноценого примера в песочнице это будет гадание на кофейной гуще, но что видно сейчас - для такой простой сцены у вас используется очень много вещей, которые потенциально могут что-то сделать c видимостью объектов. Обычно мы их используем для очень опасных оптимизаций, когда нужно все сделать нестандартным образом, где-то что-то сломать, но за счет этого что-то другое выиграть. Тут такие оптимизации явно преждевременны. Стоит пройтись по ним и убрать все. Если сцена будет работать, то потом можно будет вернуть назад по очереди, наблюдая за происходящим.

Параметры depthWrite у материала и sortObjects у рендерера - первые кандидаты на то, чтобы их убрать. И определенно стоит вместо BoxGeometry нулевой толщины взять PlaneGeometry. Нулевая толщина тоже может давать разные сложности, с определением видимости в том числе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы