Расположение макета шейдера в зависимости от идентификатора доступа файла GLTF - PullRequest
0 голосов
/ 29 марта 2020

Я использую три. js с Webgl2, чтобы показать файл gltf, который я сделал для целей ГИС. Мне нужен собственный атрибут вершины, поскольку gltf позволяет это. Шейдер компилируется нормально в GLSL 300 es

Темы в буфере атрибутов вершин чередуются с позицией.

Все отрисовывается нормально. Но теперь я хочу использовать данные themati c. Если я определю макет в местоположении 2, как методы доступа

layout(location=2) in  uint thematic;

Все по-прежнему хорошо, если я не использую переменную. Но если я это сделаю, то получу такую ​​ошибку

[. WebGL-000000000BAE32A0] GL_INVALID_OPERATION: тип ввода вершинного шейдера не соответствует типу атрибута связанной вершины.

Какой правильный путь объявить макет для пользовательского атрибута вершины ??

Наконец, я решаю использовать заданный атрибут, а именно COLOR_0, и он работает.

Вот объявление примитива в gltf и метод доступа

{"attribute": {"POSITION": 1, "COLOR_0": 2},

{"bufferView": 1, "byteOffset": 12, "componentType": 5121, "count": 16263,
"type": "VEC3", "normalized": true}

Тип компонента 5121 обозначает байт без знака (должен быть нормализован)

Заполняется случайным образом цвет я получил это изображение

enter image description here

Но это всего лишь обходной путь и плохой, использующий 32 бита, где мне нужно только 4. Мне нужно 16 бит для запись gid и остальное для набросков и задний стиль

Кто-нибудь знает, как Научить 3 js gltfLoader и шейдерный компилятор выставлять собственные атрибуты вершин, чтобы мы могли ссылаться на них и использовать их как обычно?

================== ==========================================

По совету ScieCode я отправил отчет в 3 js forum и Michael Herzog сказали мне, что glVertexAttribIPointer еще не поддерживается, но он будет работать над ним.

3 JS Добавить поддержку целочисленных атрибутов с помощью WebGL2

...