Как не отображать то,что находится за данным непрозрачным объектом
Готов поспорить,что данная тема тут создавалась не раз,но не знаю как её искать. Есть два куба, один находится в другом, внешний прозрачный,внутренний-нет. Как сделать так,чтобы при отображении не было видно того,что находится за внутренним,непрозрачным. Делаю на опенгл. Буду благодарен за ответ или тыкание носом
1. Включаем z-буффер
2. Делаем очистку цветового и z-буффера
3. Смешивание отключаем
4. Рисуем внутренний куб
5. Смешивание включаем
6. Рисуем внешний
Спасибо за ответ. а можно вот насчёт смешивания? эт что за функция? Просто про что читать хотя бы
Смешивание (blending) как раз и служит для наложения цвета источника на цвет приемника. С его помощью можно достичь многих результатов, в том числе и эффект прозрачности. Прочитать можно в MSDNе по функции glBlendFunc. Включение смешивания делается посредством glEnable(GL_BLEND). Можно еще поиграться с тестом альфа-канала (glAlphaFunc).
Пример с кубиками достаточой простой, дальние невидимые грани отсекает culling и проблем не возникает. А в общем случае нужно сортировать полигоны по расстоянию от камеры, сначала рисовать все непрозрачные поверхности начиная с самой близкои, а затем все непрозрачные, начиная с самой дальней видимой. Для сортировки обычно используется bsp (binary space partioning, или двоичное деление пространства), который позволяет "отсортировать" даже пересекающиеся поверхности. А про прозрачность уже сказали.