不,这不是所使用的技术,opengl 或 directx 都没有相机视图向量的概念。所发生的情况是,顶点被转换为标准化设备坐标空间(首先让用户转换为顶点着色器中的后投影空间,然后将 xyz 分量除以 w)。在该坐标系中,我们可以使用顶点的 x 和 y 分量来计算三角形的“有符号面积”。
float signedArea = 0;
for( int k = 1; k < output->count; k++ ) {
signedArea += (output->vertices[k - 1].values[0] * output->vertices[k - 0].values[1]);
signedArea -= (output->vertices[k - 0].values[0] * output->vertices[k - 1].values[1]);
}
Run Code Online (Sandbox Code Playgroud)
根据顶点是顺时针还是逆时针计算,它们给出正面积或负面积。从后面看三角形,正面积将为负面积,反之亦然。随后使用该值来确定是否光栅化正面、背面或两者都面向字体和背面的三角形。