情况
我正在实现一个高度字段编辑器,有两个视图。主视图以 3D 显示高度字段,启用轨迹球导航。编辑视图将高度字段显示为 2D 图像。
在这个高度场的顶部,可以应用新的图像,改变它的外观(切割孔、降低、升高特定区域)。这称为补丁。
高度场和补丁都是一个通道灰度 png 图像。
对于可视化,我使用可视化库框架 (c++) 和 OpenGL 4。
任务
实现一个绘图工具,在 2D 编辑视图(正交投影)中可用,它在运行时创建这个补丁(作为单独的图像)。
重要说明/限制
- 高度场的图像可以缩放、旋转和转置。
- 补丁需要与高度场具有相同的比例,因此补丁中的一个像素正好覆盖高度场中的一个像素。
- 由于缩放,帧缓冲区像素的大小可能大于或小于高度场/补丁图像像素的大小。
- 场景包含不应出现在补丁中的对象(例如:指向箭头)。
问题 什么是完成这项任务的正确方法?到目前为止,我有以下想法:
- 使用某种 QT 画布创建补丁,然后将其映射到高度场图像提案并将其保存为新补丁。这将在每次用户开始绘图时完成,这样实现撤消将很容易(删除最后创建的补丁)。
- 将中性色图像与 textre 缓冲区对象结合使用,自己实现某种画布。这样,每次用户停止绘制画布的内容时,都会将其映射到高度字段并保存为补丁。为下一幅画重置画布。
- 下面是一些使用帧缓冲区对象的示例。但是我不确定这种方法是否符合我的需求。当我使用 open gl 将子图像绘制到帧缓冲区中时,结果图像是否包含所有数据?