Это может показаться основным вопросом, но как вы можете работать с объектами, созданными с помощью шейдеров в OpenGL, или манипулировать ими?Работа с объектом OpenGL из шейдера
Я всегда нуждаюсь в координатах различных объектов, которые можно использовать в моей программе-хозяине, для создания/управления различными объектами на основе этих координат, а затем отправки их обратно в шейдер вершины/фрагмента/геометрии.
У меня есть координаты моя начальная вершина, что я определил в своей основной программе, но как только они достигают геометрии шейдер, положение вычисляется с помощью:
gl_Position = projection_matrix * view_matrix * vec4(square_point,1);
EmitVertex();
И теперь, к примеру, мне нужно выберите и переместите их с помощью мыши на экране. Но нет простого способа, которым я могу думать о получении точных координат. Я попытался сделать математику позиции в моей основной программе, но я, похоже, не получаю те же координаты, что и те, которые вычисляются геометрическим шейдером. И вычисление всего на ЦП, на самом деле не настолько оптимально для количества объектов, которые у меня есть.
Я думал о том, чтобы делать некоторые данные о GPU-> CPU, используя буферы, но есть так много объектов и так много координат, что они неумолимы.
Я предполагаю, что есть еще один способ приблизиться к этому, просто чтобы у меня не было надлежащего знания о том, как работает OpenGL.
Вы работаете с координатой 'w' после преобразования? Это шаг (разделение на него всех 4 составляющих вектора), который происходит после запуска Geometry Shader. Если вы захватываете испущенные вершины и сравниваете их, они еще не выполнили этот шаг. –
@ AndonM.Coleman - Я так не думаю. Я применяю точную формулу, которую я поставил в вопросе. –