3

有哪些光栅化算法可以将 3d 球体投影到像素网格中?我想避免光线投射。本质上,给定一个 3d 坐标和一个半径,有没有一种快速的方法可以在像素网格上创建一个 2d 圆/椭圆?

例如:半径为 4 的 (2,2,2) 处的圆被投影到五个像素: p1(2,0)p2(0,1) p3(1,1) p4(2,1)p5(1,2 )

我遇到过诸如粒子系统的像素飞溅之类的技术,但我还没有找到关于如何做到这一点的明确答案。

谢谢

4

6 回答 6

1

你有什么投影?

我很确定投影不是最有趣的圆圈。嗯。我想我会这样做的方法是在 3d 中找到其轴*与相机点对齐的圆周。从圆圈中选择任何需要的点,然后将它们转换为屏幕空间。最简单的是,这会给你一个多边形,但插值样条曲线可能也应该给你很好的结果。

*:旋转对称轴

于 2008-12-26T00:35:26.160 回答
0

很酷,所以假设您只是将 x,y 从球体的 x,y,z 中取出来形成您的圆圈。您如何在像素网格上对适当的像素进行着色?基本上,光栅化圆的算法是什么?

于 2009-01-16T22:52:23.147 回答
0

也许最简单的方法(如果您不介意一些线性代数)是使用 4x4 投影变换矩阵。事实上,几乎任何类型的 3D 转换都可以使用 4x4 矩阵执行。

这是一篇帮助您入门的Wikipedia 文章。

于 2008-12-31T21:08:31.970 回答
0

听起来你愿意忍受对真实投影的一点不忠,以获得更简单的计算。如果是这样,请跟随...

我将首先假设您可以移动、旋转和调整球体的大小以匹配投影圆的坐标系。让我们将它们的半径称为 r,并假设球体的中心位于 (0,0,0) 处,圆的中心位于 (0,0) 处。两者的 X 轴从左向右运行,Y 轴从下向上运行,Z 轴从后向前运行。

这是有趣的部分:你已经完成了。球体和圆的 X 和 Y 坐标相同!如果 Z 坐标为正,则该点可见,如果为负,则该点隐藏在球体的背面。

于 2009-01-02T04:38:06.303 回答
0

我不明白你的问题 100%。您的像素网格 = 屏幕空间中的像素还是有固定比率?

根据我的最佳猜测,您可以尝试以下方法:

将内部视口坐标与屏幕空间像素映射并计算比率。使用该比率将您的对象准确地放置在您想要的位置。我使用这种方法编写了一个基于窗口(不是全屏)的 D3D 应用程序,以允许鼠标与 3D 对象交互。这允许使用鼠标移动和调整对象的大小,使其感觉就像普通的 Windows 应用程序。我通过反复试验计算出了这个比率(我不擅长矩阵计算)。

如果你没有像我上面那样干扰视图投影矩阵,3D 坐标是从左到右和从下到上的 -1.0f 到 1.0f。因此,您可以使用上述相同的方法轻松计算出比例并适当放置对象

于 2008-12-26T06:51:59.097 回答
0

球体在平面上的投影是一个椭圆,但它可以近似为一个圆。这可以与点的透视投影几乎相同。

假设屏幕中心为(X=0,Y=0),观看者位于(X=0,Y=0,Z=0)。如果球体位于 (sX,sY,sZ) 处,半径为 sR,并且屏幕距离观察者 D 个单位(焦距),则圆将位于 (cX = sX * D / sZ, cY = sY * D / sZ),半径为 cR = sR * D / sZ。一切都简单地按 D / sZ 缩放。

如果焦距 (D) 较大,或者球体的 sX 和 sY 坐标接近于零,则该圆仅是球体投影的良好近似。

于 2010-10-19T03:00:44.943 回答