Three.js: отсутствует значение шага по умолчанию для класса InterleavedBuffer

Созданный на 28 мая 2017  ·  3Комментарии  ·  Источник: mrdoob/three.js

Описание проблемы

Здесь , в классе InterleavedBuffer, предлагается использовать значение по умолчанию 0 для шага. Если пользователь забудет указать шаг, this.stride будет иметь значение undefined , это будет каскадно до var stride = data.stride; , а затем до _gl.vertexAttribPointer , вызывая неопределенное поведение webgl.

Версия Three.js
  • [X] Дев
  • [х]р85
  • [ ] ...
Браузер
  • [х] Все они
  • [ ] Хром
  • [ ] Fire Fox
  • [ ] Интернет Эксплорер
Операционные системы
  • [х] Все они
  • [ ] Окна
  • [ ] макОС
  • [ ] Линукс
  • [ ] Андроид
  • [ ] iOS

Самый полезный комментарий

Установка значения по умолчанию для аргумента означает, что можно вообще не указывать значение. Однако в этом случае необходимо установить значение.

Кроме того, если бы значением по умолчанию был ноль, следующая строка могла бы делиться на ноль.

three.js обычно не проверяет значения параметров.

Все 3 Комментарий

Установка значения по умолчанию для аргумента означает, что можно вообще не указывать значение. Однако в этом случае необходимо установить значение.

Кроме того, если бы значением по умолчанию был ноль, следующая строка могла бы делиться на ноль.

three.js обычно не проверяет значения параметров.

  1. К сожалению, нет способа заставить пользователя установить это значение, в отличие от C++, оно будет обнаружено во время компиляции. Если он должен быть установлен, почему бы не выдать ошибку, если он не установлен, вместо того, чтобы молча проходить и возвращать странное графическое поведение? Как новый пользователь three.js, я потратил довольно много времени на изучение проблемы, и я почти уверен, что я не единственный человек, который попадет в эту ловушку.

  2. Невозможно запретить пользователю присваивать 0 stride , что может вызвать только что упомянутую проблему деления на ноль @WestLangley .

  3. Документ API здесь не дает четкого описания того, что означает stride . Основываясь на моем опыте работы с OpenGL/WebGL API, здесь stride — это количество примитивных элементов, float или int, для атрибута вершины. Таким образом, count кажется количеством вершин, чьи атрибуты определены в первом аргументе array .

  4. И, поправьте меня, если я ошибаюсь, this.count не находит никакого использования во всем WebGLRender , в то время как stride использовался в критическом вызове GL _gl.vertexAttribPointer . Это также объясняет, почему после присвоения stride 0, что не совсем правильно, а this.count теперь равно Infinity , мой рендеринг возвращается в нормальное состояние, потому что он никогда не использовался. где в рамках.

Итак, я бы предложил установить защитный механизм для проверки значения stride и запроса пользователя в случае undefined или 0 .

Да, это JavaScript, и у нас уже были подобные обсуждения.

С другой стороны, если вы считаете, что документация неадекватна или неверна, самое время помочь нам улучшить ее. :)

В коде, на который вы ссылаетесь, count — это количество вершин. Свойство может использоваться или не использоваться модулем визуализации, но это свойство, доступное для прикладного уровня, если это необходимо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги