0
DirectX如何确定多边形卷绕顺序?我很好奇背面扑杀。从研究中我看到它建议DX计算一个曲面法线,并将该点和相机向量的点积乘积,如果大于0则剔除。DirectX如何确定缠绕顺序?
首先,这是DirectX实际使用的技术吗?其次,如果是这样的话,考虑到每个表面有两个法线 - 一个与另一个表面相对 - DirectX如何知道使用哪个法线?
DirectX如何确定多边形卷绕顺序?我很好奇背面扑杀。从研究中我看到它建议DX计算一个曲面法线,并将该点和相机向量的点积乘积,如果大于0则剔除。DirectX如何确定缠绕顺序?
首先,这是DirectX实际使用的技术吗?其次,如果是这样的话,考虑到每个表面有两个法线 - 一个与另一个表面相对 - DirectX如何知道使用哪个法线?
否,这不是所使用的技术,既不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]);
}
根据顶点是按时钟方式还是逆时钟方式进行评估,这些给出了正面或负面区域。从背后看一个三角形,会使正片区域变成负片,反之亦然。这个值随后用于确定是否栅格化正面,背面或背面三角形。