我有兴趣构建一个简单的“Google Earth”类型的应用程序(用于覆盖我自己的信息,而不是Google拥有的大量数据)。我希望它只是一个简单的X11应用程序,可以使用位移(地形)信息对球体进行射线追踪。 Ray-sphere交叉非常简单,但是当显示映射投入其中时,它开始变得浑浊。
我想知道是否有一种简单的技术来扩展基本光线球体交叉点以包含位移数据......
答案 0 :(得分:1)
位移贴图非常简单 - 只需对球体进行细分,根据从地图中采样的高度向顶点位置添加偏移量,并对所有碎片进行光线跟踪。
相机离球/地球有多远?如果你就在靠近地面的地方,可能根本不值得制作一个完整的“球体”,只需制作一个“高度场”。如果你很远(一次观察整个星球),那么即使是最高的山也不应该明显地移动表面,所以你应该使用简单的凹凸贴图。还可以考虑使用一种组合 - 一种真正位移的粗略曲面细分,以及残余高度差异的凹凸贴图。
但无论如何,我无法想象为什么你会像你描述问题那样进行射线追踪。只需将其切成三角形并使用OpenGL即可。您可能不需要任何光线跟踪效果。
答案 1 :(得分:1)
我发现了这篇论文:http://www.cgl.uwaterloo.ca/~ecdfourq/GI2008/FourquetGI2008.pdf
以为我会分享,因为它似乎涵盖了我想要做的事情,谢谢你们!
答案 2 :(得分:0)
无论你有一个简单的20-poly球体还是复杂的位移2k-poly球体,Ray-Tracing过程都是一样的。无论光线包含什么,光线都会遍历场景。但它用于实现透明度,反射,折射等视觉效果,并且根据您在问题中所说的内容,我认为您可以不使用项目中的那些。您很可能在这里获得简单的低成本Ray-Casting。
因此,一旦您获得了渲染引擎,就可以将所需的所有位移添加到场景中。修改几何的两种最常见方法是:
置换贴图将实际多边形添加到现有几何体,而凹凸贴图仅通过弯曲曲面法线来模拟视觉效果,从而影响对象的阴影。虽然弯曲法线比tessalating几何图形和添加新的多边形更快,成本更低,但它不会产生精确的阴影效果,因此如果您的应用程序有任何问题,请注意这一点。
另外,请考虑使用自适应 Level of Detail算法和数据结构,因为距离几何体的距离越远,所需的细节越少。