将纹理映射到DirectX球体?

时间:2017-01-15 21:35:43

标签: c# directx gis sharpdx

我正在使用类似于Google地球的DirectX编写虚拟地球仪。到目前为止,我已经完成了曲面细分,并在整个球体上进行了包裹纹理测试,这是成功的。我写的纹理坐标与纬度和经度相对应(90lat,-180lon = 0,0和-90lat,180lon = 1,1)。

对于这个项目,我需要在球体上叠加几个图像切片。例如,8个图像跨越90度90度。这些图块可以动态更新(即可以在平移时添加或删除图块)。我已经考虑过使用渲染目标视图并直接绘制瓷砖,但我确信有更好的方法。

我该怎么做呢?有没有办法将纹理设置为仅跨越特定的纹理坐标空间?即从(0,0)到(0.25,0.5)?

1 个答案:

答案 0 :(得分:0)

有三种直接的解决方案(可能还有更复杂的解决方案)。

  1. 您可以创建与图块覆盖的球体部分相匹配的几何体,然后绘制它们,在每次绘制调用之前设置正确的纹理(如果以简单的方式布置图块,您也可以使用实例化和单次抽奖)。
  2. 您可以编写一个像素着色器来评估纹理坐标,并使用变换后的纹理坐标选择合适的纹理。
  3. 将所有纹理渲染为大纹理并使用它来渲染球体。每当图块更改时,将大纹理绑定为渲染目标,并在其上绘制新图块。