OpenGL Трафарет и глубина

Не получается правильно сделать Depth:

// Пишем сразу в трафарет и в ColorBuffer и в Depth 
Gl.Enable(EnableCap.DepthTest);
Gl.Enable(EnableCap.StencilTest);

Gl.StencilMask(0xff); 
Gl.ClearStencil(0);
Gl.Clear((uint)(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit));

// Всегда писать 1, когда дорога рисуется
Gl.StencilFunc(StencilFunction.Always, 1, 0xff);
// пишем все биты reference
Gl.StencilMask(0xff);
// stencil fail; stencil pass, depth fail; stencil pass, depth pass
Gl.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Replace); 

road.Draw();  //нарисовать дорогу
// теперь, трафарет дороги в единицах, остальное 0ли в буфере трафарета

//все что не единица - не проходит тест, и не рисуется;
Gl.StencilFunc(StencilFunction.Notequal, 1, 0xff);
// больше не пишем в буфер трафарета
Gl.StencilMask(0x00);         

//непонятно нужно, нет; Если не пишем в буфер трафарета, по идее не нужно...
Gl.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);

// нарисовать землю
EndlessTerrain.DrawVisibleChunks();

Depth test Буфер трафарета создаю, при создании Окна. Идея в том, чтобы нарисовать дорогу, и потом ничего не рисовать поверх. Иначе земля вылезает над дорогой.


Ответы (0 шт):