はSigTerm's suggestion後、私は最初にすべての私の不透明ポリゴンを描画し、私は私の半透明ポリゴンを描画する前に、私は深度バッファ(glDepthMask(GL_FALSE)
)を無効にします。深度バッファへの書き込みを無効にすると、ほとんど何も描画されません。
はできるだけ早く私はしかし、デプスバッファを無効にするように、画面には何も描画停止します。私はカメラを動かすと世界の垣間見ることしかできません(ちょっとしたものが1秒間表示されてから、動きが止まると消えます)。
私は全体の時間を有効に深度バッファを残す場合は、すべてが(translucent objects obscure other translucent objects)それはちょうど私が好きなように素敵ではないですが、細かいレンダリングします。
は、どのように私はそれを適切にレンダリングするのですか?
私の主なレンダリングループは次のようになります。
protected void RenderTerrain()
{
GL.Enable(EnableCap.DepthTest);
GL.Enable(EnableCap.CullFace);
_bfShader.Use();
_bfProjUniform.Mat4(_viewMat * _bfProjMat);
_bfTex.Bind();
GL.DepthMask(true);
GL.Disable(EnableCap.Blend);
_blendUniform.Set1(false);
_bfVao.Bind();
GL.DrawElementsInstancedBaseVertex(BeginMode.TriangleStrip, SharedData.FaceIndices.Length, DrawElementsType.UnsignedInt, IntPtr.Zero, _bfInstBuf.Length, 0);
GL.DepthMask(false);
GL.Enable(EnableCap.Blend);
_blendUniform.Set1(true);
_transVao.Bind();
GL.DrawElementsInstancedBaseVertex(BeginMode.TriangleStrip, SharedData.FaceIndices.Length, DrawElementsType.UnsignedInt, IntPtr.Zero, _bfTransBuf.Length, 0);
}
レンダリングループの他の半分:
protected override void OnRenderFrame(FrameEventArgs e)
{
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
lock(_renderQueue)
{
while(_renderQueue.Count > 0)
{
_renderQueue.Dequeue().Invoke();
}
}
RenderTerrain();
RenderHUD();
SwapBuffers();
}
あなたは ''またはglDisable(GL_DEPTH_TEST)を経由してデプステストを無効にしようとしたことがありますか?この症状は、深度バッファをクリアしていないことも示しています。明確な色と 'にglClear用いたデプスバッファの両方(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)を'。 –
'glDepthFunc(GL_ALWAYS)'をおそらく設定しますか? –
@StevenLu:深度テストを無効にすることは、[私が思った通り](http://i.imgur.com/iabpz.png)です。私はそれが私の不透明な物体の前に現れないように深度テストが必要です。そして、はい、私は両方のバッファをクリアしています。 – mpen