XNA纹理坐标

3
我一直在尝试结合riemers的几个教程,制作一个带纹理和光照的地形。我已经接近成功了,但是我无法正确应用纹理。我相信问题出现在SetUpVertices()中的纹理坐标设置上。我知道目前代码中读取它们都设置为(0, 0),我需要将它们设置为纹理的角落,但是我似乎无法编写正确的代码。有人能帮忙吗?
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


我已经编辑了您的标题。请参见“问题的标题应该包括“标签”吗?”,共识是“不应该”。 - John Saunders
考虑到标签与帖子内容的相关性,如果标题本身也要相关,那么包含标签是不可避免的吧? - luigivampa
不,不是这样的。请阅读那个链接。如果标签与问题相关,请将它们放在标签区域。如果它们与问题无关,请不要使用它们。 - John Saunders
我已经阅读了这篇文章,如果您的建议可以提高生产效率,我一定会在未来尝试去做。但是我仍然不明白其中的道理。以这个例子为例,我应该将它表述成一个实际的问题,但是问题“如何使用C#在XNA中设置纹理坐标?”仍然包含所有的标签。那么我该如何在不使用它们的情况下提出问题呢?我并不是在挑衅,只是好奇。 - luigivampa
这并不是关于不重复某些文本的问题,而更多地是关于不要拿一个好标题,然后添加一些标签。如果您在好标题中使用“C#”,那就继续使用吧。问题在于,当您有一个标题,例如“xna纹理坐标”,并在开头或结尾添加“C#”或“(C#)”时,只是为了让我们知道问题是关于C#的。这就是标签的作用。 - John Saunders
我现在觉得我们意见一致了。谢谢约翰。 - luigivampa
1个回答

3
您可以通过从0到1进行插值来将纹理延伸到表面上:
vertices[x + y * terrainWidth].TextureCoordinate.X = x / (terrainWidth - 1.0);
vertices[x + y * terrainWidth].TextureCoordinate.Y = y / (terrainHeight - 1.0);

我知道那只是一些简单的东西,但我就是做不对。我已经折腾了好几天了!我爱你,:) - luigivampa
我注意到当我把地形放大时,纹理会被拉伸到整个地形上。我希望实现的是将纹理添加到每个三角形中。感谢您已经给出的帮助,但能否请您提供另一个建议? - luigivampa
@luigivampa 你需要将纹理分配为你想要的,从0到1。如果你想要重复,只需使用<0和>1。 - Reed Copsey
抱歉 Reed,我不明白(我是一个园丁,不是程序员!)。我知道0,0是纹理的左上角,而1,1是右下角,但我如何将其应用为代码?我尝试过许多次使用正确的坐标进行赋值,但通常它只是看起来很模糊。 - luigivampa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接