2013-05-31 2 views
2

Я хочу нарисовать огромное количество одинаковых текстурных квадрациклов (картирование плитки). Текстурированные квадратики будут иметь одинаковый размер и одинаковые координаты текстуры, но разные координаты на экране.Огромное количество одинаковых текстурированных квадрациклов

Я использую VertexBuffer и DrawPrimitive(D3DPT_TRIANGLELIST, ...)

Если каре расположены один за другим, я могу использовать текстуру повторять (набор координаты текстуры> 1), и только 6 вершин в VertexBuffer.

Если квадроциклы находятся в другом положении, я создаю 6 вершин для каждого квадрата в VertexBuffer, и этот метод имеет низкую производительность (менее 60 FPS, начиная с 1500000 вершин на мощном компьютере).

SOFTWARE_VERTEXPROCESSING используется для целей совместимости.

Есть ли какой-либо лучший подход для рисования огромного количества небольших текстурных квадратов в другом положении?

Заранее спасибо.

+1

Я думаю, что 'SOFTWARE_VERTEXPROCESSING' является вероятным подозреваемым в плохой производительности - вы проводили сравнение с этим флагом/без этого? –

+0

'HARDWARE_VERTEXPROCESSING' решает ситуацию и дает постоянную 60 FPS (100+ FPS без VSync), но приложение должно также работать на аппаратных средствах, которые поддерживают только« SOFTWARE_VERTEXPROCESSING », например, на старых чипсетах Intel. Интересно, есть ли другое решение, кроме создания вершин для каждого квадрата в VertexBuffer (как уже упоминалось, размеры квадрата и текстуры одинаковы, поэтому в основном только позиция на экране отличается). – Demion

+0

Вы можете работать с двумя вершинами. Один для квадроцикла и один с позициями. В vertexshader вы объединяете их для правильного позиционирования. Вы визуализируете черепичную плоскость (2D или 3D?) Или блокируете как minecraft или какова цель? – Gnietschow

ответ

1

Я думаю, вы должны рассмотреть вопрос об использовании на дереве квадрантов подход

+0

Спасибо, что ответили. Буду признателен, если вы предоставите дополнительную информацию об этом подходе (ссылки). – Demion

+0

Quadtree в основном используется для рельефа местности LOD (уровень детализации). Идея состоит в том, чтобы показывать только соответствующие квадратики в зависимости от их расстояния от камеры. Проверьте следующие результаты поиска в Google: https://www.google.bg/#sclient=psy-ab&qu=quadtree+multiple+texture+quads&oq=quadtree+multiple+texture+quads&gs_l=hp.3...637.12250. 0.12375.33.31.1.1.1.0.210.4105.0j30j1.31.0 ... 0,0 ... 1c.1.15.psy-ab.1lo_UVH9ERQ & = 1 PBX & БАВ = on.2, or.r_cp.r_qf. & BVM = bv.47380653, д. ZWU & fp = 87f495de9fe5a5f6 & biw = 1280 & bih = 648 Если у вас есть еще вопросы, пожалуйста, дайте мне знать. – VuVirt

1

Я задаюсь вопросом, почему вам столько же текстуры четверных? если вам нужно всего лишь отобразить 2D-плоскость, я думаю, что одного квадрата достаточно.