2011-07-31 1 views
0

Пожалуйста, проверьте этот аккуратный кусок кода, который я нашел:перекрывающихся частично прозрачные формы в OPENGL

glEnable(GL_LINE_SMOOTH); 

glColor4ub(0, 0, 0, 150); 
mmDrawCircle(ccp(100, 100), 20, 0, 50, NO); 

glLineWidth(40); 
ccDrawLine(ccp(100, 100), ccp(100 + 100, 100)); 

mmDrawCircle(ccp(100+100, 100), 20, 0, 50, NO); 

где mmDrawCircle и ccDrawLine просто рисует эти формы [FILLED] как-то ... (CCP означает точку с заданным х , y координаты соответственно).

Моя проблема .... Да, вы догадались, линия перекрывается с кругом, и оба являются полупрозрачными (полупрозрачными). Итак, конечная фигура есть, но перекрывающаяся часть становится темнее, а общая фигура выглядит уродливой. i.e, было бы хорошо, если бы я рисовал 255 альфой.

Есть ли способ сказать OpenGL для отображения одной из фигур в перекрывающихся частях?

(форма, очевидно, прямоугольник с закругленными краями .. полукругами ..)

ответ

2

Вы можете включить GL_DEPTH_TEST и сделать линию первым и немного ближе к камере. Когда вы затем рисуете круг ниже, фрагменты линии не будут касаться. (Вы также можете использовать буфер трафарета для такого эффекта).

Обратите внимание, что это может все еще выглядеть уродливым. Если вы хотите использовать сглаживание, вам следует подумать о том, какие режимы смешивания вы применяете, и в каком порядке вы выполняете примитивы.

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