Масштабирование массивов вершин OpenGL

У меня есть массив вершин, который я рисую следующим образом (я работаю над преобразованием его в один вызов glDrawArrays, так что здесь это не проблема):

gl.glVertexPointer(3, GL.GL_FLOAT, 0, buff);
for ( int i = 0; i < numPoints; i++  ) {
    gl.glDrawArrays(GL.GL_LINE_LOOP, i*verticesPerPoint, verticesPerPoint);
}

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

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

Может ли кто-нибудь объяснить, что я делаю неправильно, или если это вообще возможно?


person Jeff Storey    schedule 26.10.2011    source источник
comment
что вы имеете в виду под масштабом? Масштабирование позиций вертикалей?   -  person Luca    schedule 26.10.2011
comment
Лука, например, если бы у меня был круг с центром в 0,0 и радиусом 1, и я попытался масштабировать его на 10, тогда радиус имел бы круг 10.   -  person Jeff Storey    schedule 26.10.2011


Ответы (1)


Вы уверены, что glScale применяется с текущим режимом матрицы, установленным на режим матрицы GL_MODELVIEW? Если да, то вызывается ли он до или после любого преобразования объектного пространства? Использование glScale[f/d] — разумный подход — он будет применяться к данным вершин, — но упоминание «постоянного размера пикселя» предполагает, что это, возможно, проблема 2D. В этом случае, возможно, стоит взглянуть на механику glViewport.

person Brett Hale    schedule 26.10.2011
comment
Бретт, я думаю, проблема здесь в размере пикселя. Я вернусь и посмотрю на это, спасибо. - person Jeff Storey; 26.10.2011