Определение индекса подтекста, когда координаты находятся на границе - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующие настройки:
У меня есть 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;

Я в настоящее время не принимаю во внимание проблему.

Вот визуализация проблемы:
enter image description here

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

Есть еще один случай, когда я не знаю, как решить:

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...