Координаты текстуры в OpenGL - PullRequest
3 голосов
/ 25 апреля 2011

Извините за действительно нубский вопрос ...

Я хочу применить определенный кусочек текстуры (а не всю текстуру) к четырехугольнику. Текстура представляет собой изображение размером 256x64, и я хотел бы иметь возможность указать соответствующий фрагмент, указав координаты пикселей его верхнего левого и нижнего правого углов ([0,0] - верхний левый угол всего изображения и [256,64] внизу справа).

Есть идеи, как это сделать?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 25 апреля 2011

Дробный ответ правильный, но если вы хотите использовать целочисленные текстурные координаты (например, в VBO), вы можете использовать матрицу GL_TEXTURE для изменения вашей системы координат текстур:

        glMatrixMode(GL_TEXTURE)
        glLoadIdentity()
        glScalef(1f/256f, 1f/64f, 1f)

После этого ваши координаты текстуры будут в пикселях. Другой стратегией масштабирования было бы масштабирование, чтобы каждая плитка составляла 1x1 в последних единицах.

1 голос
/ 25 апреля 2011

представьте, что вы хотите использовать тексель 20x20, начиная с 10,10, вы будете использовать следующие координаты:

[10.f/256.f,10.f/64.f]
[30.f/256.f,10.f/64.f]
[30.f/256.f,30.f/64.f]
[10.f/256.f,30.f/64.f]
0 голосов
/ 25 апреля 2011

Давайте рассмотрим следующий упрощенный пример 1D текстуры шириной 8 пикселей (центры пикселей расположены на цифрах):

 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Соответствующие координаты текстуры:

 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
0/8 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/8

Теперь, если вы хотите, чтобы субтекстура от текселей 3 до 7, использовались координаты текстуры от 2/8 до 7/8.

Вы должны также принять к сведению кое-что еще: целочисленные текстурные координаты обращаются не к центрам текселей, а к точной середине между ними; это может вызвать размытость в определенных ситуациях.

0 голосов
/ 25 апреля 2011

Вы используете плавающие текстурные координаты, где они варьируются от (0.0f, 0.0f) до (1.0f, 1.0f). В вашем случае вы берете значения пикселей и делите их на 256-1 или 64-1, в зависимости от того, с каким измерением вы имеете дело. (Это предполагает, что вы действительно хотели сказать, что ваше изображение идет к [255,63], а не к [256,64], что означает, что ваши координаты основаны на 0, а не на 1).

...