OpenGL线框


18

不,我不是在寻找glPolygonMode。我正在寻找一种方法,可能是GLSL着色器,它将生成对象的复古风格线框外观。有什么建议么?

像Vector Tanks一样。

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

最好,该解决方案也应在OpenGL ES 2.0上运行。

任何提示和指针(只要不为NULL)就不胜感激!

Answers:



5

正如戴夫所说,我强烈建议您使用纹理。我认为这可能会很痛苦,但是它将提供更好的性能。

您可以尝试搜索边缘检测算法。如果您使用具有纯色和中等alpha值的顶点着色(以获得轻微的透明度)来创建网格,然后使用边缘检测着色器,看起来可能就足够好了。可能不会完全一样,但是您可能会更喜欢它。或者可能不是。

否则,您可能正在看两遍解决方案,绘制半透明多边形(再次,将顶点颜色设置为具有中等alpha值的纯色),然后根据需要设置glPolygonMode(GL_LINE)并调整glLineWidth(可能基于对象)距离)并再次绘制多边形。

有点晚了,我很难阅读,但是论坛上的讨论指向此PDF:Single-pass Wireframe Rendering。如果不相关,我深表歉意。


+1:如果我能找到一种以某种方式生成纹理的方法,那会更容易。由于后来的OpenGL ES定位(iStuff),因此无法使用glPolygonMode。
Kornel Kisielewicz

2

我知道这可能不是您追求的目标,但似乎Vector Tanks仅使用纹理化模型。质感使线框看起来更加美观,可以在不支持着色器的iPod touch上运行。


我知道,我知道,但是我也可以粘贴Subversion的图片,并且它根本不使用纹理(AFAIK)
Kornel Kisielewicz

2

我看到的唯一方法是使用高分辨率的,大多是黑色的纹理,例如Tron 2.0中的纹理。它们的纹理几乎普遍是带有粗大,彩色边框的纯黑色或简单的Perlin噪波纹理。

他们应用了一些简单的后处理来达到发光效果。


+1:我知道这篇文章,但是感谢您的提醒-这确实是一篇不错的文章(并有助于解决我遇到的第二个问题-发光)。
Kornel Kisielewicz

1

您可以在像素着色器中尝试某种简单的距离函数。也许像重心坐标之类的东西(在顶点处存储不同的RGB,而光栅化器将为您完成大部分工作)。

然后您的像素着色器将获得有关当前像素在多边形上的位置所需的信息-顶点附近,边缘附近或中间...

我怀疑在实践中,将其纹理化会更容易。


1

怎么样:拿起模型,然后将要显示为轮廓的边斜切。使用明亮的不透明绿色为创建的面孔上色,而所有旧面孔都是深色的半透明绿色。

这根本不需要使用像素着色器。(实际上,也没有纹理;只是表面颜色。)它确实需要您进行一些模型预处理,这可能会或可能不会成为问题。

当斜面垂直于视图时,您将无法看到轮廓。如果这使您感到困扰,则可以将斜切的表面挤出一点,使挤出的颜色与原来的斜角一样。您可以进行不同程度的斜切和拉伸,以使线条更细和更粗。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.