判断一个面的朝向(正面或背面)主要基于顶点缠绕顺序(Winding Order) 的规则。

缠绕顺序(Winding Order)

  • 当定义三角形时,三个顶点的连接顺序决定了面的“缠绕方向”。
  • 默认规则
    • 逆时针(CCW) 顶点顺序 → 正面(Front Face)
    • 顺时针(CW) 顶点顺序 → 背面(Back Face)
  • 例如:顶点顺序 (V0, V1, V2) 在屏幕上呈逆时针排列时,该面被视为正面。

数学原理

通过 屏幕空间中的有向面积 判断缠绕顺序:

  • 计算向量:(\vec{u} = V_1 - V_0),(\vec{v} = V_2 - V_0)
  • 叉积符号:(\text{sign}(u_x v_y - u_y v_x))
    • 正值 → 逆时针(CCW)
    • 负值 → 顺时针(CW)

所使用的坐标系

观察坐标系(眼坐标系) 中计算缠绕顺序(非世界坐标系)。
顶点经过模型视图变换(ModelView Matrix)后,在观察空间中根据投影到屏幕前的2D坐标计算缠绕方向。

各图形引擎的规则

OpenGL

通过 glFrontFace() 可修改默认规则:

C
glFrontFace(GL_CCW); // 逆时针为正面(默认)
glFrontFace(GL_CW); // 顺时针为正面
点击展开查看更多

Unity

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/8b1d3ab2/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键