Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Сейчас очень многие вновь испеченные «программисты» хватают что-то вроде Unity 3D, и не обладая знаниями ни в программировании, ни в 3D-графике, сразу же бросаются в геймдев
Далее, если мы попробуем этим кодом нарисовать вот такие линии:
line(13, 20, 80, 40, image, white);
line(20, 13, 40, 80, image, red);
line(80, 40, 13, 20, image, red);
То выяснится, что одна линия хороша, вторая с дырками, а третьей вовсе нет.
Обратите внимание, что первая ивтораятретья строчки (в коде) дают одну и ту же линию разного цвета.
В вашей версии мне не совсем понятно использование EventEmitter и других библиотек :).
нативные линии рисуются быстрее пиксельных Брезенхэма
Нативные / пиксельные - 10: 0.8 / 10 - 100: 1 / 12 - 1000: 130 / 22 - 10000: 1350 / 65 - 100000: 18220 / 482 - 1000000: нет / 4700
Native / Pixel: 1 0.4 / 15 10 0.9 / 50 100 1.1 / 380 1000 10 / 3988 10000 69 / 47210
for(var ab_x = ax; ab_x < bx; ab_x++){
var t = (ab_x - ax) / (bx - ax),
ab_y = (1 - t)*ay + t*by | 0,
bc_x = (1 - t)*cx + t*bx | 0,
bc_y = (1 - t)*cy + t*by | 0;
this.line(ab_x, ab_y, bc_x, bc_y, color);
}
почему face-ы определены три раза по три вертекса
int x0 = (v0.x+1.)*width/2.;
int y0 = (v0.y+1.)*height/2.;
int x1 = (v1.x+1.)*width/2.;
int y1 = (v1.y+1.)*height/2.;
Как выглядит простейший код… Видимо, как-то так:
int x = x0*(1.-t) + x1*t;Банальная математика же. Ставим точку на отрезке между x0 и x1, поделив его в отношении t:1. Возможно, формула будет более понятной в виде x0 + (x1 - x0) * t.



Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6