【发布时间】:2026-01-11 21:20:07
【问题描述】:
我的图形设备设置如下:
GraphicsDeviceManager = new GraphicsDeviceManager(GameBase.GameRef);
GraphicsDeviceManager.PreferredBackBufferWidth = 640;
GraphicsDeviceManager.PreferredBackBufferHeight = 480;
GraphicsDeviceManager.ApplyChanges();
我在 google 上找不到任何地方确切解释首选后台缓冲区宽度的含义。
我这样设置渲染目标:
RenderTarget = new RenderTarget2D(
GraphicsDeviceManager.GraphicsDevice,
640,
480,
false,
GraphicsDeviceManager.GraphicsDevice.PresentationParameters.BackBufferFormat,
DepthFormat.Depth24);
我在谷歌上找不到任何关于 640 和 480 对渲染目标的绘制方式的实际含义。
我遇到的问题是,如果我调整窗口大小,一切都会拉伸。我正在尝试了解 monogame 是如何导致这种情况的,然后最终找出解决方案。
一开始我的窗口是 640x480,PreferredBackBufferWidth 和高度是 640/480,渲染目标是 640/480
例如,如果我将窗口大小调整为 1920x1080,一切都会拉伸,因此 monogame 不再将 640x480 纹理渲染到屏幕的 640x480 部分,但我没有更改任何值或为此编写任何代码。
如果我调整屏幕大小,渲染目标应该被销毁并以新的窗口大小重新创建,还是应该更改后台缓冲区的宽度和高度,或两者兼而有之,还是其他?
我很困惑,没有任何在线技术文档足以详细回答。一旦我理解了它,我应该能够编写一些代码,这样当你调整屏幕大小时什么都不会发生,一切都保持相同的大小,并且在右/下边缘周围有一个黑色区域,因为窗口比我大渲染到。
【问题讨论】:
-
目前无法检查。但据我记得,两者都应该调整大小。将后台缓冲区视为“您正在绘制的纸张”,而 RenderTarget 是“您将已绘制的图片投影到的平面”。因此,如果您不想拉伸,那么您需要更改后台缓冲区以在“纸”上有更多空间,然后更改 RenderTarget 以实际有一些“显示绘图的位置”。
-
所以我是一个简单的(示例)场景,您的后台缓冲区应该具有您计划定位的最大大小。
-
我知道你的意思,在 XNA 还活着的时候,很容易找到关于 XNA 教程的帮助,而不是 MSDN 上的基本参考主题。我能找到的最好的是this article,纵横比也有一点。希望对你有帮助
-
你用
RenderTarget做什么?如果您只是在屏幕上进行简单的绘制,则不需要单独的渲染目标。