2013-02-13 176 views
3

我一直在试图结合几个riemers教程来制作纹理和点亮的地形。我几乎在那里,但我无法正确使用纹理。我相信SetUpVertices()中的问题是纹理坐标的设置。我现在知道代码读取它们都设置为(0,0),我需要它,以便它们被设置为纹理的角落,但我似乎无法获得正确的代码。任何人都可以协助?xna纹理坐标

private void SetUpVertices() 
{ 
    vertices = new VertexPositionNormalTexture[terrainWidth * terrainHeight]; 
    for (int x = 0; x < terrainWidth; x++) 
    { 
     for (int y = 0; y < terrainHeight; y++) 
     { 
      vertices[x + y * terrainWidth].Position = new Vector3(x, -y, heightData[x, y]); 
      vertices[x + y * terrainWidth].TextureCoordinate.X = 0; 
      vertices[x + y * terrainWidth].TextureCoordinate.Y = 0; 
     } 
    } 
} 

我已经添加Game1.cs的全部代码,这pastie http://pastebin.com/REd8QDZA

+0

我已经编辑你的题目。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2013-02-13 17:15:14

+0

考虑到标签与帖子内容的相关性,如果标题本身也是相关的,标题将不可避免地会包含它们? – luigivampa 2013-02-13 17:19:42

+0

不,不是。请阅读该链接。如果标签与问题相关,则将它们放置在标签区域中。如果它们与问题无关,那么请不要使用它们。 – 2013-02-13 17:34:37

回答

3

您可以通过从0到1的插值伸展在表面纹理:

vertices[x + y * terrainWidth].TextureCoordinate.X = x/(terrainWidth - 1.0); 
vertices[x + y * terrainWidth].TextureCoordinate.Y = y/(terrainHeight - 1.0); 
+0

我知道这会是一件简单的事情,但我无法做到。我已经坚持了好几天!我爱你:) – luigivampa 2013-02-13 17:10:15

+0

我注意到,当我缩放地形时,纹理在整个地形上都被拉伸了。我希望实现的是添加到每个三角形的纹理。感谢您已经提供的帮助,但我可以为您提出另一个建议吗? – luigivampa 2013-02-13 18:22:30

+0

@luigivampa你需要从0 - 1开始指定纹理,如果你想重复,只需去<0 and > 1. – 2013-02-13 18:23:40