从多个Texture2D生成一个Texture2D
我的问题是我需要使用Texture2D来表示长度变化的地板,这意味着地板的侧面具有侧面的图像,并且在中间重复相同的“中间”图像,如下所示:
为了实现此目的,我得到了“左边缘”、“中边缘”和“右边缘”纹理,问题是我不知道如何将它们合并成一个单一的texture2D,
在运行时这样做很重要,因为地板长度正在变化(水平), 我读到你可以使用 SetData 做到这一点,但我不知道如何...
对我来说非常重要的是它将充当一个纹理而不是多个纹理部分,因为我正在使用 Farseer 物理引擎来移动地板并使用它。
我正在使用 C# 和 XNA 与 Visual Studio 2010,我是一个几乎有经验的 C# 程序员,
谢谢!
My problem is the I need to represent a length-changing floor using a Texture2D, which means a floor that the sides has the image of the sides, and in the middle it repeats the same 'middle' image, like so:
To achieve this, I get the 'left edge', the 'middle' and the 'right edge' textures, problem is I don't know how to merge them into one single texture2D,
It is important to do that at run-time because the floor length is changing (horizontally),
I read you can do that using SetData but I have no idea how...
It is very important for me that it will act as one texture and not multiple texture parts because I am using Farseer Physics Engine to move the floor and use it.
I am using C# and XNA with Visual Studio 2010, I am an almost-experienced C# programmer,
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个答案可能对您有帮助。您应该使用 HLSL 来重复地板,或者应该在 RenderTarget 上绘制地板并将其保存为单个纹理。享受。
This answer may help you. Either you should use HLSL for repeating your floor or you should draw your floor on a RenderTarget and save it as single Texture. Enjoy.
首先,创建一个新的 Texture2D 作为地板纹理,指定适当的宽度和高度。然后,使用 GetData 方法。最后,使用 SetData 方法 适当设置新纹理的数据(检查链接,可以指定起始索引)。
警告:GetData 和 SetData 方法速度很慢。如果您只需在每个游戏中创建一次此纹理(例如在初始化时),那么这不是问题。
First, create a new Texture2D to serve as your floor texture, specifying the appropriate width and height. Then, get the data of the three textures you want to merge, using the GetData method. Finally, use the SetData method to set the data of the new texture as appropriate (check the link, you can specify the start index).
Warning: GetData and SetData methods are slow. If you need to create this texture only once per game (at the initialization for example), it's not a problem, though.
您正在使用 Farseer...但它并不禁止您使用平铺方法...
我不知道 Farseer,但我认为它提供了一个变换矩阵...
执行以下操作:
You are using farseer... but it does not prohibit you to use a tiling approach...
I don't know farseer, but I suppose that it provide a transform matrix...
do: