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


Автор: maxfox 6.4.2015, 00:57
Доброго времени суток, товарищи!
Я недавно начал изучение Директ-Х.  В соответствии с туторами у меня все вроде бы получается. Вернее всё было  понятно на плоскости из двух трианглов. Но вот я решил нарисовать куб с текстурой и освещением, наткнулся на дилемму.
как было с плоскостью:
два треугольника задаются массивом вершин 0, 1, 2, 3. И массивом индексов вершин: 0, 2, 1, 0, 3, 2.
структура вершины:

Код

struct oPNT
{
  float x,y,z; // координата
  float nx,ny,nz; // нормаль
  float u,v; // текст. коорд
};


на основе этих массивов создаются буферы IDirect3DVertexBuffer9 и IDirect3DIndexBuffer9 ;
ну и сама отрисовка как по книжке:

Код

SetStreamSource( 0, ggVB, 0, sizeof(oPNT) );
SetIndices( ggIB );
DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0, 0, 4, 0,2);


Все нормально работает. Вопрос в том, как организовать все это для Куба?

для куба массив вершин получается из 8 шт: 0, 1, 2, 3, 4, 5, 6, 7. Ну и массивом индексов вершин не буду перечислять - он длинной 12*3
Дилема в том, что тут нормали для каждой стороны куба, т.е. каждая пара треугольников - имеют свои уникальные нормали. т.е. количество нормалей будет равно 12*3 - по количеству треугольников (ну или 6*3 - по количеству сторон куба).
Получается что структура вершины oPNT тут уже не годится. Либо годится, но нужно избыточное количество вершин, т.е количество вершин будет равно 12*3. Согласитесь ,ведь это приличный перерасход памяти!
В результате я пока реализовал рендеринг объекта отдельно по каждому треугольнику.
т.е. у меня в цикле по всем треугольникам каждый раз заполняется буфер IDirect3DVertexBuffer9  - для каждого треугольника - 'это массив их трёх вершин типа oPNT.
- и я тут же его прорисовываю:  DrawPrimitive(D3DPT_TRIANGLELIST,0,1);

мой вопрос заключается в том, как же правильнее выводить объекты со сложной формрй сглаживания (ведь нормали создаю сглаживание объекта), и при сложном текстурировании (хочу чтобы каждая сторона куба занимала свой уникальный кусок текстуры)?
Правильнее делать с добавлением избыточности вершин, или рендерить объекты по каждому треугольнику? 

Автор: maxfox 6.4.2015, 23:33
спс. мне подсказали, что избыточность вершин, это правильный путь.

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