Изменение атрибутов вершин OpenGL в образце - PullRequest
1 голос
/ 26 мая 2011

Я использую этот учебник / пример , чтобы выполнить базовое отслеживание объектов на iPhone. Все отлично работает, я даже много подправил производительность, но я все еще застрял с одной проблемой.

Основная проблема в том, что я недостаточно хорошо понимаю OpenGL, и я должен быть наказан за то, что постыдно взял пример кода и превратил его во что-то, что мне подходит. На самом деле меня наказывают;

В примере показано, как преобразовать (с помощью шейдеров) камеру iPhone в текстуру за пределами экрана, чтобы можно было обрабатывать ее и отображать на экране. Теперь я понял, что он рисует текстуру / слой, используя массив атрибутов вершин (принцип, который я почти не понимаю, несмотря на мои поиски в Google).

Массивы вершин имеют следующий вид:

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

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

Я также выяснил, что эти атрибуты вершин могут изменить ориентацию нарисованной текстуры. Текстура теперь рисуется в портретной ориентации, что означает, что если я буду держать свой iPhone в горизонтальном положении (что я хочу) и позволю вращаться представлениям, все, что я вижу на экране, - это камера с углом 90 градусов.

Я думаю, что сузил проблему настолько, чтобы обвинить эти вершины, и я немного возился с их значениями, но без какого-либо приемлемого результата.

Есть ли кто-нибудь, кто может помочь мне нарисовать текстуру в ландшафте?

P.S .: если я инвертирую значения «квадрата», я смогу получить изображение, повернутое на 180 градусов. Но я хочу, чтобы текстура поворачивалась на 90 градусов, а не на 180.

1 Ответ

2 голосов
/ 26 мая 2011

Представьте, что ваш экран имеет нормализованные координаты, которые идут от -1.0,-1.0 (слева, снизу) до 1.0, 1.0. Первый массив задает координаты вершин квадрата (предположительно в виде треугольной полосы, потому что они даны в форме "Z").

Второй массив определяет координаты текстуры. То же самое, за исключением того, что они находятся в диапазоне 0.0, 1.0.

Итак, чтобы повернуть на 90 градусов по часовой стрелке:

1.0f, 0.0f
0.0f, 0.0f
1.0f, 1.0f
0.0f, 1.0f

против часовой:

0.0f, 1.0f
1.0f, 1.0f
0.0f, 0.0f
1.0f, 0.0f

Я надеюсь, что это работает!

...