Существует ли API для 2D-графики с идеальным пиксельным рисованием и аппаратным ускорением 2D?

На данный момент мы находимся на первых этапах создания 2D-игры, которая будет сосредоточена на разрушаемых средах и объектах.

Однако мы уже столкнулись с серьезными проблемами с выбором правильного графического API.

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

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

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


person IntellectualCat    schedule 12.10.2010    source источник
comment
Для чего вам понадобится прямой доступ к пикселям? Кажется, что использование текстурированных 2D-примитивов в OpenGL — хороший выбор, потому что вы получаете аппаратное преобразование и текстурирование (и можете добавлять шейдеры и другие эффекты, если хотите).   -  person Mike Daniels    schedule 13.10.2010
comment
Для разрушаемых сред и объектов, например, динамически отпадающие части объектов и разрушаемые части ландшафта.   -  person IntellectualCat    schedule 13.10.2010


Ответы (3)


OpenGL может дать вам прямой доступ к пикселям, но иногда трудно понять, почему это не так с некоторыми функциями...

glDrawPixels, вероятно, самый простой и надежный способ — вы можете скопировать блок пикселей из «обычной» памяти в буфер кадра — это не особенно быстро, но это старо (оно задокументировано MSDN, оно такое старое), хорошо поддерживается на разных платформах (и на аппаратном уровне). ) и дает вам полный контроль и точность рендеринга пикселей — вы даже можете запрограммировать всю логику рендеринга для работы на ЦП и просто использовать его для рисования пикселей. Тем не менее, вероятно, имеет смысл попытаться использовать преимущества производительности при использовании аппаратного обеспечения...

Использование аппаратного обеспечения — это хорошо, но точность до пикселя не гарантируется даже для самых простых операций — часто драйвер делает что-то немного отличающееся от того, что вы ожидаете — GL_LINES, GL_LINE_LOOP и т. д. обычно показывают это лучше всего — это сложно используйте их с точностью до пикселя, и, насколько я знаю, нет способа обеспечить их согласованную визуализацию, если вы хотите более толстые линии - разные драйверы будут делать разные вещи. Хотя разница может быть всего в один пиксель, я знаю, что часто этого может быть достаточно, чтобы вызвать проблему.

Однако некоторые операции, скорее всего, будут идеальными для пикселя, например, сэмплирование текстуры на четырехугольнике размером с экран. Это жизненно важно для отложенного рендеринга и подобных методов, где полноэкранные буферы должны быть каким-то образом объединены — пока вы избегаете распространенных проблем с ошибками округления, вы обычно можете размещать треугольники / четырехугольники с идеальной точностью до пикселя — просто не итерируйте вокруг экрана путем накопления значений с плавающей запятой — максимально упростите его, используя преобразование, которое имеет целочисленные значения для каждого пикселя. Этого можно достичь с помощью glOrtho. На самом деле, как правило, методы рендеринга треугольников привлекают наибольшее внимание и должны быть наиболее последовательными просто потому, что самые популярные графические программы (игры) полностью зависят от них.

Если вы изо всех сил пытаетесь найти способы выполнения определенных операций, подумайте также о шейдерах — их почти всегда достаточно для всего, что вы хотите сделать (хотя может быть сложно сделать это производительным), и они дают вам дополнительный уровень контроля, который вам, вероятно, понадобится высококачественный 2D-рендерер.

person jheriko    schedule 14.10.2010
comment
Еще один аргумент в пользу GL: его используют популярные оконные компоновщики, такие как Compiz и Android. Так что, возможно, отсутствие идеального пикселя не так уж и серьезно. - person Ciro Santilli 新疆再教育营六四事件ۍ 10.11.2016

Возможно, взгляните на SFML.

Из списка возможностей:

Доступны современные эффекты с аппаратным ускорением: альфа-смешивание, повороты, шейдеры, ...

person scable    schedule 13.10.2010

Cortex Command уже делает многое из того, о чем вы думаете, они используют Allegro, но это не аппаратное ускорение. Вы можете получить доступ к пикселям в объектах OpenGL и текстурах DirectX, хотя вам не хотелось бы делать это слишком часто, поскольку копировать данные туда и обратно из графического ОЗУ в основную память не обязательно дешево.

Возможно, тогда вы сможете свести к минимуму частоту манипулирования пикселями. Для 2D API мне лично очень нравится HGE, но он основан на DirectX.

person Montdidier    schedule 21.10.2010