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