Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прорисовка объекта с уникальными нормалями, DirectX 
V
    Опции темы
maxfox
Дата 6.4.2015, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 29.7.2009

Репутация: нет
Всего: нет



Доброго времени суток, товарищи!
Я недавно начал изучение Директ-Х.  В соответствии с туторами у меня все вроде бы получается. Вернее всё было  понятно на плоскости из двух трианглов. Но вот я решил нарисовать куб с текстурой и освещением, наткнулся на дилемму.
как было с плоскостью:
два треугольника задаются массивом вершин 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);

мой вопрос заключается в том, как же правильнее выводить объекты со сложной формрй сглаживания (ведь нормали создаю сглаживание объекта), и при сложном текстурировании (хочу чтобы каждая сторона куба занимала свой уникальный кусок текстуры)?
Правильнее делать с добавлением избыточности вершин, или рендерить объекты по каждому треугольнику? 
PM MAIL   Вверх
maxfox
Дата 6.4.2015, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 29.7.2009

Репутация: нет
Всего: нет



спс. мне подсказали, что избыточность вершин, это правильный путь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.