Установить систему координат для пикселей в OpenGL для Какао - PullRequest
1 голос
/ 11 декабря 2010

Я недавно начал изучать OpenGL, и пока он кажется довольно интуитивным, но на этом я застрял. Как я могу изменить настройки так, чтобы OpenGL использовал основанную на пикселях систему координат вместо того, что он использует сейчас. Например, этот код рисует прямоугольник размером около 10x20 пикселей:

glBegin(GL_QUADS); {
     glVertex3f(player.x, player.y, 0);
     glVertex3f(player.x+0.05, player.y, 0);
     glVertex3f(player.x+0.05, player.y+0.1, 0);
     glVertex3f(player.x, player.y+0.1, 0);
}

Как мне сделать так, чтобы этот код:

glBegin(GL_QUADS); {
     glVertex3f(player.x, player.y, 0);
     glVertex3f(player.x+10.0, player.y, 0);
     glVertex3f(player.x+10.0, player.y+20.0, 0);
     glVertex3f(player.x, player.y+20.0, 0);
}

будет производить в основном то же самое? Спасибо.

РЕДАКТИРОВАТЬ: Я видел, что кто-то предложил использовать где-то glOrtho (), но они не дали никакой информации о том, как это сделать. Будет ли это работать, и если да, то как бы я это сделал?

1 Ответ

2 голосов
/ 11 декабря 2010

Извините, если я говорю кратко; оказывается, что Safari на iPad отбрасывает ваш набор текста, когда он выполняет одну из возможных перезагрузок, вызванных предупреждением памяти.

Допущения: вы пометили вопрос iPhone, так что вы говорите о Cocoa Touch (с точкой отсчета в верхнем левом углу, положительным на оси у вниз). Точно так же вам, вероятно, нужны точки, а не пиксели - поэтому их 320x480 на экране, независимо от того, на дисплее сетчатки или нет.

glOrtho - именно то, что вам нужно - см. Справочную страницу по адресу http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.html. Итак, вы, вероятно, захотите сделать это со своим стеком проекций:

glOrthof (0, 320, 480, 0, 1, 1000);

А затем сделайте это один раз в виде модели:

glTranslatef (0, 0, -500)

И отправьте всю будущую геометрию без компонента z.

Для этого нужно настроить видовой экран без перспективы (т. Е. Позиция z не влияет на размер объекта), при этом левый край экрана равен x = 0, правый - x = 320, верхний - y = 0 и дно у = 480. Он произвольно размещает ближнюю плоскость отсечения на расстоянии 1, а дальнюю на расстоянии 1000, поскольку они должны быть где-то. Но затем он переводится на полпути (ладно, не совсем точно) между ними, и поэтому, если вы не отправите больше координат z, тогда вся ваша геометрия будет видимой, и у вас будет некоторая свобода для поворотов вокруг y или x, если вы хочу их.

Будьте осторожны: вызовы glVertex недоступны на iOS, поскольку они не являются частью OpenGL ES. Они также устарели в современном OpenGL. Короткая версия заключается в том, что они действительно неэффективны, и водителю сложно быстро с ними справиться. glVertexPointer - это то, что нужно использовать, передавая массив чисел C.

...