我正在尝试实现OpenGL程序来生成由中心球体组成的场景的动画,其中场景中的每个对象(减去中心球体)围绕其质心和围绕中心球体执行旋转运动。球由抛光的不锈钢制成,表面像镜子一样,是场景中其他物体的反射。对于场景中的每个对象(减去球体),我需要使用不同的纹理进行纹理映射。使用“环境贴图”方法在中心球体上产生镜像效果。我研究了与这个程序有关的问题,我无法理解的是如何在场景中反映出该动画中的其他对象。我在这里看到的一个主题(这是我最接近的事情)并且可以帮助我但没有回答的是链接OpenGL Environment mapping Reflection。
如果有人能给我任何想法,我将非常感激。这是一项大学工作,之前已经完成了对象构建和轮换的部分。一个非常残酷的问题是如何在这个中心球体中实现这些运动物体的反射。
答案 0 :(得分:0)
通常的解决方案是创建动态立方体贴图。在每个帧中,从中心球体的视点(截锥体:fov = 90,纵横比= 1,接近平面=半径+ epsilon)渲染场景6次(每个方向一次),并将结果放入立方体贴图中
然后为中心球体写一个像素着色器,从这个立方体贴图中采样。
它不会很完美,但很接近。
此问题还有其他解决方案,但我认为这是最容易在OpenGL中开发的解决方案。
如果需要更正确的解决方案,那么你必须采用其他技术,我很害怕。像光线追踪一样。如果您只有简单的几何图形(平面,球体),那么您可以在像素着色器或计算着色器中编写一个小的光线跟踪引擎。