Forge Viewer - Невозможно добавить строки в сцену - PullRequest
0 голосов
/ 10 октября 2018

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

Получение ограничивающих рамок каждого компонента в средстве просмотра

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

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

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

Ответы [ 4 ]

0 голосов
/ 11 октября 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)

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

0 голосов
/ 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);
0 голосов
/ 10 октября 2018

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

0 голосов
/ 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)
...