我目前正在尝试在我的项目中实现一个轮廓算法(使用Open GLES,它目前主要用于移动设备,主要是iPhone )。其中一个要求是绘制一组3D线条。默认OpenGL线路的问题是,当它们很粗时,它们不能很好地连接成一个角度(出现间隙)。其他微妙的伪影也很明显,它们削弱了线条的视觉吸引力。
现在,我已经考虑使用某种类型的四元组作为替代。但是,在屏幕空间中绘制四元组需要某种可见性检测-在实际3D世界中遮挡的线条应该不可见。
有许多方法可以解决这个问题-即定量不可见性。但是,考虑到需要使用光线投射,这种方法,特别是在处理能力有限的移动设备上,很难有效地实现。再看一看,我发现了this paper,它描述了几种使用z-buffer采样来实现这种效果的方法。然而,我不是这个领域的专家,虽然我在一定程度上了解这些技术背后的理论,但我不确定如何进行实际实现。我想知道是否有人可以在这里指导我更多的技术层面-在OpenGLES方面的事情。我也对任何关于3D线条可见性的建议持开放态度。
发布于 2012-10-04 12:12:17
我已经想出了一个在iPhone 4S上运行良好的解决方案(没有在任何其他设备上测试过)。它建立在渲染世界空间四边形的想法上,并在GPU上进行轮廓检测。它的工作方式是这样的(不是双关语):
这不会直接解决相邻边缘之间可能出现的差距,但在解决这一问题时要灵活得多。一种解决方案可能涉及将大角度线与另一个四边形之间的顶点连接起来,这是我目前正在探索的。
发布于 2012-06-26 14:28:38
使用z-buffer的技术对于iOS设备来说太复杂了-它需要大量的像素着色器,而且(IMHO)它会带来一些视觉伪像。
如果您的模型不复杂,则可以在运行时找到几何轮廓-例如,通过比较具有公共边的多边形的法线:如果视图空间中方向的z值具有不同的信号(一条法线指向摄影机,另一条法线来自摄影机),则此边应用于轮廓。
另一种方法更"FPS友好“:保留模型的挤出版本。并首先用轮廓的颜色(没有纹理和光照)和正常模型在其上渲染挤出模型。顶点需要更多内存,但不需要实时计算。
PS:在所有的游戏中,我都看到了轮廓是几何的。
https://stackoverflow.com/questions/11200593
复制相似问题