Пользовательские атрибуты вершин GLSL

Я хочу сделать пару атрибутов вершины vec4 в своих шейдерах. Я немного погуглил, но не могу найти постоянную информацию о том, что конкретно я хочу сделать.

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

    weightsBuffer = new float[vSize*4];
    indexesBuffer = new int[vSize*4];

Часть, которую я не всегда могу найти, - это как загрузить их и использовать в шейдере. Чтобы было ясно, я не хочу загружать все координаты позиции, нормали и текстуры, я уже использую списки отображения и решил продолжать использовать их по нескольким причинам, которые не имеют значения. Как я могу создать буферы и правильно связать их, чтобы я мог их использовать?

Спасибо.


person BlueSpud    schedule 17.05.2015    source источник


Ответы (1)


Привязка весов и индексов ваших костей ничем не отличается от процесса привязки данных о вашем положении. Предполагая, что данные в ваших буферах сформированы правильно, вы используете glBindAttribLocation. для привязки индекса атрибута в потоке вершин к переменной шейдера и glVertexAttribPointer для определения вашего массива вершин (и не забудьте glEnableVertexAttribArray).

Точный код может варьироваться в зависимости от того, используете ли вы VAO и VBO (или только клиентские буферы). Если вам нужен более конкретный ответ, вы должны предоставить свой код и шейдер.

person MuertoExcobito    schedule 18.05.2015
comment
Я хотел использовать списки отображения, но я прочитал спецификацию OpenGL и glVertrxAttribPointer с ними не работает, так что вы правы. :) - person BlueSpud; 18.05.2015