我正在研究我的OpenGL场景(基本上由一个天空立方体和一个小的白色立方体组成)。反射应该发生在xz平面上(y = 0)。我已设法将其渲染到FBO中,但目前视图或预期矩阵存在一些问题。反射是从错误的视图位置看到的,或者只是反转屏幕上看到的内容。
然而,我需要的是一个真实的镜像反射。在大多数教程中,他们说你应该只缩放(1,-1,1)视图矩阵或使用gl_scalef(1,-1,1),但这些都不适用于我 - 效果如上所述。
下面是我目前获得的两个截图,在渲染(镜像)场景之前立即使用以下代码:
view = m_camera*mat4::scale(1,-1,1);
projection = m_cameraPerspective;
对应的原始场景:
反射场景:
注意,这实际上是如何反射的场景(例如,从顶部看到的云是可见的而不是从底部看到的水 - 如在原始渲染中那样)但是位置在某种程度上是不正确的,例如,白色立方体是不在屏幕上的相同位置,例如,与窗口边界的距离不同。)
请忽略错误的颜色。那是因为我快速攻击了一个将像素值写入tga文件的函数(来自渲染纹理)。当实际启用渲染镜像平面上的纹理时(目前在两个渲染步骤中都禁用了),颜色是正确的。
我的反射矩阵出了什么问题?
答案 0 :(得分:1)
正如评论中所述,这实际上是正确的。