Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Мы будем использовать один буфер для всех объектов и соответственно всех вершин и индексов. В дальнейшем, если будет возможность использовать несколько буферов — тип фигуры будет находится в самом объекте примитива. (Если такая возможность уже есть — напишите, пожалуйста, в комментариях.)
gl.vertexAttribPointer вызываете и в attributeSetup, и в отрисовке. Определитесь уж, пожалуста. А что самое печальное, так это отсутствие gl.bindBuffer перед ним, так что Вы полагаетесь на то, что со времён вызова initBuffers ничего не поменялось.gl.enableVertexAttribArray так вообще в трёх разных местах (attributeSetup, initBuffers, initProgram). На всякий пожарный, да?botuPositionAttr в initBuffers? На этот момент Вы уже вызвали initProgram, который эту позицию определил.max(botuPosition.x,(-1.0) * botuPosition.x)?gl.vertexAttribPointer. Когда вызываете эту функцию, то соответствующий слот входов шейдера получает ассоциацию с неким участком видеопамяти (с дополнительной семантикой типов). Эта функция зависит от текущего подключенного буффера. А когда вы эти слоты привязали — можете и отключить буффер вовсе.Материал рассчитан на начинающий уровень, для тех, кто прочитал основы webgl и хочет попробовать начать работать. Таких как я.
Собственный движок WebGL. Статья №1. Холст