これが私がすることの大まかな概要です。オブジェクト自体に1つのメッシュが必要であり、描画する「エッジライン」にGL_LINESの別のメッシュが必要です。
- ソリッドメッシュをデプスバッファに描画します。
- 実線が得られるように、標準のシェーダーを使用して「エッジメッシュ」を描画しますが、深度テストをGL_LEQUALに設定します(深度値よりも近いオブジェクトのみを描画します。
- GL_GREATERの深度テストを使用して、エッジメッシュをもう一度描画します。このパスでは、点刻シェーダーを使用して点線効果を取得します(以下でさらに説明します)。
これは、シーン内の他のオブジェクトによっては問題が発生する可能性があります。立方体が他のオブジェクトによって隠されている場合に点線が描画される可能性がありますが、それは問題ではないか、メッシュをカリングすることができます。隠されています。
点刻シェーダーの場合、線の1つの頂点のtexcoordをゼロに設定し、線の別の端点を1に設定できます。次に、シェーダーで、 tencentによって提案されたものと同様のステップ関数を使用して、フラグメントを拒否し、点刻パターンを作成できます。
オブジェクトの背後にある線を自分で計算したい場合は、デプスバッファをいじることをスキップすることもできますが、立方体以外のものでは多くの作業が必要になる可能性があります。
OpenGLES2の代わりにOpenGLES1を使用する場合は、点刻シェーダーを点刻パターンの1Dテクスチャに置き換え、バックラインをそれでテクスチャリングします。ただし、OpenGLで線をテクスチャリングできるかどうかは100%確信が持てないため、これは機能しない可能性があります。