Используйте альфа-канал текстуры в качестве карты границы

Итак, это немного сложно (по крайней мере, для меня), и я нигде не смог найти никакого решения. Я делаю 2D игру в гольф в OpenGL. Фон — это текстура, которую я сделал, у которой будет карта курса. Проблема в том, что границы, где мяч не может безопасно приземлиться (вне границ, песколовок и т. Д.), Не являются геометрическими, поэтому я не могу просто сравнить координаты x и y шара с несколькими значениями, чтобы увидеть, это из. Одна из идей, которую я имею в качестве решения, — это использование альфа-канала текстуры, чтобы отметить, какие пиксели находятся за пределами, а не за пределами. Я хотел бы, чтобы мой шейдер рисовал значения RGB независимо от альфы. Тогда я бы обозначил границы как alpha==1.0f и вне границ, как alpha==0.0fили что-то подобное, по крайней мере. Затем я мог бы сэмплировать текстуру по координатам x и y шара, чтобы увидеть, входит она или нет. Большую часть этого я могу выполнить самостоятельно, за исключением одного: как мне сэмплировать текстуру из процессора? Я знаю, что шейдеры на видеокарте могут использовать texture() функция с sampler2D а также vec2и это все нормально, но если единственный вывод (ы) фрагментного шейдера — это цвет вложений (не считая gl_FragDepth или что-нибудь подобное), тогда как мне вернуть возвращенное альфа-значение обратно в процессор? Или как-то сэмплировать процессор, а не использовать другой шейдер? Или вся эта концепция ошибочна? Любая помощь приветствуется.

Постскриптум Я использую OpenGL 4, если это не ясно.

0

Решение

OpenGL существует для визуализации. Предоставление информации OpenGL с единственной целью последующего ее прочтения является ошибочным.

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

Это ничем не отличается от чтения из 2D-массива.

2

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

Других решений пока нет …

По вопросам рекламы [email protected]