Как обрезать и масштабировать текстуру в OpenGL - PullRequest
4 голосов
/ 20 февраля 2012

У меня есть входная текстура 852x640 и выходная текстура 612x612.Я передаю ввод через шейдер и хочу, чтобы вывод был масштабирован и правильно обрезан.У меня проблемы с настройкой squareCoordinates, textureCoordinates и viewPorts для правильной совместной работы.

Я не хочу просто обрезать, я хочу масштабировать его, чтобы получить наибольшее количествоизображение как можно скорее.Если бы я использовал Photoshop, я бы сделал это в два шага (в OpenGL я пытаюсь сделать это за один шаг):

  1. Масштабировать изображение до 612x814
  2. Обрезатьизбыточные 101px с каждой стороны

Я использую стандартные квадратные вершины и вершины текстуры:

static const GLfloat squareVertices[] = {
    -1.0f, -1.0f,
    1.0f, -1.0f,
    -1.0f,  1.0f,
    1.0f,  1.0f,
};

static const GLfloat squareTextureVertices[] = {
    0.0f, 0.0f,
    1.0f, 0.0f,
    0.0f,  1.0f,
    1.0f,  1.0f
}

Я точно не знаю, каким должен быть viewPort.

1 Ответ

6 голосов
/ 20 февраля 2012

Область просмотра будет 612x612 пикселей.

Для масштабирования и обрезки оригинального четырехугольника проще всего было бы установить вершины для покрытия прямоугольника 612x612 (в вашем случае мы оставляем squareVertices без изменений), но установив координаты текстуры, чтобы обрезать левую и правую стороны:

static const GLfloat squareTextureVertices[] = {
    (852.0f-640.0f)/852.0f*0.5f, 0.0f,
    1.0f - (852.0f-640.0f)/852.0f*0.5f, 0.0f,
    (852.0f-640.0f)/852.0f*0.5f,  1.0f,
    1.0f - (852.0f-640.0f)/852.0f*0.5f,  1.0f
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...