Я столкнулся с проблемой, когда прозрачность моделирования в OpenGL. Вот сценарий:OpenGL альфа-смешивание внутри прозрачного объекта
У меня есть корабль, который представлен сферой. Теперь я собираюсь добавить щит вокруг корабля. Я тоже выбрал сферу, но с большим радиусом и установил альфа-коэффициент 0,5 (непрозрачность). Однако экран не появляется и цвета не смешиваются (как будто его там не было).
Камера расположена в центре 1-й сферы. Я думаю, что проблема в том, что я внутри сферы, поэтому opengl просто проигнорирует ее (не рисует).
код выглядит следующим образом:
//ship colors setup with alpha 1.0f
glutSolidSphere(1, 100, 100); original sphere (ship)
//shield colors setup with alpha 0.5f
glutSolidSphere(3, 100, 100); //the shield whose colors should blend with the rest of the scene
У меня есть хотя имитировать щит с параллелепипеда в передней части судна. Однако это не то, что я хочу ...
EDIT: Я нашел ошибку. Я также установил параметр param gluPerspective() слишком , поэтому, несмотря на то, что я правильно установил альфа-значение, камера все время была перед объектом, поэтому не было никакого способа увидеть это.
хорошо камера не находится вне сферы, это в самом центре корабля .. Однако, кажется, работает тоже, если я двигаю камеру на центре куб в вашем примере. Можете ли вы объяснить, что происходит внутри объекта? –
Ну, предполагая 'glEnable (GL_DEPTH_TEST)', и если вы находитесь внутри внутренней (= первой рисованной) сферы, выглядящей в буфере глубины, будет заполнено определенное (близкое) значение Z. Попытка вытянуть вторую сферу дальше приведет к тому, что тест глубины будет терпеть неудачу для каждого пикселя во второй сфере, так как они все будут «дальше», чем внутренняя сфера. Мой пример работает, потому что я не включаю 'GL_DEPTH_TEST', и по умолчанию он отключен. – genpfault