3D z-буфер c # GDI plus

1

Im написание очень простой 3d-движок в С# и GDI+, только для рендеринга некоторых моделей (я думаю, Directx или OpenGL подобны лопате, чтобы съесть суп). До сих пор я успешно реализовал рисунок Wireframe моей модели, но следующим шагом, конечно же, является Faces. И есть моя проблема, теперь я просто проецирую свои 3D-точки на 2d-точку, а затем нарисовал ее, используя простую для каждого лица g.DrawPolygon(Pens.Red, projected_points); и для каркаса это нормально.

Можно рассчитать перекрывающуюся часть многоугольника? а затем нарисуйте FilledPolygon, или лучше идея рисует пиксель за пикселем, и если z-буфер моего пикселя далее задает новый пиксель.

Если возможен первый вариант, какой из них быстрее (для реализации и расчета)?

  • 5
    Да, это возможно. Но в этот момент вы можете просто начать использовать DirectX или OpenGL, который сделает все это за вас.
  • 2
    Я приведу аналогию с DirectX, ваш подход слишком далеко в другом направлении, это все равно, что пытаться вытащить суповую ложку из палки, когда рядом с вами есть ящик, полный серебряных изделий.
Показать ещё 1 комментарий
Теги:
3d
render
gdi

1 ответ

1

Можно рассчитать перекрывающуюся часть многоугольника? а затем нарисуйте FilledPolygon, или лучше идея рисует пиксель за пикселем, и если z-буфер моего пикселя далее задает новый пиксель.

Если возможен первый вариант, какой из них быстрее (для реализации и расчета)?

Да, это возможно. Вы можете проверять каждый многоугольник всеми остальными в списке. Сложность зависит от типа многоугольника (конечно, проще всего с треугольниками). Но производительность может резко упасть с большим количеством полигонов. И даже если вы найдете перекрывающиеся области, вам нужно будет интерполировать цвета или координаты текстуры (если вы планируете использовать их). Также я не уверен в API, который вы используете для рисования, но GDI не поддерживает заливку полигона с интерполированными цветами.

Я слышал, что это был подход, используемый в 3D-графике, прежде чем изобретать буфер Z. :)

Однажды я попытался реализовать подобный проект и использовал Z-buffer + мою собственную процедуру для заполнения треугольников интерполированными цветами (в которых используется Z-буфер). Я напрямую обратился к буферу данных пиксельных изображений GDI. Затем, после того как все полигоны были обработаны, я разбил результат на экране.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню