就像位图(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];
Run Code Online (Sandbox Code Playgroud)
这就是"Bitmap的3D等价物"
或者,您可以存储每个像素及其位置,以节省内存.这样,您不会为对象中的空白存储任何内容.
struct Pixel {
int Red;
int Green;
int Blue;
double X;
double Y;
double Z;
}
Run Code Online (Sandbox Code Playgroud)
如果您从像MRI或CAT扫描仪那样进行非常详细的3D扫描,这些结构将是有用的,事实上,来自这种扫描的"切片"集合基本上是相同的.大多数时候,我们只关心尽可能快地将可见像素放在屏幕上,并且存在更好的结构,例如矢量模型,三角形集合等.
另一种存储3D图像的方法是深度图,该3D图像实际上经常使用.对于每个像素,您存储一个值,指示它与"屏幕"的距离或投影表面的距离,并在随后的绘图操作中,您跳过任何深度大于当前像素的像素,因为它不会是可见.(也称为Z缓冲)
还请注意,当我们经历实际渲染3D对象的过程时,我们首先在3D空间中创建它们 - 但我们通常不会对这些对象进行纹理映射,因此"内存"表示暂时是您对象的类型谈论但是位图总是包含所有像素,我们并不总是需要它,因此我们不会将实体对象渲染到3D空间中,只渲染到线框.大多数图形引擎在将临时3D空间投影到2D之后应用纹理,并且已应用了许多优化.
您可以使用该中间步骤在3D空间中创建点,但是当我们感兴趣的是渲染2D图像时,这样做是没有效率的.如果你对3D位图有一些用处,可以很容易地从已经投影到3D空间的线框模型中创建它.
归档时间: |
|
查看次数: |
2291 次 |
最近记录: |