3d Альтернатива для D3DXSPRITE для билбординга - PullRequest
1 голос
/ 09 ноября 2009

Я хочу рекламировать изображение солнца в моем мире 3d (directx 9).

Создание D3DXSPRITE прекрасно в некоторых случаях, но это всего лишь объект 2d , и он не может существовать в моем "мире" как объект 3d . Какой альтернативный метод для билбординга похож на d3dxsprite? Как я могу это реализовать?

Единственная альтернатива, которую я сейчас нашел, - это ссылка: http://www.two -kings.de / tutorials / dxgraphics / dxgraphics17.html , которая, похоже, не работает

1 Ответ

2 голосов
/ 09 ноября 2009

В центре вашего объекта vCenter. Объект имеет ширину и высоту (ш, ч).

Во-первых, вам нужна ваша камера, чтобы вывесить вектор. Это рассчитывается как vCamToCen = normalize (vCamera - vCenter).

Затем вам нужен соответствующий грубый вектор. Это может быть извлечено из матрицы вида (удобно описанной здесь , то есть из второго столбца). Затем вы можете рассчитать побочный вектор, выполнив vSide = vCamToCen x vUp. Затем вычислите REAL up vector, выполнив vUp = vCamToCen x vSide. Где «х» - это перекрестное произведение.

Теперь у вас есть вся информация, необходимая для рекламы.

Затем вы можете сформировать свои 4 верта следующим образом.

const float halfW = w / 2.0f;
const float halfH = h / 2.0f;

const D3DXVECTOR3 vHalfSide = vSide * halfW;
const D3DXVECTOR3 vHalfUp = vUp  * halfH;

vertex[0].pos = vCenter;
vertex[1].pos = vCenter;
vertex[2].pos = vCenter;
vertex[3].pos = vCenter;

vertex[0].pos -= vHalfSide;
vertex[0].pos -= vHalfUp;

vertex[1].pos += vHalfSide;
vertex[1].pos -= vHalfUp;

vertex[2].pos += vHalfSide;
vertex[2].pos += vHalfUp;

vertex[3].pos -= vHalfSide;
vertex[3].pos += vHalfUp;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...