«Карта объектов» в opengl

0

Чтобы он был коротким: как мы все знаем, opengl рисует много треугольников на экране.

Что я хочу знать:

Если opengl рисует треугольники, он должен знать, какой треугольник принадлежит пикселю на экране, правильно?

Могу ли я получить эту информацию? Например, вызовите функцию после ничьей (например, gl_retrieve_object_map() или что-нибудь подобное), где я узнаю, какой пиксель показывает, какой треугольник?

его как делать выбор для каждого пикселя

Я думаю о двухмерном массиве, сообщающем мне индекс треугольника или что-то еще:

на экране 10x10 пикселей, например:

0 0 1 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 2 0
0 0 0 0 1 1 1 2 2 0
0 0 0 0 0 1 1 2 2 0
0 0 0 0 0 2 1 2 2 0
0 0 0 0 2 2 2 2 2 0
0 0 0 2 2 2 2 2 2 0
0 0 2 2 2 2 2 2 2 0
0 2 2 2 2 2 2 2 2 0
0 0 0 0 0 0 0 0 0 0

для изображения типа:

   ___
  \  |
   \ |  
    \|/|
     / |
    /  |
   /   |
  /____|

есть ли что-нибудь, что я мог бы использовать?

Теги:
opengl

2 ответа

4
Лучший ответ

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

Но это не значит, что вы не повезло. Одна вещь, которую я видел в приложениях, - это удалить все световые эффекты и дать каждому объекту уникальный цвет. Затем он отображает сцену в буфер вне экрана. Тогда этот буфер вне экрана имеет именно ту информацию, которую вы хотите.

  • 0
    Несмотря на то, что это большой взлом, это действительно классное решение! Большое спасибо! Но нужно ли хранить эту информацию во время рисования? как бы получить цвет и правильные шейдеры для объекта?
  • 0
    @Malte: в OpenGL есть переменные, хранящие текущие шейдеры и цвета, используемые при рисовании объекта. Когда он рисует этот объект, для каждого пикселя он вычисляет глубину объекта в этом месте, и если он ближе, чем ранее записанная глубина, он вычисляет цвет этого пикселя и перезаписывает его в цветовом буфере и отмечает Новая минимальная глубина в буфере глубины. Затем, когда вы собираетесь визуализировать новый объект, он перезаписывает эти переменные. Единственным следом визуализации предыдущего объекта являются цвета в буфере цвета и глубины в буфере глубины.
Показать ещё 5 комментариев
1

Если opengl рисует треугольники, он должен знать, какой треугольник принадлежит пикселю на экране, правильно?

Нет. OpenGL рисует треугольники в том порядке, в котором их просят рисовать, по одному треугольнику за раз. Программа просит его "нарисовать треугольник между координатами A, B и C", и OpenGL сделает это тогда и там (ну, на самом деле, он будет выполнять эти команды до).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню