【发布时间】:2012-09-20 19:05:53
【问题描述】:
我没有 3-D 数据结构显示的解决方案,希望得到一些建议。
每个n 节点都有k 子节点。 k 子节点通过球体电子电荷算法分布在节点的边界球体上。虽然在技术上并不准确,但最简单的说法是子节点“均匀分布”在节点的边界范围内。
目前,我用球体表示节点。但是对于大的n,由于绘制球体的复杂性,动态显示的计算效率很低。
对于n 和k_i 的所有选择,解决方案必须具有可理解且视觉上规则的表示,视觉上规则意味着如果一条线垂直于两个节点的两个面,则所有线都垂直于对两个面的某种选择,对两个节点的某种选择,等等。
我有几个选择:
-
使用使用较少面来表示球体的球体绘制算法。
- 这看起来很难看,从“球体”延伸的线不会齐平地退出图形(从“球体”A 到“球体”B 的线不能保证垂直于 A 或 B 的入口面,更不用说两者了。)
-
使用凸正多面体代替球体,这样多面体的面数等于子面数。这将允许绘制垂直于多面体 A 和多面体 B 的线。
- 这在数学上是不可能的,因为只有 5 个这样的图形具有不变的多面,但这种结构要求有足够的面来映射
k点。如果我们尝试映射到顶点,该论点同样成立。
- 这在数学上是不可能的,因为只有 5 个这样的图形具有不变的多面,但这种结构要求有足够的面来映射
- 使用????多面体,但从顶点到顶点画线。
- 我相信这总是可行的,因为据我所知,我绘制的线条无论如何都勾勒出这些多面体。但是,我不知道绘制这些多面体的有效算法,而且我不知道它们的名称来自己查找。
- 社区可能对我有任何建议。
我附上了一张图片来说明我的显示器的结构。这是一个具有根节点的结构,有 30 个子节点。根节点的子节点没有子节点。
我附上了第二张图片,没有绘制节点,以显示 3 中描述的多面体的示例,如果我的意思不明显的话。
【问题讨论】:
-
您的照明型号是什么?如果你只有无限远的光源,没有阴影,没有反射,那么所有球体看起来都一样(除了大小)。您可以渲染一次球体,然后根据需要缩小图像。对于更复杂的模型,没有足够的数据来回答这个问题......
-
如果我明白你在说什么,那么你正在讨论我是否正在生成静态图像——渲染模型。相反,我希望在 UI 中动态显示旋转、插入、删除等。如果我误解了你,那么我仍然会回答你的问题:我没有阴影或反射,只有无限远的光。
-
只有当观察者改变他的视角方向时,球体的视角才会改变。然后你需要再次渲染球体。当观察者静止时,您可以对所有球体使用相同的图像。我还忘记了,如果要模拟广角相机,则需要考虑透视(位于框架中心以外的球体看起来更像椭圆,因此您需要拉伸图像,不仅要缩放,而且应该仍然比完整渲染更容易)。
-
啊。对不起。你第一次这么说应该是有道理的。我有点累了。唯一的问题是决定以哪种顺序绘制线条和球体,因为线条后面的球体不应向观察者隐藏该线条,但如果我在绘制所有线条后只是“复制并粘贴”一个球体,这就是会发生的事情。
-
在使用低效的渲染算法时如何解决这个问题?如果使用 Z 缓冲区,那么您仍然可以使用 Z 缓冲区,通过缩放和移动“参考球体”Z 空间“图像”(高度图)。但我认为以反向深度顺序绘制东西应该更容易,并缩短线条,使它们只到达球体的表面,而不是中心。如果球体 A 比 B 远,则先画 A,然后画 A 和 B 之间的任何线,然后画 B。
标签: data-structures language-agnostic 3d