2016-03-24 3 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

Смежные вопросы