2010-12-11 3 views
1

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

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); 
} 

будет производить в основном то же самое? Благодарю.

EDIT: Я видел, как кто-то предлагал использовать glOrtho() где-то, но они не дали никакой информации о том, как это сделать. Будет ли это работать, и если да, то как мне это сделать?

ответ

2

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

Предположения: вы отметили вопрос iPhone, так что вы говорите о Cocoa Touch (с началом в левом верхнем углу, положительным на оси y вниз). Точно так же вам, вероятно, нужны точки, а не пиксели, поэтому 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 не влияет на размер объекта), с левым краем экрана при x = 0, справа на x = 320, верхняя часть на y = 0, а нижняя - при y = 480. Он произвольно устанавливает плоскость ближнего клипа на расстоянии 1 и дальнем расстоянии 1000, так как они должны быть где-то. Но тогда это переводится на полпути (хорошо, не совсем точно) между ними, и поэтому, если вы больше не отправляете координаты z, тогда вся ваша геометрия будет видна, и у вас есть некоторая свобода для поворотов вокруг y или x, если вы хочу их.

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

+0

Работал отлично. Благодаря! – Jumhyn

Смежные вопросы