Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何绘制大型3D曲面(10000 x 10000点)?_Qt_Opengl_Plot - Fatal编程技术网

Qt 如何绘制大型3D曲面(10000 x 10000点)?

Qt 如何绘制大型3D曲面(10000 x 10000点)?,qt,opengl,plot,Qt,Opengl,Plot,我有一个曲面,给定为r[I,j],phi[I,j],和theta[I,j](球面坐标系中的高度图) 它相当大:大约10公里乘10公里 我知道它可以很容易地绘制为2D彩色地图图像(例如,在PyQtGraph中),但我想以某种方式将其绘制为曲面(以演示环绕地球的效果) 难道还没有人画出这么大的曲面吗?您是如何处理这些问题的?LoD是您必须实现的。对于高程数据,这很容易;四叉树非常适合此任务,您可以使用高质量的过滤器内核。由于四叉树中的细化遵循几何级数,因此总内存需求收敛到原始数据集的2倍 在对球体进

我有一个曲面,给定为
r[I,j]
phi[I,j]
,和
theta[I,j]
(球面坐标系中的高度图)

它相当大:大约10公里乘10公里

我知道它可以很容易地绘制为2D彩色地图图像(例如,在PyQtGraph中),但我想以某种方式将其绘制为曲面(以演示环绕地球的效果)


难道还没有人画出这么大的曲面吗?您是如何处理这些问题的?

LoD是您必须实现的。对于高程数据,这很容易;四叉树非常适合此任务,您可以使用高质量的过滤器内核。由于四叉树中的细化遵循几何级数,因此总内存需求收敛到原始数据集的2倍

在对球体进行三角剖分时,有几个注意事项:最终总会出现极点或不连续性;当使用球坐标时,有两个极点,其中微分曲面元素退化,这是您希望避免的

更好的方法是将球体表示为基于立方体6边的贴图;i、 e.假设细分为所需分辨率的立方体的面,以及该网格的每个顶点投影到基本球体的表面上。这样做的一个很好的副作用是,实际上您可以将高度贴图数据存储在立方体贴图纹理图像中,并完成过滤的LoD级别。在顶点着色器中,可以对数据进行采样以置换网格

网格LoD可以通过多种方式实现。但这里有一个有趣的建议:从屏幕空间中的网格开始,将其投影到要采样的球体上。这样,您将为球体中实际可见的部分生成顶点;添加一点边距,以便更好地测量,因为您将置换顶点。地平线上方的顶点将错过球体;很容易将这些顶点精确地剪裁到地平线上(找到二次方程的根)。可以在顶点着色器中执行所有这些操作,并在适用的情况下使用镶嵌着色对其进行调整,以细化栅格


关于10k×10k网格分辨率的说明。除非要在至少20k×20k像素的显示器上显示,否则有限的显示分辨率实际上会对网格进行二次采样,从而导致频率混叠(参见奈奎斯特定理)。

LoD是必须实现的。对于高程数据,这很容易;四叉树非常适合此任务,您可以使用高质量的过滤器内核。由于四叉树中的细化遵循几何级数,因此总内存需求收敛到原始数据集的2倍

在对球体进行三角剖分时,有几个注意事项:最终总会出现极点或不连续性;当使用球坐标时,有两个极点,其中微分曲面元素退化,这是您希望避免的

更好的方法是将球体表示为基于立方体6边的贴图;i、 e.假设细分为所需分辨率的立方体的面,以及该网格的每个顶点投影到基本球体的表面上。这样做的一个很好的副作用是,实际上您可以将高度贴图数据存储在立方体贴图纹理图像中,并完成过滤的LoD级别。在顶点着色器中,可以对数据进行采样以置换网格

网格LoD可以通过多种方式实现。但这里有一个有趣的建议:从屏幕空间中的网格开始,将其投影到要采样的球体上。这样,您将为球体中实际可见的部分生成顶点;添加一点边距,以便更好地测量,因为您将置换顶点。地平线上方的顶点将错过球体;很容易将这些顶点精确地剪裁到地平线上(找到二次方程的根)。可以在顶点着色器中执行所有这些操作,并在适用的情况下使用镶嵌着色对其进行调整,以细化栅格


关于10k×10k网格分辨率的说明。除非要在至少20k×20k像素的显示器上显示,否则有限的显示分辨率实际上会对网格进行二次采样,从而导致频率混叠(参见奈奎斯特定理)。

100M点确实是一个很大的数字。你确定你真的需要这样的精度吗?为什么?好吧,好吧,一些3D引擎可以忽略过多的点?只有在放大区域时才需要完全精度,而不是在整个曲面上。是。但是构建LOD是一项很难在运行时完成的任务。如果你将分辨率降低一点,你可以做一个8192^2的纹理并在球体上显示结果。或者多个4096^2纹理。好吧,它不是完整的球体,而是上面的一个区域。此外,我需要在放大时显示3D浮雕…100米点确实是一个很大的数字。你确定你真的需要这样的精度吗?为什么?好吧,好吧,一些3D引擎可以忽略过多的点?只有在放大区域时才需要完全精度,而不是在整个曲面上。是。但是构建LOD是一项很难在运行时完成的任务。如果你将分辨率降低一点,你可以做一个8192^2的纹理并在球体上显示结果。或者多个4096^2纹理。好吧,它不是完整的球体,而是上面的一个区域。此外,我需要显示三维救济放大时。。。