2014-12-28 3 views
0

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

То, что я хочу знать:

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

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

его, как делают сбор для каждого пикселя

Я имею в виду в 2 одномерный массив говорит мне индекс треугольника или любой другой:

на экране 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 

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

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

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

ответ

4

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

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

+0

Несмотря на то, что это большой взлом, это действительно крутое решение! Большое спасибо! Но musnt opengl хранит эту информацию во время розыгрыша? как он получит цвет и правильные шейдеры для объекта еще? – bricklore

+0

@Malte: OpenGL имеет переменные, хранящие текущие шейдеры и цвета, используемые при рисовании объекта. Когда он рисует этот объект, для каждого пикселя он вычисляет глубину объекта в этом месте, и если он ближе, чем ранее записанная глубина, он будет вычислять цвет этого пикселя и перезаписывать его в цветовом буфере и учитывать новая минимальная глубина в буфере глубины. Затем, когда вы переходите к визуализации нового объекта, он перезаписывает эти переменные. Единственный след предыдущего объекта, который был визуализирован, - это цвета в буфере цвета и глубины буфера глубины. – icktoofay

+0

хорошо, хорошо и плохо :) моя первая мысль была: shouldnt этот метод от ogl быть ужасно медленным? а также, если он может определить объект там, почему мы не можем? – bricklore

1

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

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

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

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