Обтекание текстуройTexture wrapping

Обтекание текстур меняет базовый способ, которым Direct3D растеризует текстурированные многоугольники с помощью координат текстуры, указанных для каждой вершины.Texture wrapping changes the basic way that Direct3D rasterizes textured polygons using the texture coordinates specified for each vertex. Во время растеризации многоугольника система выполняет интерполяцию между координатами текстуры в каждой вершине многоугольника для определения текселя, который должен использоваться для каждого пикселя многоугольника.While rasterizing a polygon, the system interpolates between the texture coordinates at each of the polygon's vertices to determine the texels that should be used for every pixel of the polygon. Как правило, система воспринимает текстуры как двухмерные плоскости, интерполируя новые тексели, используя короткий маршрут из точки А текстуры в точку Б. Если точка А представляет собой координаты на текстуре 0,8 и 0,1, а точка Б — координаты 0,1 и 0,1, то линия интерполяции выглядит так, как представлено на следующей диаграмме.Normally, the system treats the texture as a 2D plane, interpolating new texels by taking the shortest route from point A within a texture to point B. If point A represents the u, v position (0.8, 0.1), and point B is at (0.1,0.1), the line of interpolation looks like the following diagram.

Диаграмма линии интерполяции между двумя точками

Обратите внимание, что кратчайший путь между точками A и B на этом рисунке проходит примерно через середину текстуры.Note that the shortest distance between A and B in this illustration runs roughly through the middle of the texture. Включение обтекания координат текстуры U или V изменяет то, каким образом Direct3D определяет кратчайший путь между координатами на текстуре в направлении U или V.Enabling u-texture or v-texture coordinate wrapping changes how Direct3D perceives the shortest route between texture coordinates in the u-direction and v-direction. По своему определению обтекание текстур заставляет средство прорисовки выбирать кратчайший путь между наборами координат текстуры, предполагая, что точки 0,0 и 1,0 совпадают.By definition, texture wrapping causes the rasterizer to take the shortest route between texture coordinate sets, assuming that 0.0 and 1.0 are coincident. Последняя часть — это сложная часть: Вы можете представить, что включение текстуры, заключив в одном направлении заставляет систему обрабатывать текстуры, как если бы, если это были обернуть вокруг цилиндра.The last bit is the tricky part: You can imagine that enabling texture wrapping in one direction causes the system to treat a texture as though it were wrapped around a cylinder. В качестве примера рассмотрим следующую диаграмму.For example, consider the following diagram.

диаграмма текстуры с двумя точками, обернутой вокруг цилиндра

На предыдущем рисунке показано как обтекание в направлении U влияет на то, как система интерполирует координаты текстуры.The preceding illustration shows how wrapping in the u - direction affects how the system interpolates texture coordinates. Используя те же точки, что и в примере для обычных текстур без обтекания, можно заметить, что короткий путь между точками A и B уже не проходит посередине текстуры; теперь он лежит через границу, где вместе располагаются координаты 0,0 и 1,0.Using the same points as in the example for normal, or nonwrapped, textures, you can see that the shortest route between points A and B is no longer across the middle of the texture; it's now across the border where 0.0 and 1.0 exist together. Обтекание в направлении V работает аналогичным образом, за исключением того, что происходит оборачивание текстурой цилиндра, лежащего на боку.Wrapping in the v-direction is similar, except that it wraps the texture around a cylinder that is lying on its side. Обтекание одновременно в направлениях U и V является более сложным.Wrapping in both the u-direction and v-direction is more complex. В этом случае текстура представляется в виде тора или кольца.In this situation, you can envision the texture as a torus, or doughnut.

Наиболее распространенное практическое применение обтекания текстур — сопоставление окружения.The most common practical application for texture wrapping is to perform environment mapping. Обычно текстурированный с помощью карты окружения объект выглядит сильно отражающим и демонстрирует в зеркальном отображении окружение объекта в сцене.Usually, an object textured with an environment map appears very reflective, showing a mirrored image of the object's surroundings in the scene. Для примера представьте комнату с четырьмя стенами, на каждой из который изображена одна из букв — R, G, B, Y и соответствующие буквам цвета: красный, зеленый, синий и желтый.For the sake of this discussion, picture a room with four walls, each one painted with a letter R, G, B, Y and the corresponding colors: red, green, blue, and yellow. Карта сопоставления окружения для такой простой комнаты может выглядеть как на следующем рисунке.The environment map for such a simple room might look like the following illustration.

