[英]3D Equivalent of Bitmap (bmp)
就像位图(bmp)只是表示白/黑或颜色的二维数组一样 - 是否有人知道一个简单的三维位图的类似“结构”类型? 换句话说,表示黑/白或颜色的三维值数组?
看起来有很多问题可以通过这种“点云”类型的结构相对容易地解决。
换句话说,在没有进入整个3d渲染世界的情况下,一些问题似乎可以通过更简单的数据结构来解决,而且通常涉及有效管理3d对象(使用OpenGL,DirectX,Axiom,GDI +等)的数学要少得多。
据我所知,这种结构在各种矢量上都不会“高效” - 但似乎可能存在一些似乎适合3d对象的“模型”的问题。
使用算法从其他3d文件类型(例如STL,Mesh,POV,BLEND等)生成这样的点云也是有帮助的。 也许其中一个已经是这样的结构? (新手):)
任何建议或信息非常感谢。 提前致谢。
没有什么可以阻止您使用3D数组来存储像素数据,除了存储它的内存。 像这样:
struct Pixel {
int Red;
int Green;
int Blue;
}
public Pixel[,,] myPix3D = new Pixel[300, 300, 300];
这就是“Bitmap的3D等价物”
或者,您可以存储每个像素及其位置,以节省内存。 这样,您不会为对象中的空白存储任何内容。
struct Pixel {
int Red;
int Green;
int Blue;
double X;
double Y;
double Z;
}
如果您从像MRI或CAT扫描仪那样进行非常详细的3D扫描,这些结构将是有用的,事实上,来自这种扫描的“切片”集合基本上是相同的。 大多数时候,我们只关心尽可能快地将可见像素放在屏幕上,并且存在更好的结构,例如矢量模型,三角形集合等。
另一种存储3D图像的方法是深度图,该3D图像实际上经常使用。 对于每个像素,您存储一个值,指示它与“屏幕”的距离或投影表面的距离,并在随后的绘图操作中,您跳过任何深度大于当前像素的像素,因为它不会是可见。 (也称为Z缓冲)
还请注意,当我们经历实际渲染3D对象的过程时,我们首先在3D空间中创建它们 - 但我们通常不对这些对象进行纹理映射,因此“内存”表示暂时是您所使用的对象类型谈论但是位图总是包含所有像素,我们并不总是需要它,所以我们不会将实体对象渲染到3D空间,只渲染线框。 大多数图形引擎在将临时3D空间投影到2D之后应用纹理,并且已应用了许多优化。
您可以使用该中间步骤在3D空间中创建点,但是当我们感兴趣的是渲染2D图像时,这样做是没有效率的。 如果你对3D位图有一些用处,可以很容易地从已经投影到3D空间的线框模型中创建它。
标准光栅化硬件和API本身支持3D纹理。 请注意,“点云”并不是指任何类型的3D光栅 - 相反,点云只是一个非结构化的点集合。
使用3D数据阵列最常见的问题是它占用了大量内存 - 即使数据适合可用内存,其庞大的大小也会使计算速度变慢。 有一些方法可以改进:我相信MIP贴图支持3D纹理,而在主处理器端,八叉树可以用来利用稀疏的3D数据。
但是,有许多应用程序,其中3D阵列是有意义的,没有别的。 例如,MRI数据是自然密集的3D信息。
AFAIK没有一个完善的光栅3D结构格式。 虽然栅格数据通常用于现代图形,但它仅限于纹理,凹凸贴图和高度场; 结构始终以向量术语定义。
我敢打赌,这种情况的原因是数据量x模型比率,有时在2D中有问题,但在3D中显然处于劣势。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.