我试图存储并显示RTS游戏的贴图作为texture2d,但地图太大,而且出现错误“XNA Framework HiDef配置文件支持最大Texture2D尺寸为4096”。我想在一个纹理中整个地图的原因是我可以利用spriteBatch在游戏摄像头中使用的源/目标rectnagle绘制方法。如果这显然不是一个好主意,我如何存储和显示大图像?XNA中的大纹理
XNA中的大纹理
回答
你无法绕过XNA中的纹理尺寸限制。使用多个纹理并在不同的地方绘制它们是非常合理的。处理边界只是少量额外的逻辑。
不要忘记4096乘4096纹理已经是一个高达64MB的纹理内存,未压缩(如果DXT压缩,至少需要10MB)。
如果你关心性能 - 不要。 “源矩形”参数启用纹理图纹 - 但这不是你在这里做的。
此外,通常通过将固定坐标的所有东西(包括背景)传递给Matrix
到SpriteBatch.Begin
,然后Draw
来实现游戏摄像机。您甚至不需要为背景指定源矩形 - 视口将简单地剪切它。
如果您希望导入大于4096平方的纹理,您可以创建一个内容管道扩展以将这些大纹理切割成较小的纹理。或者,如果您只有少量固定地图,只需在图像编辑器中将它们分开即可。
我很担心表演,并认为通过将它全部保存到一个纹理中我非常聪明......不知道为什么。谷歌搜索纹理地图集时,似乎我试图以一种无意的方式使用源矩形参数。我认为我得到了DXT的东西,但我不知道如何在XNA中实现它......另外,如果我要在屏幕外绘制大量的纹理,会妨碍我的表现,还是XNA智能不知何故? Anwyay,我只是简单地通过我的地图块来实现你的相机!非常感谢。 –
@Max如果你可以避开它,可能不太明智的做法是在屏幕外画很多不同的纹理。不过,如果只是一对夫妇,那不应该是一个问题。请参阅[本答复](http://gamedev.stackexchange.com/a/9289/288)以了解性能注意事项的深入说明。您可以使用内容管道启用压缩:在VS中选择您的纹理,按属性F4,展开“内容处理器”节点并将“纹理格式”设置更改为“DxtCompress”。请注意,这是一种有损压缩。 –
- 1. XNA .Fbx纹理
- 2. XNA Windows Phone 7上的超大纹理
- 3. XNA中的随机纹理
- 4. XNA纹理加载速度(对于超大的纹理尺寸)
- 5. XNA程序纹理
- 6. XNA crop 2d纹理
- 7. xna纹理坐标
- 8. XNA - UV纹理或着色器纹理?
- 9. 将xna中的纹理复制到另一个纹理中
- 10. 渲染到纹理填充XNA中的颜色纹理
- 11. 在xna中生成纹理的Mipmapping
- 12. XNA中一些纹理的问题
- 13. HLSL XNA纹理定位
- 14. 旋转2D纹理XNA
- 15. XNA纹理拉伸模糊
- 16. 超级模糊纹理 - XNA
- 17. XNA旋转纹理2D
- 18. XNA纹理图元透明
- 19. 在Xna中,我如何减少纹理的大小?
- 20. 在HLSL纹理变量(XNA)中存储屏幕纹理
- 21. 在XNA中需要纹理2D调整大小?
- 22. 加载纹理在XNA中调整
- 23. 在XNA 4.0中拉伸纹理?
- 24. 在XNA中关闭纹理混合
- 25. XNA清除纹理中间渲染?
- 26. 合并纹理上的XNA纹理坐标
- 27. XNA正在拖动错误的纹理?
- 28. XNA .GetData给出AccessViolationExceptions模型的纹理
- 29. XNA - 渲染到纹理的alpha通道
- 30. XNA - 显示没有窗口的纹理?
你可以将你的图像加载到一个'System.Drawing.Bitmap'中,并创建一个方法从它中检索所需的矩形。 – user1306322
我会尝试 –
我已经有数据绘制到渲染目标,但我想这根本不可能用一个纹理重新绘制它?我可以编写一种方法将纹理划分为更小的纹理,但是这种方法会阻止试图避免遍历所有地图切片的目的。 –