【问题标题】:Mapping textures to DirectX sphere?将纹理映射到 DirectX 球体?
【发布时间】:2017-01-15 21:35:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# directx gis sharpdx


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 2018-11-07
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多