纹理球体C#

时间:2014-01-30 11:26:49

标签: c# geometry texturing

我目前正在使用基于Managed DX和C#的全景查看器。

我创建了一个球体网格,现在我想用地球图纹理它。

我在Texture对象中加载纹理但是当我查看结果时,纹理会在经度和纬度上重复。

我认为我需要一个像素着色器,但我必须说我不知道​​如何创建一个像素着色器。

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果它有纹理但只是重复那么它不是着色器问题。 您应该更正夹紧或U / V坐标。 着色器只是帮助您为纹理渲染添加材质,而不是修改纹理的布局(U / V)。

这是如何针对 flat 网格设置UV的粗略尝试:

Mesh
+----------+----------+----------+ V=1.00
|0        3|3        5|5        7|
| vertices |          |          |
|          |          |          |
|1        2|2        4|4        6|
+----------+----------+----------+ V=0.66
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+ V=0.33
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+ V=0.00
U=0        U=0.33     U=0.66     U=1.00

我希望这会有所帮助。如果你想在网格上放置地球的地图,网格比纹理大。

顶点顺序以及它们的连接方式并不相关,我只是编写了一些顶点索引来表明这只是一个完整的网格。

你正在使用一个不平坦的球体,因此有一个关于如何在平面上投射非平面的整体理论。

这可以帮助你更进一步:

Google for "Earth Spherical Texture Map"

出于好奇:为什么要使用MDX?是不是被XNA取代了?你试过Unity3D吗?像这样的东西几乎可以开箱即用......只需将相机放入球体内并在编辑器中调整值......也许我错过了一些东西。我只是很好奇:)