Учитывая прямоугольник назначения и значение смещения x/y, мне нужно, чтобы изображение было нарисовано в пределах этого прямоугольника назначения. Если смещение будет сдвигать изображение с края прямоугольника, то часть, которая «выталкивает», должна появиться на противоположной стороне прямоугольника назначения. Проще говоря, мне нужен прокручиваемый фон.Эффект «Обтекание» с помощью Direct3D.Texture
В GDI, я могу сделать это с «ImageAttributes» объект, который использует режим плитки обертку:
ImageAttributes attributes = new ImageAttributes();
attributes.SetWrapMode(System.Drawing.Drawing2D.WrapMode.Tile);
Rectangle rectangle = new Rectangle(0, 0, (int)width, (int)height);
g.DrawImage(bmp, rectangle, -x, -y, width, height, GraphicsUnit.Pixel, attributes);
Теперь мне нужен способ, чтобы сделать это в DirectX. Предположим, что это метод я прямо сейчас:
public void RenderTexture(PrismDXObject obj, D3D.Texture texture, int xOffset, int yOffset)
{
if (obj != null && texture != null)
{
_renderSprite.Begin(D3D.SpriteFlags.AlphaBlend);
_renderSprite.Draw(texture,
new Rectangle(0, 0, (int)obj.Width, (int)obj.Height),
new Vector3(0.0f, 0.0f, 0.0f),
new Vector3((int)obj.Left, (int)obj.Top, 0.0f),
obj.RenderColor);
_renderSprite.End();
}
}
}
... где «_renderSprite» является D3D.Sprite и PrismDXObject простой класс, который хранит х/у/ширина/высота/цвет. Как я могу обновить этот метод, чтобы xOffset и yOffset могли использоваться для обертывания текстуры? Помните, моя конечная цель - это прокручивающий фон, который петли, когда игрок идет вперед.
Кстати, этот метод RenderTexture() предназначен для «библиотечного метода», который может быть вызван из любой точки моей программы ... поэтому, если я делаю что-то действительно неэффективное или плохое, я бы приветствовал дружелюбное предупреждение! Моя главная проблема заключается в том, чтобы заставить обертывающий фон работать.
Ну, я действительно думал, что это простая вещь; Прокрутка фонов - довольно простая (и универсальная) вещь в большинстве видеороликов с прокруткой. Нет ли «гладкого» способа сделать это? – 2009-10-13 22:04:28