gpt4 book ai didi

c# - 位图的 3D 等价物 (bmp)

转载 作者:行者123 更新时间:2023-11-30 19:42:57 29 4
gpt4 key购买 nike

就像位图 (bmp) 只是表示白色/黑色或颜色的二维值数组一样 - 有人知道简单的 3 维位图的类似“结构”类型吗?换句话说,代表黑/白或彩色的 3 维值数组?

似乎有很多问题可以用这种“点云”类型的结构相对容易地解决。

换句话说,无需进入整个 3d 渲染世界,一些问题似乎可以通过更简单的数据结构来解决,而且与有效管理 3d 对象(使用 OpenGL、DirectX、Axiom、GDI+、等)。

我知道这种结构在各种向量上不会“有效”——但是……似乎可能存在某些问题,这些问题似乎适合 3d 对象的这种“模型”。

从其他 3d 文件类型(如 STL、网格、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 图像的方法是深度图。对于每个像素,您存储一个值,指示它与“屏幕”或投影表面的距离有多近,并且在后续的绘图操作中,您将跳过任何深度大于当前像素的像素,因为它不会可见的。 (也称为 Z 缓冲)

另请注意,当我们完成实际渲染 3D 对象的过程时,我们确实首先在 3D 空间中创建它们 - 但我们通常不会对这些对象进行纹理贴图,因此“内存中”表示暂时是您正在谈论的对象,但位图始终包含所有像素,我们并不总是需要它,因此我们不会将实体对象渲染到 3D 空间中,只渲染线框。大多数图形引擎在将临时 3D 空间投影到 2D 之后应用纹理,并且应用了许多优化。

您可以使用中间步骤在 3D 空间中创建点,但是当我们只对渲染 2D 图像感兴趣时,这样做效率不高。如果您对 3D 位图有一些用处,它可以很容易地从投影到 3D 空间的线框模型中创建。

关于c# - 位图的 3D 等价物 (bmp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368187/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com