У меня есть следующие настройки:
У меня есть TextureArea
, который представляет собой прямоугольную область angular, состоящую из двух треугольников, которые охватывают текстуру. Координаты вершин находятся в абсолютных пиксельных координатах.
Эта текстура должна быть разбита на несколько субтекстур размером 256x256.
У меня проблемы с определением фактической субтекстуры, к которой относится TextureArea, когда сторона TextureArea напрямую сидит на границе двух подтекстов.
public struct TextureArea
{
public Vector2 TexCoord0; //
public Vector2 TexCoord1; //
public Vector2 TexCoord2; //
public Vector2 TexCoord3; //
}
Примечание: TexCoords расположены не в определенном порядке, то есть TexCoord0
может быть в верхнем левом углу или TexCoord2
.
Я определяю подтекст следующим образом:
int tileA = (int)(textureArea1.TexCoord0.Y / 256);
int tileB = (int)(textureArea1.TexCoord2.Y / 256);
int tileC = (int)(textureArea1.TexCoord1.Y / 256);
int tileD = (int)(textureArea1.TexCoord0.Y / 256);
int tileE = (int)(textureArea2.TexCoord0.Y / 256);
int tileF = (int)(textureArea2.TexCoord2.Y / 256);
int tileG = (int)(textureArea2.TexCoord1.Y / 256);
int tileH = (int)(textureArea2.TexCoord0.Y / 256);
HashSet<int> tiles = new HashSet<int>(new[] { tileA, tileB, tileC,tileD,tileE,tileF });
if (tiles.Count == 1) //
return tileA;
Я в настоящее время не принимаю во внимание проблему.
Вот визуализация проблемы:

Черные линии - 256px границы. Верхний край моей указанной области кратен 256. Верхний край принадлежит Tile 1 (256/256 = 1), в то время как указанная область текстуры фактически принадлежит Tile 2 .
Есть еще один случай, когда я не знаю, как решить:

Здесь верхняя сторона и нижняя сторона кратно 256, верхний край принадлежит плитке 1, у кого-нибудь есть идеи, как справиться с этим?