给定目标矩形和x / y偏移值,我需要在该目标矩形的范围内绘制图像。如果偏移将图像推离矩形的边缘,则“推出”的部分应出现在目标矩形的相对侧。简单来说,我需要滚动背景。
在GDI中,我可以使用一个使用tile处理模式的“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是一个存储x / y / width / height / color的简单类。如何更新此方法以便可以使用xOffset和yOffset进行纹理包装?请记住,我的最终目标是滚动背景,随着玩家前进而循环。
顺便说一句,RenderTexture()方法是一个“库方法”,可以从我的程序中的任何地方调用...所以如果我做的事情效率很低或者不明智,我会欢迎友好警告!我主要担心的是让包装背景起作用。
答案 0 :(得分:0)
我不确定精灵机制是否允许我要解释的内容,但是2个三角形当然可以。如果这不适用于精灵,请直接使用三角形:
纹理子系统直接支持您所要求的内容,它称为纹理包装。
0,0-1,1
范围,则可以使用0+xoffset/tex_x_size, 0+yoffset/tex_y_size, 1+xoffset/tex_x_size, 1+yoffset/tex_y_size
作为纹理坐标。 D3DTADDRESS_WRAP
和D3DSAMP_ADDRESSU
采样器状态设置为D3DSAMP_ADDRESSV
。请注意,这是采样器状态的默认。就是这样。现在,具体回到D3D.Sprite,Draw方法采用一个矩形来指示要使用的纹理部分。你试过画xoffset, yoffset, xOffset+obj,Width, yoffset+obj.height
吗?这只有在精灵子系统使用包装的采样器时才有效,而且我不知道精灵是如何在内部实现的。