首页 > 解决方案 > OpenGL 网格 + 镜像变换 = 错误的光照

问题描述

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

我们能够检测到 4x4 变换矩阵内的反射,但我们不知道如何简单地更改 OpenGL 状态标志来回收相同的显示列表(用正确的照明绘制它)。

我在想glFrontFace(),,GL_NORMALIZE等等。

你认为不建立镜像对象的新显示列表是可能的吗?如果是,如何?

标签: opengl3dcad

解决方案


鉴于您使用“显示列表”和GL_NORMALIZE,听起来您正在使用老式的固定功能 OpenGL。您需要启用一个称为双面照明的功能:

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);

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

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

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


推荐阅读