合并纹理上的XNA纹理坐标

合并纹理上的XNA纹理坐标,xna,xna-4.0,texture-mapping,Xna,Xna 4.0,Texture Mapping,纹理坐标有问题。首先我想描述一下我想做什么,然后我会问这个问题 我想有一个网格,有更多的纹理只使用一个大纹理。“大纹理”合并网格在其中使用的所有纹理。我做了一个合并纹理的例程,这没有问题,但我仍然需要修改纹理坐标,因此现在只使用一个纹理而不是多个纹理的网格将所有内容都放置好 如图所示: 在左上角我得到了一个纹理(我们称之为A),我合并成了一个大纹理,右边的一个(B)。A的左上角为0,0,右下角为1,1。为了便于使用,假设B.width=A.width*2,高度也是如此。因此,在B上,迷你纹理(

纹理坐标有问题。首先我想描述一下我想做什么,然后我会问这个问题

我想有一个网格,有更多的纹理只使用一个大纹理。“大纹理”合并网格在其中使用的所有纹理。我做了一个合并纹理的例程,这没有问题,但我仍然需要修改纹理坐标,因此现在只使用一个纹理而不是多个纹理的网格将所有内容都放置好

如图所示:

在左上角我得到了一个纹理(我们称之为A),我合并成了一个大纹理,右边的一个(B)。A的左上角为0,0,右下角为1,1。为了便于使用,假设B.width=A.width*2,高度也是如此。因此,在B上,迷你纹理(M原来是A)的右下角应该是0.5,0.5

到目前为止,我在理解这些方面没有问题,我希望我能理解。但这里的问题是,纹理坐标是:

  • 1以上
  • 否定的
在原始A上。M上应该是什么

比方说,A有-0.1,0-是-0.05,0在B里面的M上吗

那些在0..1区域之外的数字呢?A上的-3.2,0是-1.6还是B上的-3.1?所以我剪辑的部分是%1除以2(因为我上面说过宽度是两倍的),还是我应该把整数除以2?据我所知,到目前为止,这个区域之外的数字是关于镜像纹理的。我如何管理它,使输出不包含来自B的橙色纹理

如果我的问题不够清楚(我的英语不是很熟练),请提问,我会编辑/回答,请帮我澄清我的困惑:)

提前感谢:
Péter

单个纹理的坐标在[0-1,0-1]范围内

新纹理的坐标在[0-1,0-1]范围内

在由四个单一纹理组成的新纹理中,算法必须以这种方式转换纹理坐标

  • 蓝色单正方形纹理将在[0-0.5中具有新坐标, 0-0.5]范围
  • 橙色单正方形纹理将具有新坐标 在[0.5-1,0-0.5]范围内

我明白了。那些超出范围的坐标呢?翻译有什么规定吗?(从[0-1,0-1]生成[0-0.5,0-0.5]只是一个简单的除法,但是如果[0-1,0-1]中的坐标不在范围内,而是在1.3或-4.7等范围内,该怎么办?)您应该阅读这篇文章,它是关于xna 3.1的,但是信息是有效的,尽管在xna 4.0中,您只有三种寻址模式wrap、mirror和clamp。对于范围内和范围外的值,您必须始终以相同的方式工作,问题是使用了什么纹理寻址模式。。。如果不是钳制,你就有麻烦了,因为复制包裹和镜像addresing可能不值得