Рендеринг 3d объекта на 2d поверхность (встроенная система)


9

я работаю над встроенной системой, и в свободное время я хотел бы проверить ее возможности рисования.

Речь идет о микроконтроллере ARM Cortex M3, подключенном к плате EasyMX Stellaris. И у меня есть небольшой экран TFT 320x240 :)

Теперь у меня есть немного свободного времени каждый день, и я хочу создать вращающийся куб. Micro C PRO для ARM не имеет возможности 3D-рисования, что означает, что это должно быть сделано в программном обеспечении.

Из книги «Введение в программирование трехмерных игр с помощью DirectX 10» я знаю матричную алгебру преобразований, но это здорово, когда у вас есть DirectX для правильной настройки камеры.

Я думаю, я мог бы сделать 2-й объект, чтобы вращаться, но как бы я пошел с 3D-объект?

Любые идеи и примеры приветствуются. Хотя я бы предпочел советы. Я хотел бы понять это.


@ Марин Что ты сделал до сих пор? Я пытаюсь добиться того же. Пожалуйста, свяжитесь со мной по скайпу: andreahmed
Ахмед Салех

Ответы:


7

Вы понимаете, что камера DirectX - это всего лишь пара матричных преобразований? У вас есть ModelView, Projection, затем преобразование матрицы Viewport в каждую вершину в таком порядке, чтобы изменить 3d-координаты на 2d-координаты.

Подробнее о преобразовании по стандартному конвейеру (я думаю, что DirectX и OpenGL работают одинаково).

Затем вы растеризуете треугольники, основываясь на двухмерных местоположениях (которые возникли в результате ваших преобразований) имеющегося теперь двухмерного массива вершин. Это может быстро усложниться, но использование теста PIT и полное окрашивание любого пикселя, который сталкивается, должно быть достаточно простым и эффективным в вашем случае.

Другой способ сделать это и более простой способ - создать трассировщик лучей. Просто распакуйте луч, используя матрицу преобразования, которую вы хотите применить к вашему объекту.

Давненько я не играл с низкоуровневыми вещами, так что я могу ошибаться, но любой маршрут не должен быть слишком сложным. Поймите, как работает аппаратный конвейер, и внедрите его в программное обеспечение или напишите трассировщик лучей.

Кстати, именно здесь я узнал, что я знаю о графическом конвейере.


Любая программируемая ссылка на конвейер для OpenGL также будет полезна, поскольку все преобразования теперь кодируются вручную.
edA-qa mort-ora-y

@ Классический гром. О камере: да, я это понимаю. Но я не знаю, как перенести все это в эту систему. Я думал, что, возможно, есть какое-то уравнение для этого. Таким образом уклоняется от матричных расчетов. Может быть, я не очень хорошо написал вопрос. Про трубопровод: они одинаковые. Спасибо!
Мартин Бергер

3

В те дни, когда 3D-оборудование было недоступно, нам приходилось создавать собственные 3D-движки и растеризаторы полигонов. 3DICA - это отличный учебник, объясняющий все основы программного 3D-движка. Для меня изображения не будут отображаться в Firefox, но в Internet Explorer они работают нормально.

Главы 2.1 и 3.1 должны быть достаточными для удовлетворения ваших потребностей, но чтение всего урока должно многому вас научить.


Ух ты. Хорошие вещи. Я думаю, что единственное, чего я не знаю на этой странице, это сплайны. У меня нет времени, чтобы углубиться в это. Теперь. Спасибо за это.
Мартин Бергер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.