gpt4 book ai didi

algorithm - 使用 3D 像素(体素)绘制球体

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:27:34 24 4
gpt4 key购买 nike

您能否推荐一种算法,仅使用基本的 plot(x,y,z) 基元(将绘制单个体素)在 3D 空间中绘制球体?

我希望得到类似于 Bresenham's circle algorithm 的东西, 但对于 3D 而不是 2D。

仅供引用,我正在开发一个硬件项目,该项目是使用 3 维 LED 矩阵的低分辨率 3D 显示器,因此我需要实际绘制一个球体,而不仅仅是 2D 投影(即圆形)。

该项目与此非常相似:

3D LED cube

... 或查看实际效果 here .

我想到的一种可能性是:

  • 计算极点的 Y 坐标(给定半径)(对于以原点为中心的球体,这些坐标为 -r+r)
  • 切球体:对于这些坐标之间的每个水平面 pi,计算通过将所述平面与球体相交得到的圆的半径 => ri.
  • 使用 Bresenham 算法在平面 pi 上绘制半径为 ri 的实际圆。

FWIW,我正在使用 .NET micro-framework microprocessor ,所以编程是 C#,但我不需要 C# 的答案。

最佳答案

简单、蛮力的方法是遍历网格中的每个体素并计算它与球体中心的距离。如果距离小于球体半径,则为体素着色。通过消除平方根并将点积与半径平方进行比较,您可以节省大量指令。

当然,远非最佳。但是在如图所示的 8x8x8 网格上,每个球体需要执行此操作 512 次。如果球体中心在网格上,并且它的半径是一个整数,你只需要整数数学。点积是 3 次乘法和 2 次加法。乘法很慢;假设他们每人接受 4 条指令。另外你需要一个比较。添加加载和存储,假设每个体素需要 20 条指令。每个球体有 10240 条指令。

以 16 MHz 运行的 Arduino 每秒可以插入 1562 个球体。除非您正在做大量其他数学和 I/O,否则这个算法应该足够好。

关于algorithm - 使用 3D 像素(体素)绘制球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084189/

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