изображение вертикальных полос красного, зеленого, синего и желтого цветов

Представьте, что потолок комнаты поддерживается четырехгранной колонной с полностью отражающей поверхностью.Imagine that the room's ceiling is held up by a perfectly reflective, four-sided, pillar. Сопоставить текстуру карты окружения колонне просто, а сделать так, чтобы колонна выглядела так, будто она отражает буквы и цвета — сложнее.Mapping the environment map texture to the pillar is simple; making the pillar look as though it is reflecting the letters and colors is not as easy. На следующей схеме показана каркасная модель колонны с применимыми координатами текстуры, указанными рядом с вершинами в верхней части колонны.The following diagram shows a wire frame of the pillar with the applicable texture coordinates listed near the top vertices. Шов в месте, где обтекание пересекает края текстуры, показан пунктирной линией.The seam where wrapping will cross the edges of the texture is shown with a dotted line.

изображение прямоугольника, разделенного пунктирной линией

При включенном обтекании в направлении U на текстурированной колонне правильно отображаются цвета и символы карты сопоставления окружения, а в месте шва в передней части текстуры средство программной прорисовки надлежащим образом выбирает кратчайший маршрут между координатами текстуры с учетом того, что координаты U 0,0 и 1,0 расположены в одном и том же месте.With wrapping enabled in the u-direction, the textured pillar shows the colors and symbols from the environment map appropriately and, at the seam in the front of the texture, the rasterizer properly chooses the shortest route between the texture coordinates, assuming that u-coordinates 0.0 and 1.0 share the same location. Текстурированная колонна выглядит как на следующем рисунке.The textured pillar looks like the following illustration.

изображение колонны, состоящий из красного, зеленого, синего и желтого квадрантов

Если обтекание текстуры не включено, средство программной прорисовки не производит интерполяцию в направлении, необходимом для создания правдоподобного отраженного изображения.If texture wrapping isn't enabled, the rasterizer does not interpolate in the direction needed to generate a believable, reflected image. Вместо этого область в передней части колонны содержит сжатую по горизонтали версия текселей между координатами U 0,175 и 0,875, так как они проходят через центр текстуры.Rather, the area at the front of the pillar contains a horizontally compressed version of the texels between u-coordinates 0.175 and 0.875, as they pass through the center of the texture. Эффект обтекания не проявляется.The wrap effect is ruined.

Не следует путать обтекание текстур с режимами адресации текстур с аналогичным названием.Do not confuse texture wrapping with the similarly named texture addressing modes. Обтекание текстур выполняется до адресации текстуры.Texture wrapping is performed before texture addressing. Убедитесь, что текстура упаковки данных не содержит все координаты текстуры за пределами диапазона [0.0, 1.0] так, как это будет привести к неопределенным результатам.Be sure the texture wrapping data does not contain any texture coordinates outside of the range of [0.0, 1.0] because this will produce undefined results. Дополнительные сведения об адресации текстур см. в статье Режимы адресации текстур.For more information about texture addressing, see Texture addressing modes.

Перенос схемыDisplacement map wrapping

Карты смещения интерполируются движком тесселяции.Displacement maps are interpolated by the tesselation engine. Поскольку режим обтекания для движка тесселяции указать невозможно, обтекание текстуры невозможно выполнить с помощью карт смещения.Because the wrap mode cannot be specified for the tessellation engine, texture wrapping cannot be performed with displacement maps. Приложение может использовать набор вершин, который обеспечивает интерполяцию для обтекания в любом направлении.An application is able to use a set of vertices that forces the interpolation to wrap in any direction. В приложении также можно указать, чтобы интерполяция производилась простым линейным способом.The application can also specify the interpolation to be done as a simple linear interpolation.

Связанные разделыRelated topics

ТекстурыTextures