Разрезать сетку пополам - DirectX - PullRequest
3 голосов
/ 04 января 2010

Я пытаюсь разрезать сетку пополам или, по крайней мере, иметь возможность удалять с нее грани в режиме реального времени. Интересно, как это сделать?

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

Приветствия

Ответы [ 3 ]

3 голосов
/ 04 января 2010

О - это легко. Нет необходимости изменять сетку. 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 голосов
/ 04 января 2010

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

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

0 голосов
/ 04 января 2010

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

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

...