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

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

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

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

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

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


person Reanimation    schedule 18.03.2014    source источник


Ответы (3)


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

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

person japreiss    schedule 19.03.2014
comment
Классная идея. Есть ли простой способ вычислить вершины? Спасибо за публикацию. - person Reanimation; 20.03.2014
comment
просто чтобы вы знали, что я использовал этот метод. Это был идеальный выбор для работы с моим столкновением сферы с плоскостью (: спасибо. - person Reanimation; 28.03.2014
comment
Рад, что смог помочь! Удачи с OpenGL! - person japreiss; 28.03.2014

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

person user3256930    schedule 18.03.2014

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

person SDLeffler    schedule 21.03.2014