OpenGL 网格 + 镜像变换 = 错误光照

OpenGL mesh + mirror transformation = wrong lighting

您经常需要将同一对象的镜像副本添加到 3D 图形场景中,例如车门或右鞋的左版。当您在包含三角形网格(顶点、三角形和法线)的显示列表上使用镜像变换执行此操作时,您会遇到照明问题。

我们能够检测到 4x4 变换矩阵内的反射,但我们不知道如何循环使用相同的显示列表(使用正确的光照绘制),只需更改 OpenGL 状态标志即可。

我在考虑glFrontFace()GL_NORMALIZE

你觉得不建立新的镜像对象显示列表可以吗?如果是,如何?

鉴于您对 "display lists" 和 GL_NORMALIZE 的使用,听起来您正在使用老式的固定功能 OpenGL。您需要启用一项名为 双面照明:

的功能
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);

附带说明一下,如果启用了背面剔除,您还需要在绘制翻转的几何图形时翻转剔除方向:

glFrontFace(GL_CW); // the default setting is GL_CCW

祝你好运,希望你能现代化;着色器很棒!