注册 登录
编程论坛 C图形专区

OPENGL画3D管线遇到的问题

xiaoxun 发布于 2008-10-07 15:28, 2379 次点击
我用4边形逼近3D管线,管线的外型没问题,但是在加光照的时候,四边形之间相交的部分颜色会比较明显,总是看得出一条一条的交线,该怎么样让表面变得更平滑呢?我计算顶点法线的方法是该顶点所在的所有平面的法线的平均值,或者用该顶点的坐标减去该顶点所在圆的圆心的坐标,再单位化做为顶点法线。两个方法我都试过,效果一样,实际上两种方法算出来的法线是差不多一样的。
7 回复
#2
starrysky2008-10-07 17:43
你所说的效果是不是像地板砖一样,地板砖之间的连接处很明显,很容易分别出一块块地板砖?
如果是这样,请先检查你用来画边框的线,他的颜色是否与四边形中填充的颜色相同(设置成透明的也可)?是否设置了遮盖效果(就是被挡住的部分不必画,交线会被画两次,它重叠了),透明度设置是否正确?还有,画边框的线是否设置了成最细的。这在一定程度上可以改进画面的效果。但这种方法也是治标不治本。
该问题的根源在于交线处光线变化太明显,与其相关的两个平面的法线是不变的,但在交线处有了突变(当然如果这两个四边型在同一个平面上就不会有问题,如果有问题那就是我上面说的那些参数没设好,这可以用来检查你的参数设置),因此光照不是均匀变化,突变之处当然效果明显。解决这个问题的根本办法就是让光照的变化变成均匀变化,方法有如下两种:
1.单位面积上用更多的四边形模拟,即增加四边形的个数,减小四边行的大小,这样可以使过渡更加平滑。缺点是运算量增大。
2.对于管线,我们可以这么想,我们截取一小段,可以近似的把它看成是一个圆柱,而不去管这个圆柱是由哪几个四边形组成的,那么我们很容易得到圆柱侧面的任意一点的顶点法线,我们就用这个圆柱的光照参数(他是渐变的,就看你分成几个等分去算,分的越多,效果越好)去替代原来的光照参数,(就是图行照旧,但光照重新算,不与画出的图形相关。就像画好了图形但不给光照,但用一个有光照的透明圆柱体把它给罩起来。)至于这个圆柱取多高,应根据具体情况定。如果你用16个四变形模拟逼近一个圆柱,那么算光照时,至少要将圆柱分成16等分来算,否则效果变化不大,一般情况下要大一倍,即分成32分来算。

我更加倾向于第一种方法,它有更好的图形效果,用你的程序也更好实现一些。第二种方法是在不增加四边行的情况下改善光照效果。第一种方法是图形光照一起改,第二种只改善光照。也可以2种方法同时用。
#3
xiaoxun2008-10-08 17:05
感谢,可否加一下我的QQ,我可以把效果图和代码发给你
#4
xiaoxun2008-10-08 17:06
68839078
#5
xiaoxun2008-10-08 17:13
画边框的线是否设置了成最细的???我用的是填充模式画的,也跟画边框的线有关系吗?
#6
starrysky2008-10-13 18:23
[bo][un]xiaoxun[/un] 在 2008-10-8 17:13 的发言:[/bo]

画边框的线是否设置了成最细的???我用的是填充模式画的,也跟画边框的线有关系吗?

有关系,系统默认的好像是用第3细的线画边框,在画之前自己设定就可以用最细的线画。
#7
starrysky2008-10-13 18:55
我现在在网吧上网,这里没有编译器。。。。。
#8
2010-05-11 15:04
晕,不会自己下载吗!推辞。。。。
1