opengl - OpenGL 网格 + 镜像变换 = 错误的光照
问题描述
通常,您需要向 3D 图形场景添加同一对象的镜像副本,例如车门或右鞋的左侧版本。当您在包含三角形网格(顶点、三角形和法线)的显示列表上使用镜像变换执行此操作时,您会遇到照明问题。
我们能够检测到 4x4 变换矩阵内的反射,但我们不知道如何简单地更改 OpenGL 状态标志来回收相同的显示列表(用正确的照明绘制它)。
我在想glFrontFace()
,,GL_NORMALIZE
等等。
你认为不建立镜像对象的新显示列表是可能的吗?如果是,如何?
解决方案
鉴于您使用“显示列表”和GL_NORMALIZE
,听起来您正在使用老式的固定功能 OpenGL。您需要启用一个称为双面照明的功能:
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
附带说明一下,如果您启用了背面剔除,您还需要在绘制翻转的几何图形时翻转剔除方向:
glFrontFace(GL_CW); // the default setting is GL_CCW
祝你好运,我希望你能现代化;着色器很棒!
推荐阅读
- python - pycuda:gpu 中用于列表的内存分配
- kotlin - 如何读取和增加外部类实例的 Int 变量?
- javascript - 用正则表达式替换时结果错误
- swift - 字符串到日期的转换有时会引发 NSOperationQueue 错误
- python - 检测使用 cv2.HoughCircles 检测到的圆圈颜色的最佳方法是什么?
- c++ - 使用正则表达式进行电子邮件输入验证 C++
- repository - Tortoisehg 在 Push to Bitbucket 上不一致地要求输入密码
- excel-formula - 计算同一天账户交易次数的公式
- swift - 将 Swift 系统库添加到 xcode 项目?
- java - 如何构建包含所有依赖项的 Java 项目作为 Jars