Рисование круга на плоскости, логическое вычитание — OpenGL

Я надеюсь нарисовать плоскость в OpenGL, используя C ++, с отверстием в центре, очень похожим на зеленый цвет поля для гольфа, например.

Мне было интересно, что это самый простой способ добиться этого?

Довольно просто нарисовать круг и плоскость (учебники по всему Google покажут это для любопытных), но мне было интересно, есть ли метод логического вычитания, который вы можете использовать при моделировании в 3Ds Max или подобном программном обеспечении? Где вы создаете оба объекта, затем берете пересечение / объединение и т. Д., Чтобы оставить новый объект / форму? В этом случае вычтите круг из плоскости, создав дыру.

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

Любая помощь или указывает в правильном направлении?

0

Решение

Я бы не стал возиться с прозрачностью, режимом наложения и тому подобным. Просто создайте сетку с нужной вам формой и нарисуйте ее. Помните, что OpenGL для графики, а не для моделирования.

треугольная сетка из прямоугольника с отверстием в нем

1

Другие решения

Есть несколько способов сделать это. Первый способ — это тот, который вы уже указали, — нарисовать круг прозрачным. Предостережение заключается в том, что вы должны сначала нарисовать круг перед тем, как нарисовать плоскость, чтобы при альфа-смешивании круг с фоном. Затем, когда вы визуализируете плоскость, части, которые покрыты кругом, будут отброшены в тесте глубины.
Второй способ, который вы можете попробовать, — это наложение текстур. Вы можете создать текстуру, которая в основном представляет собой маску со всем непрозрачным белым цветом, за исключением части круга, для которой установлено альфа-значение 0. В вашем шейдере вы затем умножите свой цвет фрагмента на этот цвет текстуры маски, чтобы порции где находится круг, теперь прозрачны.
Оба эти метода будут работать и с фигурами, отличными от круга.

0

Я предлагаю трафаретный буфер. Используйте буфер трафарета, чтобы отметить область, где вы хотите, чтобы отверстие находилось, маскируя буферы цвета и глубины и рисуя только в буфер трафарета, затем снимите маску с вашего цвета и глубины, избегайте рисования в буфере трафарета и нарисуйте свою плоскость с помощью функция трафарета, указывающая OpenGL отбросить все пиксели, где находятся «маркировки» буфера трафарета.

0