прозрачность opengl не работает должным образом - PullRequest
0 голосов
/ 10 марта 2019

Я хочу визуализировать 3D-сцену с несколькими прозрачными объектами в ней. Это пример моего вывода (я использую opentk в c #) enter image description here
Но прозрачность не работаеткак я хотел, мне нужно что-то вроде этого: enter image description here

Вот мои настройки в коде:

  // before draw transparent object
     GL.Enable(EnableCap.Blend);

  // after draw transparent object 
     GL.Disable(EnableCap.Blend);

  // @ GLInit
                GL.ClearColor(0.5f, 0.5f, 1f, 1f);
                GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit);
                GL.ClearDepth(1);

                GL.Enable(EnableCap.DepthTest);
                GL.DepthFunc(DepthFunction.Lequal);

                GL.DisableClientState(ArrayCap.NormalArray);
                GL.DisableClientState(ArrayCap.VertexArray);
                GL.DisableClientState(ArrayCap.TextureCoordArray);

                //GL.Enable(EnableCap.PolygonOffsetFill);
                GL.PolygonOffset(0.01f, 0.01f);

                GL.Enable(EnableCap.StencilTest);
                GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Replace);

                try
                {
                    GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.DstAlpha);
                    GL.BlendEquation(BlendEquationMode.FuncAdd);
                    //Gl.BlendEquation(BlendEquationMode.FuncAddExt);
                }
                catch { }


                GL.Enable(EnableCap.LineSmooth);
                GL.Enable(EnableCap.PointSmooth);
                GL.Enable(EnableCap.PolygonSmooth);
                GL.Disable(EnableCap.Dither);
                GL.ShadeModel(ShadingModel.Smooth);
                GL.Disable(EnableCap.Multisample);
                GL.LineWidth(0.5f);

                GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
                GL.Hint(HintTarget.LineSmoothHint, HintMode.Nicest);
                GL.Hint(HintTarget.PointSmoothHint, HintMode.Nicest);
                GL.Hint(HintTarget.PolygonSmoothHint, HintMode.Nicest);
                GL.Hint(HintTarget.FragmentShaderDerivativeHint, HintMode.Nicest);

1 Ответ

0 голосов
/ 10 марта 2019

Я удалил это в строки в GlInit ()

                //GL.Enable(EnableCap.PointSmooth);
                //GL.Enable(EnableCap.PolygonSmooth);

, и теперь у меня есть это
enter image description here

...