2011-01-22 5 views
2

В настоящее время я реализую свой собственный рендеринг с использованием алгоритма Z-Buffer. Как только я выполнил необходимые вычисления (прочитайте: Мой Z-буфер заполнен правильными значениями). Я использую SDL для цветного отображения в нужных пикселях. Для этого я использую HWSurface.Эффективная реализация Z-буфера

Мой вопрос в том, как я могу сделать это как можно быстрее? С этим я подразумеваю сам чертеж, я могу сделать оптимизацию в своей структуре, мой алгоритм, я сделаю это позже, но я хочу быть уверенным, что сам чертеж будет как можно быстрее.

Поскольку у меня есть собственная реализация ZBuffer (и в дальнейшем будут другие алгоритмы), я не могу использовать OpenGL, так есть ли альтернативы?

Теперь я просто просматриваю все свои точки в z-буфере и рисую все пиксели, которые нужно рисовать поодиночке (а потому, что это z-буферизация, я должен это делать, правильно?) и я называю метод DrawPixel. Что касается SDL, я блокирую свою поверхность, прежде чем переходить через z-буфер, нарисовать все пиксели и разблокировать их потом, это не может идти быстрее, насколько я знаю.

Любые предложения?

+0

Можете ли вы «нарисовать» это, обновив текстуру, а затем используйте opengl, чтобы нарисовать один квад с текстурой? – vmpstr

+0

Я собираюсь проверить это, но не уверен. – KWyckmans

ответ

1

Программные реализации невероятно медленны, то есть WARP отображает Crysis на i7 hexacore на десятой FPS, что делает 8800GT. Вы не найдете никакой конкурентоспособной производительности в Z-буфере, реализованном программным обеспечением.

Z-буфер не является особенно сложным алгоритмом, и маловероятно, что вы найдете одну реализацию, более эффективную, чем другая. Z-буферизация - это не то, что вы делаете во время растеризации - это то, что вы делаете во время рендеринга пикселей. Если глубина нового пикселя находится дальше, чем записанное в данный момент значение, не визуализируйте пиксель дальше, например, не вычисляйте его цвет и т. Д. Вы не рисуете z-буфер или что-то в этом роде. Это не похоже на то, где вы можете выбрать наиболее эффективную сортировку для своего алгоритма - это больше похоже на матричное умножение, они почти одинаковы.

+0

Rasterisation * is * "pixel rendering", и именно там вы обычно проводите тестирование глубины. –

+0

Да, ты совершенно прав, я должен признать, что это не будет идти быстрее. – KWyckmans

Смежные вопросы