2016-03-24 30 views
1

我只是想創建一個.obj文件加載器,它將加載3D對象。一切都很順利,但是當我嘗試加載透明對象時,我遇到了問題。OpenTK - VBO的透明度問題

所以,這是一個問題的圖片。透明度正在工作,但我不知道爲什麼,有三角形。我嘗試加載不同的對象(有和沒有紋理也),但我總是這個問題。

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

你的問題是這樣的:

enter image description here

你需要畫他們之前從最遠到最近的透明面排序。

+0

或者乾脆設置正確的深度測試? – Luca

+0

深度測試會進一步拒絕片段,但在這裏,您必須明確地對它們進行排序,所以深度緩衝區實際上是無用的。 –

+0

沒錯。現在我記得我爲什麼避免透明卷。 – Luca