【发布时间】:2011-07-20 10:53:36
【问题描述】:
情况
我正在实现一个高度字段编辑器,有两个视图。主视图以 3D 显示高度字段,启用轨迹球导航。编辑视图将高度字段显示为 2D 图像。
在这个高度场的顶部,可以应用新的图像,改变它的外观(切割孔、降低、升高特定区域)。这称为补丁。
高度场和补丁都是单通道灰度 png 图像。
对于可视化,我使用 visualisation library 框架 (c++) 和 OpenGL 4。
任务
实现在 2D 编辑视图(正交投影)中可用的绘图工具,在运行时创建此补丁(作为单独的图像)。
重要说明/限制
- 高度场的图像可以缩放、旋转和转置。
- 补丁需要与高度场具有相同的比例,因此补丁中的一个像素正好覆盖高度场中的一个像素。
- 由于缩放,帧缓冲区像素的大小可能大于或小于高度场/补丁图像像素的大小。
- 场景包含不应出现在补丁中的对象(例如:指向箭头)。
问题 这项任务的正确方法是什么?到目前为止,我有以下想法:
- 使用某种 QT 画布创建补丁,然后将其映射到高度场图像提案并将其保存为新补丁。这将在每次用户开始绘图时完成,这样实现撤消将很容易(删除最后创建的补丁)。
- 使用中性色图像结合 textre 缓冲区对象来自己实现某种画布。这样,每次用户停止绘制 canvas 的内容时,都会将其映射到高度字段并保存为补丁。为下一幅画重置画布。
- 以下是一些使用帧缓冲区对象的示例。但是我不确定这种方法是否符合我的需求。当我使用open gl将子图像绘制到帧缓冲区时,结果图像不会包含所有数据吗?
【问题讨论】:
-
如何在 3D 中绘制高度场?您是否正在寻找从 2D 地图中绘制高度场的算法?
-
没有。绘制高度字段可以正常工作。我使用 2D 纹理和自定义着色器,它也将存储在 texture2DArray 中的补丁应用到高度场。这一切正常。我不确定如何在运行时创建新的。
-
“可视化库框架”? This one?如果是这样,请编辑您的问题并添加链接。
-
吉普那个。我会链接它。
-
这是作业的剪切和粘贴工作还是一些最低端的承包网站?请为鲍勃,自己解决你的作业。它实际上对你有好处。您(或关心您的人)实际上支付了您的教育费用!让其他人完成它会浪费机会和原始现金。