Как изменить положение текстуры в OpenGL? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть текстура со следующими координатами текстуры

    vec![
        x,
        y,
        0.0, 0.0, // u,v
        layer,
        x + w,
        y,
        1.0, 0.0,
        layer,
        x + w,
        y + h,
        1.0, 1.0,
        layer,
        x,
        y + h,
        0.0, 1.0,
        layer,
    ]

enter image description here

How can I move the texture down by 10 pixels.

введите описание изображения здесь

Однако я хочу выровнять текстуру по пикселям экрана, какие вычисления мне нужно сделать для этого?

1 Ответ

1 голос
/ 04 августа 2020

Есть 2 способа сделать это, которые сильно зависят от того, как вы визуализируете свой текст. Из кода, которым вы поделились, кажется, что вы визуализируете четырехугольник, который действует как ограничивающая рамка символа, выровненная по оси. В этом случае вам нужно выяснить размеры пикселя в нормализованном пространстве.

Работа с координатами текстуры (т.е. нормализованное пространство равно [0, 1])

Быстрое напоминание о том, как нормализовано координирует работу. Пусть sw, sh обозначает ширину и высоту вашего окна / холста / области рисования в пикселях. Пусть nw, nh будут нормализованными (т.е. от 0 до 1) координатами вашего четырехугольника. Тогда координаты экрана вашего квадроцикла будут просто:

w' = nw * sw

h = nh * sh

Ширина одного пикселя составляет всего 1 / sw, а высота просто 1 / sh, таким образом, перемещение квадрата ровно на 10 пикселей вниз эквивалентно добавлению вектора (1/sw, -1/sh) * 10 к 4 углам. Или вы можете преобразовать в экранное пространство, добавить (0, -10) и затем перенормировать, разделив каждую координату на соответствующую длину экрана.

Для второго варианта математика остается той же, но вместо этого на вершинах экрана вы делаете это с помощью uvs, но это более актуально, когда вы хотите смещать выборку текстуры без изменения геометрии, я добавил это для полноты.

Работа с координатами экрана (т.е. нормализованное пространство [-1, 1])

В этом случае одно измерение нормализуется до длины 2 (поскольку 1- (-1) = 2), а не длины 1, как в выше случай. Другими словами, нормализованная координата в этом сценарии равна (x', y') = [(x,y) * 2 - (w, h)] / (w, h). Вы можете проверить, что с помощью приведенной выше формулы (0,0) отображается в (-1, -1) и (w, h) в (1,1).

Это означает, что формула для относительных смещений равна (ox', oy') = 2 * (ox, oy) / (w, h), поскольку постоянный член (w,h)/(w,h) будет сокращаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...