不,我不是在寻找glPolygonMode。我正在寻找一种方法,可能是GLSL着色器,它将生成对象的复古风格线框外观。有什么建议么?
像Vector Tanks一样。
最好,该解决方案也应在OpenGL ES 2.0上运行。
任何提示和指针(只要不为NULL)就不胜感激!
不,我不是在寻找glPolygonMode。我正在寻找一种方法,可能是GLSL着色器,它将生成对象的复古风格线框外观。有什么建议么?
像Vector Tanks一样。
最好,该解决方案也应在OpenGL ES 2.0上运行。
任何提示和指针(只要不为NULL)就不胜感激!
Answers:
一些有趣的链接:
Baerentzen等。“单遍线框渲染” http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=4884
Nividia公司的“固态线框”白皮书 http://developer.download.nvidia.com/SDK/10/direct3d/samples.html
编辑:我看到已经提到了第一个,对不起!
正如戴夫所说,我强烈建议您使用纹理。我认为这可能会很痛苦,但是它将提供更好的性能。
您可以尝试搜索边缘检测算法。如果您使用具有纯色和中等alpha值的顶点着色(以获得轻微的透明度)来创建网格,然后使用边缘检测着色器,看起来可能就足够好了。可能不会完全一样,但是您可能会更喜欢它。或者可能不是。
否则,您可能正在看两遍解决方案,绘制半透明多边形(再次,将顶点颜色设置为具有中等alpha值的纯色),然后根据需要设置glPolygonMode(GL_LINE)并调整glLineWidth(可能基于对象)距离)并再次绘制多边形。
有点晚了,我很难阅读,但是论坛上的讨论指向此PDF:Single-pass Wireframe Rendering。如果不相关,我深表歉意。
我知道这可能不是您追求的目标,但似乎Vector Tanks仅使用纹理化模型。质感使线框看起来更加美观,可以在不支持着色器的iPod touch上运行。
我看到的唯一方法是使用高分辨率的,大多是黑色的纹理,例如Tron 2.0中的纹理。它们的纹理几乎普遍是带有粗大,彩色边框的纯黑色或简单的Perlin噪波纹理。
他们应用了一些简单的后处理来达到发光效果。
怎么样:拿起模型,然后将要显示为轮廓的边斜切。使用明亮的不透明绿色为创建的面孔上色,而所有旧面孔都是深色的半透明绿色。
这根本不需要使用像素着色器。(实际上,也没有纹理;只是表面颜色。)它确实需要您进行一些模型预处理,这可能会或可能不会成为问题。
当斜面垂直于视图时,您将无法看到轮廓。如果这使您感到困扰,则可以将斜切的表面挤出一点,使挤出的颜色与原来的斜角一样。您可以进行不同程度的斜切和拉伸,以使线条更细和更粗。