OpenTK - VBO的透明度问题

时间:2016-03-24 20:59:44

标签: c# opengl transparency opentk

我只想创建一个.obj文件加载器,它将加载3D对象。一切顺利,但当我尝试加载透明物体时,我遇到了问题。

所以,这是一个问题的图片。透明度正在发挥作用,但我不知道为什么,有三角形。我尝试加载不同的对象(有和没有纹理)但我总是遇到这个问题。

the issue with triangles

the issue with triangles

这是我的灯光设置:

class Light
{
    public static void SetLight()
    {
        GL.Enable(EnableCap.Lighting);
        GL.Enable(EnableCap.Light0);
        GL.Enable(EnableCap.ColorMaterial);

        Vector4 position = new Vector4(0.0f, 200.0f, 300.0f, 1.0f);
        Vector4 ambient = new Vector4(0.2f, 0.2f, 0.2f, 1.0f);
        Vector4 diffuse = new Vector4(0.7f, 0.7f, 0.7f, 1.0f);
        Vector4 specular = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);

        GL.Light(LightName.Light0, LightParameter.Position, position);
        GL.Light(LightName.Light0, LightParameter.Ambient, ambient);
        GL.Light(LightName.Light0, LightParameter.Diffuse, diffuse);
        GL.Light(LightName.Light0, LightParameter.Specular, specular);

    }

    public static void SetMaterial()
    {
        GL.Color4(1.0f, 1.0f, 1.0f, 0.5f);

        Vector4 ambient = new Vector4(0.3f, 0.3f, 0.3f, 0.5f);
        Vector4 diffuse = new Vector4(1.0f, 1.0f, 1.0f, 0.5f);
        Vector4 specular = new Vector4(0.0f, 0.0f, 0.0f, 0.5f);

        GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Ambient, ambient);
        GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, diffuse);
        GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, specular);
        GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Shininess, 1.0f);
    }
}

并且在主要的加载功能中也有这些设置

GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

//GL.Enable(EnableCap.DepthTest);
//GL.Enable(EnableCap.CullFace);

我知道也许我的答案不是最好的,但我不知道这个问题是什么,我甚至不会在网上找到类似的问题。

1 个答案:

答案 0 :(得分:1)

你的问题是:

enter image description here

在绘制之前,您需要将透明面从最远到最近排序。