Как триплеты положения вершин отображаются в шейдере на vec4? - PullRequest
2 голосов
/ 02 апреля 2012

Я пытаюсь реализовать отображение теней webgl из примера кода, который уже реализует , используя spidergl. Я пытаюсь реализовать это прямо поверх WebGL.

Я считаю, что у меня почти такой же код, но я не получаю результаты. Я сузил проблему до меньшей части кода. Мой код шейдера определяет a_position (атрибут позиции вершины), как vec3; в то время как код spidergl определяет его как vec4. Я прочесал код spidergl, чтобы понять, как их атрибуты положения вершин, которые представляют собой триплеты x-y-z, заполняются в vec4. Я ожидал найти хитрость в вызове vertexAttribPointer. Но значения размера и шага, которые они передают, соответствуют ожидаемым: 3 и 12. Я изменил свой код, чтобы сделать то же самое, но пока не получаю те же результаты.

Может кто-нибудь объяснить основной механизм, с помощью которого триплеты позиции отображаются на vec4? Я никогда не видел код, который также упоминает w вместе с координатами x, y, z углов куба, но есть шейдеры, которые принимают a_position как vec4. Тогда что заполняется в четвертом выпуске vec4?

1 Ответ

3 голосов
/ 02 апреля 2012

Этот раздел документации glVertexAttrib может вас заинтересовать:

Эти команды могут использоваться для указания одного, двух, трех или всех четырех компонентов общего атрибута вершины, указанного в index .

A 1 в имени команды указывает, что передано только одно значение, и оно будет использоваться для изменения первого компонента общего атрибута вершины. Второй и третий компоненты будут установлены на 0, а четвертый компонент будет установлен на 1.

Аналогичным образом, 2 в названии команды указывает, что значения предоставлены для первых двух компонентов, третий компонент будет установлен в 0, а четвертый компонент будет установлен в 1.

A 3 в названии команды указывает, что значения предоставлены для первых трех компонентов, и четвертый компонент будет установлен в 1, тогда как 4 в имени указывает эти значения приведены для всех четырех компонентов.

В основном, если вы устанавливаете атрибут vec4 с помощью vec3, первые 3 элемента vec4 соответствуют вашему vec3, а 4-й элемент устанавливается на 1.

Полагаю, ваша проблема в другом месте вашего кода.

...