我有一个3D浮点矩阵,在最坏的情况下,大小可能是(200000x1000000x100),我想使用Qt/OpenGL可视化这个矩阵。
由于元素的数量非常多,我希望以一种方式呈现它们,当相机远离矩阵时,我只显示一些有趣的点,这些点给出了矩阵的近似值。当相机靠近时,我想得到更多的细节,从而计算出更多的元素。
我想知道是否有处理这种可视化的技术。
发布于 2011-07-14 19:58:16
一般的想法被称为level-of-detail渲染,本身就是一门完整的科学。
对于你的域名,我推荐两个步骤:
1)通过在不同大小的立方体中平均(算术平均函数)并缓存这些立方体(在磁盘和RAM上)来减少单元的数量。“不同”在这里的意思是,你在不同大小的立方体中拥有相同的数据,例如10000x10000x10000的粗粒度立方体和100x100x100单元的细粒度立方体,从而产生多个层次的细节。您必须以层次结构(较大的包含多个较小的)来组织这些内容,为此,我建议使用八叉树:http://en.wikipedia.org/wiki/Octree
2)第二步是实际渲染这个八叉树的一部分:要做到这一点,使用您的相机点到子立方体的距离。遍历立方体,并决定是进入子立方体还是通过使用此距离函数和启发式选择或猜测的阈值来渲染较大的立方体。
(2)可以进一步优化,但这是可选的:要优化此渲染,请将要渲染的立方体组织到层中:层的方向(无论是在x、y还是z切片中)取决于它应与之接近垂直的摄影机视点。然后将每个切片渲染成一个纹理,瞧,你只需要为每个切片渲染一个带有该纹理的四边形,1000个四边形渲染起来没有问题。
发布于 2011-07-14 20:03:44
Qt有一些方法可以高效地渲染大量元素。检查作为QT一部分的examples/demo。
https://stackoverflow.com/questions/6692282
复制相似问题