[OpenGL]Матрицы

http://lmgtfy.com/?q=opengl+what+does+push+matrix+do
И вдогонку своё обьяснение:

В OpenGL есть различные операции с матрицами: translate (смещение), rotate (поворот), scale (размер). При каждой из этих операций текущая матрица домножается на переданную матрицу (матрицу смещения, скейла или поворота), в итоге они как бы "совмещаются" (см. законы умножения матриц).

glPushMatrix и glPopMatrix работают со стеком матриц:
glPush - помещает текущую матрицу на вершину хранилища.
glPop - берет самую верхнюю матрицу из хранилища.
По сути это сохранения состояний матриц с возможной последующей загрузкой.

Это полезно для того, чтобы отрисовать некоторую группу обьектов с определенным поворотом, смещением или измененным размером, а все остальные обьекты отрисовать в нормальном режиме. И не приходится откатывать матрицу до предыдущего состояния, в итоге экономим огромное кол-во операций.
 
Oldestkon написал(а):
http://lmgtfy.com/?q=opengl+what+does+push+matrix+do
И вдогонку своё обьяснение:

В OpenGL есть различные операции с матрицами: translate (смещение), rotate (поворот), scale (размер). При каждой из этих операций текущая матрица домножается на переданную матрицу (матрицу смещения, скейла или поворота), в итоге они как бы "совмещаются" (см. законы умножения матриц).

glPushMatrix и glPopMatrix работают со стеком матриц:
glPush - помещает текущую матрицу на вершину хранилища.
glPop - берет самую верхнюю матрицу из хранилища.
По сути это сохранения состояний матриц с возможной последующей загрузкой.

Это полезно для того, чтобы отрисовать некоторую группу обьектов с определенным поворотом, смещением или измененным размером, а все остальные обьекты отрисовать в нормальном режиме. И не приходится откатывать матрицу до предыдущего состояния, в итоге экономим огромное кол-во операций.
Много чего поняла, но как юзать это в моем говно-коде - не знаю.
 
annalifegame написал(а):
Oldestkon написал(а):
http://lmgtfy.com/?q=opengl+what+does+push+matrix+do
И вдогонку своё обьяснение:

В OpenGL есть различные операции с матрицами: translate (смещение), rotate (поворот), scale (размер). При каждой из этих операций текущая матрица домножается на переданную матрицу (матрицу смещения, скейла или поворота), в итоге они как бы "совмещаются" (см. законы умножения матриц).

glPushMatrix и glPopMatrix работают со стеком матриц:
glPush - помещает текущую матрицу на вершину хранилища.
glPop - берет самую верхнюю матрицу из хранилища.
По сути это сохранения состояний матриц с возможной последующей загрузкой.

Это полезно для того, чтобы отрисовать некоторую группу обьектов с определенным поворотом, смещением или измененным размером, а все остальные обьекты отрисовать в нормальном режиме. И не приходится откатывать матрицу до предыдущего состояния, в итоге экономим огромное кол-во операций.
Много чего поняла, но как юзать это в моем говно-коде - не знаю.
Заниженное ЧВС
 
svk написал(а):
annalifegame написал(а):
undefined написал(а):
Заниженное ЧВС
Что-что?
ЧВС - Чувство Собственной Важности
А почему писал undefined, а не я? :D
Ахахах, слушай, ну помоги пожалуйста, скайп хоть напиши и разъесни пожалуйста:с
 
Us4KbeD.png

Например, я рисую GUI-элемент. В начале цикла отрисовки я сохраняю текущую матрицу трансформаций, а внутри могу насиловать её как хочу. Менять скейл элементов, поворачивать, смещать хоть к бабушке на Мальдивы, в конце концов, после отрисовки элемента и вызова glPopMatrix я буду уверен, что моя матрица станет ровно такой, какой была до отрисовки элемента и мне не придется дергать процессор лишний раз, отменяя все трансформации путем применения обратных к уже совершенным (ещё и в строго определенном порядке!), и я благополучно смогу отрисовать все остальные элементы, не боясь, что они уползут в далёкие края.
 
Oldestkon написал(а):
Us4KbeD.png

Например, я рисую GUI-элемент. В начале цикла отрисовки я сохраняю текущую матрицу трансформаций, а внутри могу насиловать её как хочу. Менять скейл элементов, поворачивать, смещать хоть к бабушке на Мальдивы, в конце концов, после отрисовки элемента и вызова glPopMatrix я буду уверен, что моя матрица станет ровно такой, какой была до отрисовки элемента и мне не придется дергать процессор лишний раз, отменяя все трансформации путем применения обратных к уже совершенным (ещё и в строго определенном порядке!), и я благополучно смогу отрисовать все остальные элементы, не боясь, что они уползут в далёкие края.
А вот теперь обьясни на моем коде - 
public void renderItem(ItemRenderType type, ItemStack is, Object ... data) {
   GL11.glPushMatrix();
   GL11.glEnable(3042);
   GL11.glBlendFunc(770, 771);
   GL11.glTranslatef(-0.6F, 1.5F, 0.6F);
   GL11.glRotatef(132.0F, 0.0F, 1.0F, 0.0F);
   GL11.glRotatef(0.0F, 0.0F, 1.0F, 0.0F);
   GL11.glScaled(3.5D, 3.5D, 3.5D);
   Minecraft.getMinecraft().renderEngine.bindTexture(tex);
   if(Minecraft.getMinecraft().thePlayer.isSprinting()) {
     GL11.glScaled(1D, 1D, 1D);
     GL11.glRotatef(80.0F, 0.0F, 1.0F, 0.0F);
}
   model.renderAll();
   GL11.glDisable(3042);
   GL11.glPopMatrix();
   if(type == ItemRenderType.EQUIPPED_FIRST_PERSON) {
      GL11.glPushMatrix();
      if(Minecraft.getMinecraft().thePlayer.isSprinting()) {
     GL11.glScaled(1D, 1D, 1D);
     GL11.glTranslatef(-1.2F, 0F, -0.2F);
     GL11.glRotatef(80.0F, 0.0F, 1.0F, 0.0F);
}
      GL11.glTranslatef(0.1F, 1.55F, -0.1F);
      GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
      GL11.glRotatef(-130.0F, 0.0F, 1.0F, 0.0F);
      GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
      GL11.glTranslatef(-0.35F, -2.1F, -0.3F);
      GL11.glScaled(1.3D, 1.4D, 1.0D);
      Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/entity/steve.png"));
      model1.render_left();
      GL11.glPopMatrix();
      GL11.glPushMatrix();
      if(Minecraft.getMinecraft().thePlayer.isSprinting()) {
     GL11.glScaled(1D, 1D, 1D);
     GL11.glTranslatef(-1.0F, 0F, -0.2F);
     GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
}
      GL11.glTranslatef(0.3F, 1.4F, -0.3F);
      GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
      GL11.glRotatef(-100.0F, 0.0F, 1.0F, 0.0F);
      GL11.glRotatef(95.0F, 1.0F, 0.0F, 0.0F);
      GL11.glTranslatef(0.9F, -2.55F, -0.15F);
      GL11.glScaled(1.4D, 3.0D, 1.4D);
      Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/entity/steve.png"));
      model1.render_right();
      GL11.glPopMatrix();
      }
}
}
 
Назад
Сверху