Forge Viewer - Невозможно добавить линии в сцену

Я пытаюсь добавить несколько линий в сцену 3D-модели в приложении Forge Viewer, которое я создаю. Я хочу нарисовать ограничивающие рамки вокруг определенных объектов; Я использовал следующее руководство в качестве основы:

Получение ограничений коробки каждого компонента в средстве просмотра

На данный момент я просто использую функцию drawLines, так как у меня уже есть данные координат для объекта, который я хочу нарисовать рамкой из другого места в моем коде. Однако при вызове scene.add в консоли появляется следующая ошибка:

WebGL: INVALID_OPERATION: drawArrays: no buffer is bound to enabled attribute

Я просмотрел эту ошибку и не могу найти ничего, что могло бы мне помочь. Кажется, проблема может быть связана с тем, что мое приложение уже добавляет сетки в сцену, и когда оно переходит к добавлению строк, оно использует тот же шейдер, у которого нет атрибутов, настроенных правильно для работы с линиями. Это всего лишь предположение, я действительно понятия не имею, что именно вызывает ошибку, или что я могу сделать по-другому, чтобы исправить ее. Я пробовал различные типы объектов THREE.js, используя sceneAfter и т. Д., Но все еще не могу рисовать линии в сцене.


person Alex Leach    schedule 10.10.2018    source источник


Ответы (4)


Ага, удалось заставить работать! Чтобы исправить это, мне пришлось использовать createOverlayScene и addOverlay, чтобы добавить линейную геометрию в сцену вместо использования scene.add, и мне пришлось удалить matman (). AddMaterial.

person Alex Leach    schedule 10.10.2018

Вам нужно создать новый Материал, как показано ниже.

var lineMaterial = new THREE.LineBasicMaterial ({
color: new THREE.Color (0xFF0000),
transparent: true,
depthWrite: false,
depthTest: true,
linewidth: 10,
opacity: 1.0
})

var lines = new THREE.Line (geometry,
lineMaterial)
scene.add (lines)
person LJason1993    schedule 10.10.2018

Если вы вызываете функцию drawLines напрямую, убедитесь, что используете тот же тип материала, что и в руководстве:

let material = new THREE.LineBasicMaterial({ color: 0xffff00, linewidth: 2 });
viewer.impl.matman().addMaterial('MyLineMaterial', material, true);
drawLines([{x:0,y:0,z:0}, {x:10,y:10,z:10}], material);
person Petr Broz    schedule 10.10.2018

попробуйте новую сцену ---- только кодизвините за мой плохой английский

    const geometry = new THREE.Geometry ()

    geometry.vertices.push (new THREE.Vector3 ( 0,  0,  0))
    geometry.vertices.push (new THREE.Vector3 (100, 100, 100))

    var material = new THREE.LineBasicMaterial({
        color: 0x0000ff,
        linewidth: 2
    });

    var lines = new THREE.Line (geometry, material)

    viewer.impl.scene.add (lines)

Убедитесь, что ваша сцена может создавать линии.

person LJason1993    schedule 11.10.2018