Интерполяция атрибутов при растеризации
Есть набор вершин:
new Vector(-0.5,-0.5,-0.5),
new Vector(-0.5, 0.5,-0.5),
new Vector( 0.5, 0.5,-0.5),
new Vector( 0.5,-0.5,-0.5),
new Vector(-0.5,-0.5, 0.5),
new Vector(-0.5, 0.5, 0.5),
new Vector( 0.5, 0.5, 0.5),
new Vector( 0.5,-0.5, 0.5)
и набор треугольников:
new Triangle(0,2,1,[0,0,255,255],[255,255,255,255],[0,255,255,255]),
new Triangle(0,3,2,[255,0,255,255],[0,0,255,255],[255,255,255,255]),
new Triangle(6,5,1,[0,255,255,255],[255,255,0,255],[0,255,0,255]),
new Triangle(1,2,6,[255,255,255,255],[255,255,0,255],[0,255,255,255]),
new Triangle(2,6,3,[255,0,255,255],[255,255,255,255],[255,255,0,255]),
new Triangle(6,3,7,[255,0,255,255],[255,0,0,255],[255,255,0,255]),
new Triangle(5,1,0,[0,0,255,255],[0,255,255,255],[0,255,0,255]),
new Triangle(5,0,4,[0,0,255,255],[0,0,0,255],[0,255,0,255]),
new Triangle(0,7,4,[0,0,255,255],[255,0,0,255],[0,0,0,255]),
new Triangle(0,3,7,[255,0,255,255],[0,0,255,255],[255,0,0,255]),
new Triangle(6,5,7,[255,0,0,255],[255,255,0,255],[0,255,0,255]),
new Triangle(7,5,4,[255,0,0,255],[0,0,0,255],[0,255,0,255]),
После проекционного преобразования для интерполяции атрибутов (в данном случае цветов в вершинах) мне нужно отсортировать величину у каждой вершины полигона по возрастанию.
class Triangle {
constructor(vA, vB, vC, cA = [255,0,0,255], cB = cA, cC = cA) {
this.vA = vA;
this.vB = vB;
this.vC = vC;
this.cA = cA;
this.cB = cB;
this.cC = cC;
}
static normal(vA, vB, vC) {
var ab = Vector.subtract(vB, vA);
var ac = Vector.subtract(vC, vA);
return Vector.cross(ab, ac);
}
sort(projected) {
let vA = this.vA;
let vB = this.vB;
let vC = this.vC;
let cA = this.cA;
let cB = this.cB;
let cC = this.cC;
if (projected[vB].y < projected[vA].y) {
[vA, vB] = [vB, vA];
[cA, cB] = [cB, cA];
}
if (projected[vC].y < projected[vA].y) {
[vA, vC] = [vC, vA];
[cA, cC] = [cC, cA];
}
if (projected[vC].y < projected[vB].y) {
[vB, vC] = [vC, vB];
[cB, cC] = [cC, cB];
}
return new Triangle(vA,vB,vC,cA,cB,cC)
}
}
Почему вершины становятся не на свои места? Пытался сортировать по разному, но при анимации движения камеры всё равно происходит такой артефакт. Если кто-то сталкивался, подскажите, в чём может быть проблема?