Я использую три. 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 обозначает байт без знака (должен быть нормализован)
Заполняется случайным образом цвет я получил это изображение
Но это всего лишь обходной путь и плохой, использующий 32 бита, где мне нужно только 4. Мне нужно 16 бит для запись gid и остальное для набросков и задний стиль
Кто-нибудь знает, как Научить 3 js gltfLoader и шейдерный компилятор выставлять собственные атрибуты вершин, чтобы мы могли ссылаться на них и использовать их как обычно?
================== ==========================================
По совету ScieCode я отправил отчет в 3 js forum и Michael Herzog сказали мне, что glVertexAttribIPointer еще не поддерживается, но он будет работать над ним.
3 JS Добавить поддержку целочисленных атрибутов с помощью WebGL2