Линейные размеры полигона в эмуляторе увеличены в 1.5 раза?

Debian Sid / SDK 20.0.3 / Эмулятор + kvm + GPU Emulation


Использую GLES20. Делаю класс спрайта, который сохранял бы линейные размеры(в пикселях) при любом разрешении экрана (и при смене ориентации тоже). Всё хорошо, только линейные размеры увеличены в 1.5 раза. На реальном устройстве проверить не могу.


Задаю ортогональную проекцию так:

float sp = 0.5f;
Matrix.orthoM(mProjMatrix,0 ,-sp, sp, -sp, sp, -sp, sp);


Т.е. проецировать будем куб со стороной 1, центром в (0,0,0);

Камеру отодвигаю. Пересчитываю размер полигонов

:
vertexBuffer = createPlane(width/_width/2, height/_height/2);


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

Сам код функции:
private FloatBuffer createPlane(float _width, float _height)
    {
        float quard[] = 
        {
            -_width,  _height, 0.0f,
             _width,  _height, 0.0f,
            -_width, -_height, 0.0f,
             _width, -_height, 0.0f
        };
        return floatbufferFactory(quard);
    }

    private FloatBuffer floatbufferFactory(float[] buffer)
    {
        ByteBuffer bb = ByteBuffer.allocateDirect(buffer.length*4);
        bb.order(ByteOrder.nativeOrder());
        FloatBuffer result = bb.asFloatBuffer();
        result.put(buffer);
        result.position(0);
        return result;
    }



Все перепробывал — и разные разрешения, и DPI в эмуляторе подставлял, и гуглил. Пикселей в 1.5 раза больше.
  • Вопрос задан
  • 2751 просмотр
Пригласить эксперта
Ответы на вопрос 1
genymotion советую попробовать этот эмулятор, мне он больше всех нравиться ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы