Что делает setDrawRange? в три. js - PullRequest
0 голосов
/ 23 марта 2020

Я изучал код 3. js.

При чтении кода и документации есть одна вещь, которую я не могу получить.

в этом коде. http://jsfiddle.net/w67tzfhx/

указан код, указанный ниже.

function init(){

    var geometry = new THREE.BufferGeometry();
    var positions = new Float32Array(MAX_POINTS*3);
        geometry.addAttribute('position',new THREE.BufferAttribute(positions,3))

        drawCount =2;
        geometry.setDrawRange(0,drawCount );

        mat =  new THREE.LineBasicMaterial( { color: 0xff0000, linewidth: 2 } );

        line= new THREE.Line(geometry, mat)

        scene.add(line)

        updatePositions();

}

что такое setDrawRange? и что делает drawCount там?

в официальном документе написано

.setDrawRange (start: Integer, count: Integer): null Установите свойство .drawRange. Для неиндексированной BufferGeometry count - это количество вершин для рендеринга. Для индексируемой BufferGeometry count - это количество отображаемых индексов.

, которые я вообще не получаю.

Может кто-нибудь помочь мне объяснить, что это такое? Заранее спасибо.

1 Ответ

2 голосов
/ 23 марта 2020

Ваша геометрия имеет несколько вершин. Например, куб имеет по крайней мере 36 (6 для каждой из 6 сторон, потому что каждой стороне нужно 2 треугольника, чтобы сделать прямоугольник, а каждому треугольнику нужно 3 вершины). По умолчанию три рисуют все 36. Чтобы нарисовать только первые 6, вы должны позвонить setDrawRange(0, 6). Чтобы нарисовать последние 6, вы бы позвонили setDrawRange(30, 6). Чтобы нарисовать все 36 из них, вы должны позвонить setDrawRange(0, 36)

. Вершины могут быть проиндексированы или не проиндексированы. Если они проиндексированы, это просто означает, что в данных есть уровень косвенности. Вместо setDrawRange(0, 6) ссылаясь на первые 6 вершин, он вместо этого ссылается на первые 6 индексов, которые, в свою очередь, ссылаются на 6 вершин (некоторые могут повторяться, если индексы повторяются).

Это не распространено для использования setDrawRange но в одном случае, скажем, вы хотите нарисовать кучу линий. Вместо того чтобы создавать множество отдельных линейных объектов, вы просто создаете одну геометрию с пробелом для группы линий (скажем, 1000 линий, то есть 2000 вершин). Затем вы добавляете линии к геометрии по мере необходимости и говорите трем, чтобы они рисовали только первые N линий, вызывая setDrawRange(0, numLines * 2) (2 вершины на линию)

Подробнее о геометрии можно узнать здесь и здесь

...