在我的Android应用程序中,我需要显示一个3D对象(没问题),但前边缘应该是实心的,后边缘应该是点缀的。我需要在图片上有类似的东西。如何使用OpenGL ES 1或2实现它?
我尝试了Tim的想法(使用Depth缓冲区)。它的工作原理但是在图片上有一些人工制品,点缀(紫色)线重叠实线(红色):
这是因为在红线(GL_LEQUAL)之后绘制了虚线(紫色(GL_GREATER))。 有什么想法可以预防吗?
谢谢大家的帮助。现在它看起来很棒!!
答案 0 :(得分:2)
这是我要做的大致概述。对于对象本身,您需要一个网格,而对于要绘制的“边线”,需要另一个GL_LINES网格。
这可能会出现问题,具体取决于场景中的其他对象,因为在多维数据集被其他东西遮挡的情况下,您可能会得到虚线,但也许这对您来说不是问题,或者您可以以某种方式剔除网格是否被遮挡。
对于点画着色器,您可以将该行的一个顶点的texcoord设置为零,并将该行的另一个端点设置为1。然后在着色器中,您可以使用类似于腾讯建议的步进函数来拒绝片段以创建点画图案。
如果你想自己计算对象后面的哪一行,你也可以跳过深度缓冲区的混乱,尽管它可能是一个比立方体更多的工作。
如果要使用OpenGLES 1而不是OpenGLES 2,请将点画着色器替换为点画图案的1D纹理,并使用该纹理对背景进行纹理处理。但是我并不是100%确定你可以在OpenGL中纹理一条线,所以这可能不起作用。