Черепица текстуры поверх буфера вершин? (Windows Phone 7 / XNA) - PullRequest
0 голосов
/ 15 декабря 2010

Я создаю плоскую геометрию на основе вершин с целью создания 2D-ландшафта для игры типа 2D-скроллер.

Пока что я могу точно создать буфер вершин и нарисовать любой треугольник на экране, который я хочу.Однако у меня есть проблема с текстурированием.Как я могу текстурировать треугольники, используя плитки (если это вообще возможно, даже).Я использую класс BasicEffect.

Каким будет хороший алгоритм для настройки УФ-данных по всем вершинам таким образом, что текстура будет плавно распределяться по всем из них n раз?

Моя текущая идея состоит в том, чтобы получить самые левые и самые правые вершины (а также самые верхние, самые нижние), получая размеры всей геометрии на основе этого, затем проходя через каждый треугольник и устанавливая UV его вершин (основываясь наширину / высоту треугольников) до значения, при котором будет использоваться фрагмент текстуры, так что он будет сливаться со следующим (т. е. одна вершина UV будет равна 0,1, 0,3, а следующая - 0,2, 0,4).

Это кажется немного сложным и имеет ОГРОМНОЕ отступление, размер плитки должен быть больше, чем размер самой большой грани треугольника, но это единственный способ, которым я могу думать об этом.Я пытался найти решение для поиска в Google или хотя бы кого-то, кто сделал то же самое, что и я, но ничего не придумал.

1 Ответ

3 голосов
/ 15 декабря 2010

Да, вам нужно будет найти алгоритм для правильной настройки ваших текстовых координат ... это, к сожалению, функция того, как выглядят ваши текстуры и ваша геометрия, поэтому я не уверен, насколько хорошо мы сможем помочь.

Что касается технического бита, вы можете установить TextureAddressMode на Wrap, и графический процессор позаботится о том, чтобы сэмплировать текстуру в соответствии с мозаикой на основе УФ.

graphics.GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap;  
graphics.GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap;  
...