Im написание очень простой 3d-движок в С# и GDI+, только для рендеринга некоторых моделей (я думаю, Directx или OpenGL подобны лопате, чтобы съесть суп). До сих пор я успешно реализовал рисунок Wireframe моей модели, но следующим шагом, конечно же, является Faces. И есть моя проблема, теперь я просто проецирую свои 3D-точки на 2d-точку, а затем нарисовал ее, используя простую для каждого лица g.DrawPolygon(Pens.Red, projected_points);
и для каркаса это нормально.
Можно рассчитать перекрывающуюся часть многоугольника? а затем нарисуйте FilledPolygon, или лучше идея рисует пиксель за пикселем, и если z-буфер моего пикселя далее задает новый пиксель.
Если возможен первый вариант, какой из них быстрее (для реализации и расчета)?
Можно рассчитать перекрывающуюся часть многоугольника? а затем нарисуйте FilledPolygon, или лучше идея рисует пиксель за пикселем, и если z-буфер моего пикселя далее задает новый пиксель.
Если возможен первый вариант, какой из них быстрее (для реализации и расчета)?
Да, это возможно. Вы можете проверять каждый многоугольник всеми остальными в списке. Сложность зависит от типа многоугольника (конечно, проще всего с треугольниками). Но производительность может резко упасть с большим количеством полигонов. И даже если вы найдете перекрывающиеся области, вам нужно будет интерполировать цвета или координаты текстуры (если вы планируете использовать их). Также я не уверен в API, который вы используете для рисования, но GDI не поддерживает заливку полигона с интерполированными цветами.
Я слышал, что это был подход, используемый в 3D-графике, прежде чем изобретать буфер Z. :)
Однажды я попытался реализовать подобный проект и использовал Z-buffer + мою собственную процедуру для заполнения треугольников интерполированными цветами (в которых используется Z-буфер). Я напрямую обратился к буферу данных пиксельных изображений GDI. Затем, после того как все полигоны были обработаны, я разбил результат на экране.