Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > параметры DrawIndexedPrimitive


Автор: shuttle 5.10.2009, 04:49
Не догоняю значение 4 параметра в функции DrawIndexedPrimitive - это типа количество значений в индескном буфере, или только то количество точек(вертекстов), которые участуют в постороении изображения в данный момент.

Рисую в каждом шаге цикла по 198 треугольников (в их построении участвуют 200 точек)
Код

for(int i=0;i<99;i++)
{
         p_Device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0,  0,10000,  step, 198); 
         step+=200;
}
 
здесь забил в четрвертый параметр 10000 - кол-во значений в индексном буфере. или надо писать вместо него 200. 

Автор: EgoBrain 9.10.2009, 01:49
Цитата

HRESULT IDirect3DDevice9::DrawIndexedPrimitive(
D3DPRIMITIVETYPE Type,
INT BaseVertexIndex,
UINT MinIndex,
UINT NumVertices,
UINT StartIndex,
UINT PrimitiveCount
);
.. Type — Тип рисуемого примитива. Помимо треугольников вы можете
рисовать линии и точки. Поскольку мы используем треугольники, в
данном параметре следует указать D3DPT_TRIANGLELIST.
.. BaseVertexIndex — Базисная величина, которая будет прибавлена к
используемым в данном вызове индексам. Подробнее о ней говорится в
находящемся после списка примечании.
.. MinIndex — Минимальное значение индекса, которое будет
использовано.
.. NumVertices — Количество вершин, которые будут обработаны
данным вызовом.
.. StartIndex — Номер элемента буфера индексов, который будет
отмечен как стартовая точка с которой начнется чтение индексов.
.. PrimitiveCount — Количество рисуемых примитивов.

То есть 4 параметр - это количество вертексов в буфере вершин.
Вообще к слову об использовании индексов: я видел два различных применения этой технологии (допускаю что существует множество вариаций) -
1). Описываются все вершины тела в вершинном буфере, затем в качестве оптимизации описываются индексы прохождения вершин с целью избежания повторений обработки повторяющихся вершин.
2). Описывается минимальное вхождение вершин в буфере вершин, то есть не для каждого треугольника в отдельности, а минимально необходимое для конкретной фигуры, затем уже индексы обходят каждый треугольник. Например, в вершинном буфере задается 8 вершин из которых строится куб, но из восьми вершин не построить нужное количество треугольников, вот тут то и подключают индексы, которые пробегают нужное количество треугольников.

Автор: shuttle 23.10.2009, 05:51
4 параметр - это не количество вершин, это диапазон в котором находятся нужные вершины в вершинном буфере.
Например:
Если в вершинном буфере 200 значений, а в данный момент рисуем треугольник через индексный буфер и соединяем точки 0, 150, 120 то четвертый параметр надо указывать 151 - т.е. все три точки попадают в этот диапазон. 
Пришел к тамому мнению, тем что создал обыкновенную сетку из треугольников и подбирал нужные значения. 

Если я ошибся прошу исправить меня.

Автор: EgoBrain 25.10.2009, 09:39
Цитата(shuttle @ 23.10.2009,  05:51)
4 параметр - это не количество вершин, это диапазон в котором находятся нужные вершины в вершинном буфере.

То есть с разработчиком DirectX Вы не согласны?
Описание функции взято из справки, которая должна быть и у Вас.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)