2014-06-05 168 views
0

我目前正在研究我的OpenGL场景(基本上由一个skycube和一个小的白色立方体组成)的反射。反射应该发生在xz平面上(y = 0)。我已经设法将它变成FBO,但目前在视图或预测矩阵中存在一些问题。反射要么从错误的视角位置看到,要么只是反转屏幕上显示的内容。OpenGL:反射矩阵问题

然而,我需要的是一种真实的镜像反射。在大多数教程中,他们说你应该缩放(1,-1,1)视图矩阵或使用gl_scalef(1,-1,1),但这些都不适用于我 - 效果如上所述。

下面是我目前得到最好的两张截图,使用下面的代码立即渲染(被镜像)场景前:

view = m_camera*mat4::scale(1,-1,1); 
projection = m_cameraPerspective; 

相应的原始场景: ​​

反映的场景: Reflected scene

请注意,这实际上是如何反映的场景(例如,顶部的云是可见的而不是水从底部 - 与原始渲染一样),但是位置在某种程度上不正确,例如,白色立方体不在屏幕上的相同位置,例如与窗口边界的距离不同。

请忽略错误的颜色。这是因为我快速入侵了一个将像素值写入tga文件(从渲染纹理中)的函数。当实际启用渲染镜像平面上的纹理(这两个渲染步骤当前都禁用)时,颜色是正确的。

我的反射矩阵有什么问题?

+2

很难看到截图是否有误。但它可能是正确的。相机可能看起来有点向下。所以多维数据集可以改变它到窗口边界的距离。代码看起来不错,所以结果应该是正确的。 –

+0

是的,我只是设法在镜面上正确地打印它,并看到镜像按预期工作。一旦关闭的最短等待时间结束,我会尽快结束这一切。 – pedjjj

回答

1

正如评论所述,这实际上是正确的。