TRIANGLESTRIP(DX8) - поиск оптимального решения

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

TRIANGLESTRIP(DX8) - поиск оптимального решения

Сообщение Yurich » 01.03.2005 (Вт) 19:44

2--5--8
| / | / |
1--4--7
| / | / |
0--3--6
Рисую прямоугольник из 8-и тр-ков.
Индексный массив для TRIANGLESTRIP содержит последовательность номеров вертексов 3,0,4,1,5,2,6,3,7,4,8,5 =12 * 2=24 байт. Компактно, и требуется только один вызов для рисования всего пр-ка. Но тут есть глюк - рисуется "чужой" тр-к 5-2-6.
Чтобы от него избавиться решил делать за 2 (кол-во столбцов) проходов - 3,0,4,1,5,2 и 6,3,7,4,8,5 с соответсвующим изменением параметра StartIndex в DrawIndexedPrimitive. Пока сделал - замахался (из-за того, что пр-к у меня может иметь неограниченное число секторов по вертикали и горизонтали). Но не в последнем дело. Может у вас есть более рациональные решения в плане последовательности вертексов?
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 02.03.2005 (Ср) 2:34

Для каждого случая рациональным может оказаться свой способ. Например в твоем примере я бы вообще использовал TRIANGLE_FAN без индексов. Массив вертесов тогда состоял бы из 4,1,2,5,8,7,6,3,0,1 вертексов (индексы соответствующие). То есть было бы еще компакней чем в предложенном тобой способе.
ХЎ

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.03.2005 (Ср) 16:21

Для того, чтобы не было лишних треугольников - их делают вырожденными, то есть когда у треугольника две из трех вершин совпадают. Но для таких маленьких фрагментов это не актуально, на сам вызов уходит гораздо больше времени, чем на просчет вертексов (не путать с филлрейтом).
Можно делать хоть TriangleList.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: TRIANGLESTRIP(DX8) - поиск оптимального решения

Сообщение Vovik » 02.03.2005 (Ср) 16:39

Юрич, рендерь в два... Я другого, более рационального выхода здесь не вижу...:roll:

d3drm:
А ты уверен, что твой способ будет работать??? Ведь первая вершина выходит общей... Получаются типа такие треугольники: 412, 425, 458, 487... Эт ведь не то, что ожидается... :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 18:58

d3drm писал(а):Например в твоем примере я бы вообще использовал TRIANGLE_FAN без индексов...

Очень сложно описать в цикле при меняющемся количестве сегментов. Неудобен (или вообще не применим) при нечетном числе секторов. Думаю TRIANGLE_FAN окажется полезен в ситуации, когда каждый сегмент (квадрат) будет рисоваться в отдельности. Например, для изменения текстуры не всего пр-ка, а только одного (части) сегментов.
Mikle писал(а): Для того, чтобы не было лишних треугольников - их делают вырожденными, то есть когда у треугольника две из трех вершин совпадают...

Обдумал множество вариантов, и пришел к заключеню, что как минимум 2 тр-ка останутся за гранью возможности применения этого правила (1-2-5 и 3-6-7). Либо получаюся "чужие". Может я не прав?...
Строчка из твоей "Water":
Код: Выделить всё
d3dDev.DrawIndexedPrimitive D3DPT_TRIANGLELIST, 0&, numVertex, 0&, numTri

Ведь ты рисуешь прямоугольный блок целиком?! Извини, не вдавался в подробности вычисления вертексов и индексов!
Vovik писал(а):d3drm:
А ты уверен, что твой способ будет работать??? Ведь первая вершина выходит общей... Получаются типа такие треугольники: 412, 425, 458, 487... Эт ведь не то, что ожидается...

Так, с нечетным числом сегментов не катит!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 19:06

Еще достал меня
D3DCREATE_SOFTWARE_VERTEXPROCESSING
При нём DrawIndexedPrimitive рисует что угодно, только не пр-к!
DrawIndexedPrimitiveUP - всё чётко, чисто!!!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.03.2005 (Ср) 19:10

TriangleStrip:
10437662215487
Четыре вырожденных треугольника.
У меня TriangleList, потому, что при IndexedPrimitives это почти не влеяет на скорость. А в ландшафте я сделал цикл из стрипов, потому, что там переменный размер фрейма (когда подходишь к краю - часть отсекается).

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 19:25

Mikle писал(а):У меня TriangleList...

А-а-а!!! ... Семён Семёныч!!!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 20:42

Mikle писал(а):TriangleStrip:
10437662215487
Четыре вырожденных треугольника.

Не, ни 4, а один (6-2-2). Фиг с ним. Я не успел пока проверить будет ли он прорисован в виде линии?
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 02.03.2005 (Ср) 23:29

Yurich, я для конкретного примера говорил, я толком не знял для чего ты это будешь использовать. Так, на рассмотрение подбросил.

Vovik, да, именно 4 вершика и будет общей, а треугольники будут построеты "веером" вокруг нее и все будет как на картинке.
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 23:35

Yurich писал(а):
Mikle писал(а):TriangleStrip:
10437662215487
Четыре вырожденных треугольника.

Не, ни 4, а один (6-2-2). Фиг с ним. Я не успел пока проверить будет ли он прорисован в виде линии?

Посмотрел Gamedev.ru, соображения в общем те же. Но мне присутствие тр-ка 6-2-2 (даже вырожденного) точно не нравится. При параллельной прорисовке через LINESTRIP он виден как диагональ через весь прямоугольник! Уже проверенное решение - кинуть этот треугольник "вдоль борта" - 304152584736 и остаюсь при своих 24 байтах с одним вызовом. Недостаток - 2 плоских примитива в диапазоне 258 - Хай об этом DX думает!!! Годится?!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 02.03.2005 (Ср) 23:38

Yurich писал(а):Недостаток - 2 плоских примитива в диапазоне 258 - Хай об этом DX думает!!! Годится?!
Тебе виднее... А где ты это вообще применяешь? :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.03.2005 (Ср) 23:46

Vovik писал(а):
Yurich писал(а):Недостаток - 2 плоских примитива в диапазоне 258 - Хай об этом DX думает!!! Годится?!
Тебе виднее... А где ты это вообще применяешь? :roll:

Ещё не применяю, подготавливаю "почву", например для той же водички. Ещё сделал рисование круга с разным количеством секторов и дорожек - это к примеру если лужа круглая. Но его ещё надо поработать. Хочу сделать куб, цилиндр, тор ...
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.03.2005 (Чт) 11:14

Вырожденных треугольника 4, не забывай, что это стрип:
766
662
622
221
Я пробовал применять вырожленные тр-ки - их не было видно, может у тебя D3DRS_LASTPIXEL включен?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 03.03.2005 (Чт) 17:48

Mikle писал(а):... пробовал применять вырожленные тр-ки - их не было видно, может у тебя D3DRS_LASTPIXEL включен?

Нет, если только он не вкключен по-умолчанию.
Вырожденный (мой) все-таки один. Пр то, что сам ДХ создает вырожденные в ходе STRIP-алгоритма голова не должна болеть!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList