我正在进行3D练习,并且我已经实施了Backface Removal技术,该技术仅适用于正交投影,并且需要更改它以支持其他投影。
到目前为止我所做的是:
正如我所说,这只适用于正投影,我正在与其他预测斗争。 请任何帮助都很棒
顺便说一下,我在某处看到了这个解释,但并不了解它: " ..在实际3D硬件中使用的常用方法是首先进行所有变换(包括投影),然后检查生成的2D三角形是逆时针还是顺时针缠绕,并根据该条件保留或丢弃#34 ;. 或许某人如何解释生成的二维三角形是什么?
我使用的是html5 canvas和js。
答案 0 :(得分:1)
这种方法在3d硬件中调用graphic pipeline。无论您使用哪种类型的投影,它总是会被转换为2D三角形,然后才会进行背面剔除测试。
function Triangle (a, b, c) {
this.pointA = a;
this.pointB = b;
this.pointC = c;
}
Triangle.prototype.isBackface = function () {
var ax = this.pointA.getProjectedX() - this.pointB.getProjectedX();
var ay = this.pointA.getProjectedY() - this.pointB.getProjectedY();
var bx = this.pointA.getProjectedX() - this.pointC.getProjectedX();
var by = this.pointA.getProjectedY() - this.pointC.getProjectedY();
var cz = ax * by - ay * bx;
return cz < 0;
};
// before drawing a triangle you call a isBackface method. This method check
// either this triangle is counterclockwise or clockwise but just after
// all projections.
Triangle.prototype.draw = function (context) {
if (this.isBackface()) {
return;
}
this._draw();
};