2010-01-04 3 views
3

Я пытаюсь разрезать сетку пополам или, по крайней мере, удалять лица из нее в реальном времени. Как это сделать, интересно?Резка сетки пополам - DirectX

Блокировка буферов вершин, memset выбранной грани или вершины до 0, не работает для меня. У кого-нибудь есть решение или учебник по этому вопросу, я действительно хочу эту функцию в своей программе!

Cheers

ответ

2

Ох - это одно. Нет необходимости изменять сетку. D3D уже может это сделать для вас!

Установите плоскость клипса через IDirect3DDevice9::SetClipPlane, затем включите плоскость с помощью визуального состояния D3DRS_CLIPPLANEENABLE. Вы даже можете установить несколько клип-плоскости, в то же время, если вы хотите ..

Вот ссылка на MSDN-запись: http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/graphics/reference/d3d/interfaces/idirect3ddevice9/setclipplane.htm

И если вы делаете поиск Google на «D3D SetClipPlane» Вам найдет много дискуссий и примерных кодов, как использовать его.

0

Если вам нужно динамически удалять треугольники из сетки, лучшим/самым быстрым способом является использование индексированных треугольников. Когда вы создаете индексный буфер, используйте флаг «D3DUSAGE_DYNAMIC». Если вы хотите удалить треугольники, заблокируйте его флажком «D3DLOCK_DISCARD». Напишите весь новый список индексов в буфер, оставив треугольники, которые вы хотите удалить.

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

0

Вы говорите, что установка вершины в 0 не работает. Каким образом это не работает?

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

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