Здесь , в классе InterleavedBuffer, предлагается использовать значение по умолчанию 0 для шага. Если пользователь забудет указать шаг, this.stride
будет иметь значение undefined
, это будет каскадно до var stride = data.stride;
, а затем до _gl.vertexAttribPointer
, вызывая неопределенное поведение webgl.
Установка значения по умолчанию для аргумента означает, что можно вообще не указывать значение. Однако в этом случае необходимо установить значение.
Кроме того, если бы значением по умолчанию был ноль, следующая строка могла бы делиться на ноль.
three.js обычно не проверяет значения параметров.
К сожалению, нет способа заставить пользователя установить это значение, в отличие от C++, оно будет обнаружено во время компиляции. Если он должен быть установлен, почему бы не выдать ошибку, если он не установлен, вместо того, чтобы молча проходить и возвращать странное графическое поведение? Как новый пользователь three.js, я потратил довольно много времени на изучение проблемы, и я почти уверен, что я не единственный человек, который попадет в эту ловушку.
Невозможно запретить пользователю присваивать 0 stride
, что может вызвать только что упомянутую проблему деления на ноль @WestLangley .
Документ API здесь не дает четкого описания того, что означает stride
. Основываясь на моем опыте работы с OpenGL/WebGL API, здесь stride
— это количество примитивных элементов, float или int, для атрибута вершины. Таким образом, count
кажется количеством вершин, чьи атрибуты определены в первом аргументе array
.
И, поправьте меня, если я ошибаюсь, this.count
не находит никакого использования во всем WebGLRender , в то время как stride
использовался в критическом вызове GL _gl.vertexAttribPointer
. Это также объясняет, почему после присвоения stride
0, что не совсем правильно, а this.count
теперь равно Infinity
, мой рендеринг возвращается в нормальное состояние, потому что он никогда не использовался. где в рамках.
Итак, я бы предложил установить защитный механизм для проверки значения stride
и запроса пользователя в случае undefined
или 0
.
Да, это JavaScript, и у нас уже были подобные обсуждения.
С другой стороны, если вы считаете, что документация неадекватна или неверна, самое время помочь нам улучшить ее. :)
В коде, на который вы ссылаетесь, count
— это количество вершин. Свойство может использоваться или не использоваться модулем визуализации, но это свойство, доступное для прикладного уровня, если это необходимо.
Самый полезный комментарий
Установка значения по умолчанию для аргумента означает, что можно вообще не указывать значение. Однако в этом случае необходимо установить значение.
Кроме того, если бы значением по умолчанию был ноль, следующая строка могла бы делиться на ноль.
three.js обычно не проверяет значения параметров.