Я хочу повторить небольшую текстуру 2x2 пикселей на большом квадрате, например, 50x50 пикселей.Повторение текстуры
Набор вершин -
float X = 100, Y = 100, Width = 50, Height = 50;
float TextureLeft = 0, TextureTop = 0, TextureRight = 25, TextureBottom = 25;
Vertices[0].x = X;
Vertices[0].y = Y + Height;
Vertices[0].z = 0;
Vertices[0].rhw = 1;
Vertices[0].tu = TextureLeft;
Vertices[0].tv = TextureBottom;
Vertices[1].x = X;
Vertices[1].y = Y;
Vertices[1].z = 0;
Vertices[1].rhw = 1;
Vertices[1].tu = TextureLeft;
Vertices[1].tv = TextureTop;
Vertices[2].x = X + Width;
Vertices[2].y = Y;
Vertices[2].z = 0;
Vertices[2].rhw = 1;
Vertices[2].tu = TextureRight;
Vertices[2].tv = TextureTop;
Vertices[3].x = X;
Vertices[3].y = Y + Height;
Vertices[3].z = 0;
Vertices[3].rhw = 1;
Vertices[3].tu = TextureLeft;
Vertices[3].tv = TextureBottom;
Vertices[4].x = X + Width;
Vertices[4].y = Y;
Vertices[4].z = 0;
Vertices[4].rhw = 1;
Vertices[4].tu = TextureRight;
Vertices[4].tv = TextureTop;
Vertices[5].x = X + Width;
Vertices[5].y = Y + Height;
Vertices[5].z = 0;
Vertices[5].rhw = 1;
Vertices[5].tu = TextureRight;
Vertices[5].tv = TextureBottom;
Draw -
DrawPrimitive(D3DPT_TRIANGLELIST, 0, 6);
Проблема «глюк» в крае между треугольниками, вероятно, из-за неправильных вершин координат, а также «глюк» на четырехъядерных границ.
Оригинальная текстура - http://i.imgur.com/tNqYePs.png
Результат - http://i.imgur.com/sgUZvqE.png
Вы не указали состояние растеризатора, которое вы используете. Возможно, вам не хватает настроек текстурного зажима/повтора. Что еще вы вызываете перед DrawPrimitive для настройки текстуры? –
Не могли бы вы сказать, какие настройки растеризатора/зажима/повтора должны быть установлены? Я рисую пустую сцену с одним квадратом текстуры. – Demion
Параметр «повтор» называется «обертка» в DX. Я добавил ответ со ссылкой на MSDN, если у вас есть вопросы о значениях. –