Разрезание сетки пополам — DirectX

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

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

Ваше здоровье


person jmgunn87    schedule 04.01.2010    source источник


Ответы (3)


О, это легко. Нет необходимости изменять сетку. 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», вы найдете множество обсуждений и примеров кода, как его использовать.

person Nils Pipenbrinck    schedule 04.01.2010

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

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

person Alan    schedule 04.01.2010

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

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

person jcoder    schedule 04.01.2010