38
loading...
This website collects cookies to deliver better user experience
three.js
, Babylon.js
и PixiJS
(это вообще 2D-рендер). Вес 3D-библиотек огромный, как бы они не были сжаты. Не хотелось пускать таких монстров к себе на сайт, у меня и так был 100кб react-dom, куда еще больше? Да и чтоб разобраться в 3D-библиотеках, все равно нужно было иметь какие-то представления о 3D-графике. — Поставь мне точку на 30 сантиметров от верха и 50 см слева, потом точку в 50х50, потом в 70х80, соедини мне это линиями и закрась получившееся пространство красным.
// атрибут, который будет получать данные которые мы передали. атрибут === переменная/пропс
attribute vec4 a_position;
// все шейдеры имеют функцию main
// стандартная тема для компилируемых языков
void main() {
// gl_Position - специальная переменная вершинного шейдера,
// которая отвечает за установку положения
gl_Position = a_position;
}
// фрагментные шейдеры не имеют точности по умолчанию, поэтому нам необходимо её
// указать. mediump подойдет для большинства случаев. Он означает "средняя точность"
precision mediump float;
void main() {
// gl_FragColor - специальная переменная фрагментного шейдера.
// Она отвечает за установку цвета.
gl_FragColor = vec4(1, 0, 0, 1); // вернёт красный
}
attribute
. Шейдере есть несколько типов переменных (дальше копипаста с webglfundamentals.org):Атрибуты и буферы
Буферы - это массивы бинарных данных, загруженных в графический процессор. Обычно буферы содержат вещи вроде положений вершин, нормалей, координат текстур, цветов вершин и т.д., хотя вы вольны положить в них что угодно.
Атрибуты определяют, каким образом данные из ваших буферов передаются в вершинный шейдер. Например, вы можете поместить положения вершин в буфер как три 32-битных числа с плавающей точкой на одно положение. Вы указываете конкретному атрибуту, откуда брать положения вершин, какой тип данных используется (три 32-битных числа с плавающей точкой), начиная с какого индекса в буфере начинаются положения вершин и какое количество байтов нужно получить от одного положения до следующего.
Доступ к буферам не произвольный. Вместо этого вершинный шейдер выполняется заданное количество раз и каждый раз, когда он выполняется, выбирается следующее значение каждого из указанных буферов и назначается атрибуту.
Uniform-переменные
Uniform-переменные - это глобальные переменные, которые устанавливаются перед выполнением программы шейдера.
Текстуры
Текстуры - это массивы данных, к которым есть произвольный доступ в программе шейдера. Чаще всего в текстуру помещается картинка, но текстура - это просто набор данных и вы можете запросто поместить в неё что-то отличное от набора цветов.
constying-переменные
constying-переменные позволяют передавать данные из вершинного шейдера фрагментному шейдеру. Во фрагментном шейдере мы получим интерполированные значения вершинного шейдера - зависит от того, отображаем ли мы точки, линии или треугольники.
transform: matrix(...n)
в css.