Конференция "Игры" » glRotate [Delphi, Windows]
 
  • tButton © (03.02.08 10:23) [0]
    не могу вкурить смысл первого вектора. это точка относительно которой производится поворот системы координат?
    а как ее следует задавать? относительно объекта (QUAD) или относительно системы координат? и если относительно объекта, то в каких величинах, абсолютных или относительных?

    код:

    procedure tGEn.DrawSpriteR(spt: GLuint; x, y, w, h, a: single);
    begin
     glBindTexture(GL_TEXTURE_2D, spt);
     glPushMatrix;
     glTranslatef(x, y, 0);
     glRotatef(w / 2, h / 2, 0, a);
     glBegin(GL_QUADS);
       glTexCoord2f(0, 0); glVertex2f(0, 0);
       glTexCoord2f(1, 0); glVertex2f(h, 0);
       glTexCoord2f(1, 1); glVertex2f(h, w);
       glTexCoord2f(0, 1); glVertex2f(0, w);
     glEnd;  
     glTranslatef(0, 0, 0.5);
     glPopMatrix;
    end;


    вызываю этот метод тридцать раз в секунду передавая в качестве переменной "a" значение выражения (getTickCount div 30) mod 360
    но вместо плавного вращения спрайта получаю циклическое дерганье =)
  • @!!ex © (03.02.08 10:36) [1]
    первый параметр в glRotate - угол, остальные три задают вектор, вокруг которого идет вращение.
  • @!!ex © (03.02.08 10:37) [2]
    Если я правильно понимаю задумку, должно быть так:
    glRotatef(a, w / 2, h / 2, 0);
  • ketmar © (03.02.08 10:46) [3]
    ну и — неприлично результат GetTickCount() отдавать ненормализованый.
  • tButton © (03.02.08 10:51) [4]
    хм... залез в хелп, действительно угол идет первым параметром. спасибо =) видать глаз с утра замылен был)

    задумку вы поняли правильно. вращаю спрайт относительно оси Z.

    только сейчас квадрат вращается относительно диагонали. будем эксперементировать дальше)
  • tButton © (03.02.08 10:58) [5]
    ну и — неприлично результат GetTickCount() отдавать ненормализованый.
    не совсем понял. выражение выдает результат в пределах от 0 до 359. в ближайшие 20, емнип, лет аптайма =)
  • tButton © (03.02.08 11:12) [6]
    все. понял. вектор - это нормаль к плоскости вращения системы координат. и в моем случае должен иметь вид 0, 0, 1. а чтобы вращение производилось относительно центра спрайта нужно добавить смещение на пол ширины и пол высоты в glVertex2f.
    спасибо всем =)
  • rts111 © (03.02.08 11:42) [7]

    > вызываю этот метод тридцать раз в секунду передавая в качестве
    > переменной "a" значение выражения (getTickCount div 30)
    > mod 360
    > но вместо плавного вращения спрайта получаю циклическое
    > дерганье =)


    А циклическое дергание у тебя все равно осталось. Да?

    Для равномерного вращения нужно примерно так:

    ...
    t2 := t1;
    t1 := MMSystem.timeGetTime;
    a  := ( t2 - t1 ) * k;  // k - скорость вращения
    glRotatef( a , .... );


  • ketmar © (03.02.08 12:21) [8]
    >[5] tButton ©(03.02.08 10:58)
    ой. пардон. я там mod не заметил. претензию [3] с автора снимаю, каюсь.
  • ketmar © (03.02.08 12:21) [9]
    кстати. а разве там угол не в радианах? (лень глядеть, честно).
  • rts111 © (03.02.08 12:49) [10]

    > s111 ©   (03.02.08 11:42) [7]


    Правка к своему посту: ( тоже самое, но так понятнее бутет )

    ...
    NewTime := getTickCount;
    a := ( NewTime - OldTime ) * RotationSpeed;
    OldTime := NewTime;
    glRotatef( a , .... );
    ...
  • tButton © (03.02.08 13:03) [11]
    а разве там угол не в радианах?

    точно в градусах. сам был приятно удивлен)

    А циклическое дергание у тебя все равно осталось. Да?

    нет. исчезло.

    NewTime := getTickCount;
    a := Abs( NewTime - OldTime ) * RotationSpeed;
    OldTime := NewTime;
    glRotatef( a , .... );

    плюс необходимость в глобальной переменной. а мне просто нужно было проверить будет ли вращение, и будет ли оно корректным =)
  • rts111 © (03.02.08 13:19) [12]

    > tButton ©   (03.02.08 13:03) [11]


    А, ну если только проверить, ну и видимо ты и матрицу каждый кадр востанавливаешь.
    А я уж подумал ты юзаешь текущую матрицу. ...
  • @!!ex © (03.02.08 13:58) [13]
    > точно в градусах. сам был приятно удивлен)

    Ты зря "приятно" удивляешься...
    Мбо все вычисления проводятся в радианах, и потом их приходиться переводить... спрашивается - нафиг????
    непонятно...
    градусы - это глупо, т.к. все косинусы, синусы и все остальное в радианах...
  • tButton © (03.02.08 19:43) [14]
    re > @!!ex ©   (03.02.08 13:58) [13]
    градусы - это глупо
    зато удобно в использовании =)

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

    re > rts111 ©   (03.02.08 13:19) [12]
    видимо ты и матрицу каждый кадр востанавливаешь
    каждую отрисовку =)
  • ketmar © (03.02.08 19:45) [15]
    >[14] tButton ©(03.02.08 19:43)
    >зато удобно в использовании
    ни разу.

    >вычисление происходило раза в три-четыре медленее
    а это зависит от размера массивов и процессора. забьёшь кэш фигнёй, а фигня ещё и не поместится — и будет тормозить.
  • tButton © (03.02.08 19:57) [16]
    ketmar ©   (03.02.08 19:45) [15]
    >[14] tButton ©(03.02.08 19:43)
    >зато удобно в использовании
    ни разу.


    на вкус и цвет... ну нравятся мне (как геодезисту) градусы. не устраивать же из-за этого холивар =)
  • ketmar © (03.02.08 20:09) [17]
    >[16] tButton ©(03.02.08 19:57)
    как это — «не устраивать»? какой же вчер воскресенья без холиварчика? такого, небольшого, домашнего, можно сказать…

    %-)
  • @!!ex © (03.02.08 21:18) [18]
    > зато удобно в использовании =)

    Чем удобно? Я еще раз повторяю - все вычисления проводятся с радианами.
    Кватернионы работаю с радианами, без кватернионов не сделаешь ноармальную анимацию моделей...
    на на этом все строится...


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

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


    > на вкус и цвет... ну нравятся мне (как геодезисту) градусы.
    > не устраивать же из-за этого холивар =)

    Радианы не нравятся всем изначально.
    Мне тоже не нравились, сейчас я в них ориентируюсь лучше чем в градусах.
 
Конференция "Игры" » glRotate [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]