Универсальное решение для выбора 3D-сцен с применением деформации геометрии на основе вершинного шейдера.

Я пытаюсь реализовать метод навигации для 3D-сцен (в OpenSceneGraph с OpenGL). Помимо прочего, пользователь должен иметь возможность щелкнуть объект сцены на экране, чтобы двигаться к нему.

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

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

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

Итак, вот вопрос: есть ли в OpenSceneGraph или OpenGL какая-либо функция, которую я до сих пор не рассмотрел? Что-нибудь, что позволяет мне получить мировые координаты фрагмента независимо от кодера вершинного шейдера?


person Frank Schlegel    schedule 06.01.2013    source источник


Ответы (1)


Вы всегда можете выполнить операцию выбора OpenGL: http://www.glprogramming.com/red/chapter13.html

В качестве альтернативы вы можете растеризовать в очень маленький (1px * 1px) буфер кадра, где пользователь щелкнул, прочитать обратно z-буфер и отменить проецирование значения Z, которое вы получили, в мировое пространство.

person XenonofArcticus    schedule 06.01.2013
comment
То, что вы описываете, является нормальным подходом к выбору в 3D-сценах. Моя проблема в том, что геометрия деформируется в вершинном шейдере, а это означает, что положение геометрии, которую вы видите на экране, не является ее реальным положением в мировых координатах. - person Frank Schlegel; 07.01.2013