Дайте мне посмотреть, смогу ли я задать этот вопрос разборчиво:
Я пишу 2D-движок на основе плиток в OpenGL ES с намерением сделать его похожим на растровый движок старой школы.Все мои художественные ресурсы имеют собственное разрешение (то есть 1: 1 пиксельное оформление) и отображаются на прямоугольные многоугольники, а мой вид OpenGL является ортогональным и охватывает прямоугольник (0,0, 0,0) до (screen.width, screen.height).).Я сделал это, надеясь, что каждый пиксель на дисплее будет соответствовать «виртуальному» квадрату пикселя в координатной плоскости XY, который, в свою очередь, будет соответствовать пикселю на одной из моих плиток.(Плитки имеют размер 16,0 x 16,0, и происхождение моего мира очевидно [0,0,0,0].)
Я был уверен, что мой движок будет выглядеть «фальшивым» из-за ошибок аппроксимации.Например, я подумал, что, поскольку пиксели плитки не записываются непосредственно на дисплей, иногда может быть получен неправильный пиксель.Я также был уверен, что при движении камеры OpenGL будет интерполироваться всякий раз, когда плитки не будут выровнены с фактическими пикселями дисплея.
Как оказалось, OpenGL ведет себя почти точно так же, как и растровый движок.Когда камера неподвижна, каждый виртуальный пиксель идеально соответствует пикселю на дисплее.Когда камера находится в движении, плитки «привязывают» один ряд пикселей / столбец за раз, а не перемещаются плавно посредством интерполяции.(Это происходит, даже если движение очень медленное.) Из любопытства я попытался увеличить свои плитки до 1.1x, и, как я и ожидал, они стали выглядеть грязными, и поведение привязки прекратилось.Правда ли, что OpenGL ведет себя по-разному в зависимости от того, может ли материал, который он отображает, быть идеально выровнен с дисплеем?
Где в спецификации я могу найти информацию об этих проблемах и как я могу гарантировать, что OpenGLпродолжает вести себя таким образом?Я чувствую себя некомфортно, используя стандартное значение, которое мне не совсем понятно, поскольку теоретически поведение может измениться в любое время.
Спасибо!