Отключение сглаживания в Löve2D

Я использую Löve2D для написания небольшой игры. Löve2D - игровой движок с открытым исходным кодом для Lua. Проблема, с которой я сталкиваюсь, заключается в том, что какой-то фильтр сглаживания автоматически применяется к вашим спрайтам, когда вы рисуете его в нецелых позициях.

love.graphics.draw( sprite, x, y )

Поэтому, когда x или y не округлены (например, x=100.24), спрайт выглядит размытым. То же самое происходит, когда размер спрайта не является четным, потому что (x,y) указывает на центр спрайта. Например, спрайт размером 31x30 снова будет выглядеть размытым, потому что его пиксели окрашены в нецелые позиции.

Поскольку я использую пиксельную графику, я хочу избежать этого полностью, иначе искусство разрушается этим эффектом. Обходной путь, который я использую до сих пор, состоит в том, чтобы заставить координаты округляться, засоряя код вызовами math.floor(), и заставляя все спрайты иметь четные размеры, добавляя строку или столбец прозрачных пикселей с помощью программы рисования., если нужно.

Есть ли какая-нибудь команда для отключения сглаживания, которую я могу вызвать при запуске программы?

4 ответа

Решение

На случай, если кому-то интересно, я спрашивал в других местах и ​​узнал, что то, что я спрашиваю, уже запрошено как функция: http://love2d.org/forum/tracker.php?p=2&t=7

Итак, текущая версия Löve, которую я использую (0.5.0), по-прежнему не позволяет отключить фильтр сглаживания, но эта функция уже включена в SVN-версию движка.

Если вы отключите сглаживание, вы просто получите псевдоним, отсюда и название! Почему вы рисуете на нецелых позициях, и что вы хотите, чтобы это делало с этими дробными частями? (Округлить их до ближайшего значения? Обрезать их? А что, если они отрицательные?)

Лично я оставил бы низкоуровневую графику в покое и изменил бы ваш код, чтобы использовать методы доступа для x и y, которые выполняют округление или усечение, которое вам требуется. Это гарантирует, что ваша пиксельная графика в конечном итоге будет нарисована на целочисленных границах, сохраняя сглаживание, которое может понадобиться вам позже.

Другой возможный обходной путь может заключаться в использовании math.floor() для округления ваших целых чисел в качестве дешевого обходного пути.

вы можете отключить сглаживание, добавив love.graphics.setDefaultFilter("nearest", "nearest", 1)к love.load()

Другие вопросы по тегам