0

我正在编写一个简单的 3D 渲染引擎。
我的 3D 处理的最终结果是像素数据。接下来我需要用 GDI+ 在屏幕上显示它。
我正在使用 WinForms 和 Visual Basic。我直接在表单的 ClientRectangle 上绘图。

我有一些疑问。
在我处理一个像素之后,我应该先将像素数据写入缓冲区,而不是将每个像素单独发送到 GDI+?
- 如果是这样,我应该一次缓冲多少屏幕?全屏,半屏,四分之一,八分之一?我认为这里可能存在 RAM 使用/性能权衡。
- 像素缓冲区的最佳数据结构是什么?
- 我使用哪个 GDI+ 命令来渲染像素缓冲区(或单个像素)?是否可以避免创建位图作为中间步骤并将像素数据直接发送到屏幕?

我预计的最大屏幕尺寸为 1600x1200。RAM 可能低至 1GB。

谢谢。

4

1 回答 1

2

希望你能在这里找到一些答案

  1. 首先将数据写入 RGBA 结构的缓冲区。例如,如果您想渲染多个“层”然后再合成这些层,这将变得很容易。如果您想在某个时候执行任何延迟处理,它也将变得容易。完整(平铺?)渲染完成后,您可以将其刷新到输出位图/文件。
  2. 这取决于您允许用户渲染的分辨率。如果要渲染千兆像素图像,则需要以合理的大小平铺它。我建议瓷砖大小是可配置的,然后您可以在测试后将其设置为合理的默认值。
  3. 如果您不希望执行任何延迟着色,我建议您从一个简单的 RGBA 缓冲区开始。
  4. 如果您不执行可以放入内存的平铺渲染/渲染图像,您可以简单地使用Bitmap.LockBits并以这种方式写入数据。如果您使用平铺渲染,您将需要找到一个允许您一次渲染扫描线的库(并将其设为“平铺”)或修复您想要编写 TGA、PNG 和查找/写入的文件格式直接进入文件。将图像转储为 RAW 文件,然后使用命令行工具进行转换也是另一种选择。

希望这可以帮助!

于 2012-04-24T18:32:58.740 回答