2017-07-04 157 views
0

我试图实现一个OpenGL程序来生成一个由中心球​​体组成的场景动画,其中场景中的每个对象(减去中心球体)执行旋转运动它的质心和中心球体周围。球由抛光不锈钢制成,其表面具有像镜子一样的场景中其他物体的反射。对于场景中的每个对象(减去球体),我需要使用不同的纹理进行纹理映射。使用“环境地图”方法在中央球体上产生镜面效果。我研究了与这个过程有关的问题,而我绝对不能理解的是如何让这个动画中反映的场景中的其他对象。我在这里看到的一个话题(这是我需要做的最接近的事情),可以帮助我,但没有回答,在链接OpenGL Environment mapping ReflectionOpenGL中场景中其他对象的反射

如果有人能给我任何想法,我将非常感激。这是一项大学工作,对象构建和轮换部分之前已经完成。非常残酷的问题是如何在这个中心领域实现这些运动物体的反射。

+0

对不起,忘记把这个信息,我用的是java的opengl4。 – wgrt

+0

您的标签应反映该信息。我已经删除了多余的标签。 –

+0

有点phisics:[菲涅耳方程](https://en.wikipedia.org/wiki/Fresnel_equations#Power_or_intensity_equations)说,源(你的对象中的一个像素)和表面法线(一个平面与球体相切)与正常和你的眼睛(相机位置)相同 – Ripi2

回答

0

通常的解决方案是创建一个动态立方体贴图。在每一帧中,从中心球的视点渲染场景(锥体:fov = 90,纵横比= 1,接近平面=半径+ epsilon)6次(每个方向一次),并将结果放入一个立方体贴图。

然后为中心球体写一个像素着色器,它从这个立方体贴图中抽样。

它不会是完美的,但接近。

这个问题还有其他解决方案,但我认为这是OpenGL最容易开发的。

如果需要更正确的解决方案,那么您不得不诉诸其他技术,恐怕。像光线追踪。如果您只有简单的几何图形(平面,球体),那么您可以在像素着色器或计算着色器中编写一个小光线追踪引擎。

+0

对不起,请问你有什么样的代码吗? – wgrt

+0

我已经实现了这一点,但不幸的是我无法分享它。但我认为应该有一些开源代码实现了这一点。就像Ogre3D或其他开源游戏引擎一样。 – geza

+0

啊啊谢谢你! – wgrt