Эффективная реализация Z-буфера
Вопрос
В настоящее время я внедряю свой собственный рендерер, используя алгоритм Z-буфера. После того, как я сделаю необходимые расчеты (прочитайте: мой Z-буфер заполнен правильными значениями), я использую SDL для окрашивания в необходимых пикселях. Я использую для этого HWSurface.
Мой вопрос: как я могу сделать это как можно быстрее? Под этим я подразумеваю сам рисунок, я могу делать оптимизации в своей структуре, своем алгоритме, я сделаю это позже, но я хочу быть уверенным, что сам рисунок как можно быстрее.
Поскольку у меня есть собственная реализация Zbuffer (а позже будут другие алгоритмы) я не могу использовать OpenGL, так что есть какие -либо альтернативы?
Теперь я просто перехожу на все свои очки в Z-буфере и рисую все пиксели, которые нужно нарисовать, один за другим (и потому что это Z-буферист, я должен сделать это, верно?) И я называю Метод Drawpixel. Что касается SDL, я блокирую свою поверхность, прежде чем пройти через Z-буфер, нарисовать все пиксели и разблокировать ее потом, это не может идти быстрее, насколько я знаю.
Какие-либо предложения?
Решение
Реализации программного обеспечения невероятно медленные, то есть WARP производит кризис на шестигранке I7 на десятый FPS, который делает 8800GT. Вы не найдете никакой конкурентной производительности в Z-буфере с помощью программного обеспечения.
Z-буфер не является особенно сложным алгоритмом, и маловероятно, что вы найдете одну реализацию, которая более эффективна, чем другая. Z-буферизация- это не то, что вы делаете во время расчивания- это то, что вы делаете во время рендеринга пикселей. Если глубина нового пикселя находится дальше, чем письменное значение в настоящее время, не делайте пиксель дальше, например, не вычислите его цвет и т. Д. Вы не рисуете Z-буфер или что-то в этом роде. Это не похоже на то, где вы можете выбрать наиболее эффективный сортирование для своего алгоритма- это больше похоже на умножение матрицы, они почти одинаковы.