【发布时间】:2014-11-15 19:09:07
【问题描述】:
我需要一些 C 语言中的简单“球”光栅化例程。
我根据中点-布雷森汉姆给自己做了一些东西 我首先计算的算法(在维基百科中查看) x-y 屏幕平面上的圆点
// XXX
// XXXXX
// XXXXXX
// XXXXXXX
// XXXXXXXX
// XXXXXXXX
// XXXXXXXXX
// XXXXXXXXX
// XXXXXXXXX
然后对于每条扫描线,我都会选择“第二个”中点,这次 在 x-z 平面上并更新深度缓冲区 z 值。
它似乎工作,虽然它有一些麻烦。例如,
据我所知透视变换不投球 到圆圈,但可能是椭圆,这样我的光栅化算法 它作为圆圈不太正确。
-
对于小圆圈,看起来像的一个点球之间有一个跳跃 喜欢
// #然后当靠近它时,它会立即跳转到类似的东西
// # //##### //##### // #或
// ## //###### //###### // ##
我不确定这是否是中点算法的结果 或者我做错了什么。
另一个问题是当我得到这个算法时,我想 它的阴影版本。 例如,我需要知道光栅化的每个像素的正常值 球(将其用于带有光线的点)。 有人可以为这种像素法线提供一些公式吗?
也许有一些更快的着色方法?
简而言之,我需要一些建议来改进我所拥有的东西, 特别是我想要它的阴影版本(工作比完美更重要 但是在准确性上进行一些改进也是正确的)。
【问题讨论】:
-
如果你想要“球”使用
glutSolidSphere(radius),如果你一直在使用透视投影,那么你怎么能期望你的球应该是球体? -
当你渲染一个运动物体的完美细节时,它看起来不如你渲染一个物体的“建议”。至于椭圆,除非轴具有不相等的比例,否则球会在 2D 中投影为圆形,但指向行进方向的椭圆可能有助于产生运动错觉。
-
@wv 不认为球会是一个圆圈,我有一些光线跟踪代码(它可以提供完美的投影),并且非常明显的球在那里变形,尤其是如果视图设置了一些广角,但是wiev的这个x角和y角与viewport窗口大小成正比
-
特别需要这个球的法线方程(球由半径定义,比如原点为 0,0)对于点 x,y 看起来像法线,其中 x 从 -R 到 R Y 相同 - 给定 x,y...tnx 的法线向量是什么
-
只有在宽屏电视体育节目中出现椭圆形球。在图形投影中,无论您使用什么视角或视角,球的轮廓圆周上的所有点与眼睛/相机的距离都相同,并且球的最近点是中心。