-
не могу вкурить смысл первого вектора. это точка относительно которой производится поворот системы координат? а как ее следует задавать? относительно объекта (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 но вместо плавного вращения спрайта получаю циклическое дерганье =)
-
первый параметр в glRotate - угол, остальные три задают вектор, вокруг которого идет вращение.
-
Если я правильно понимаю задумку, должно быть так: glRotatef(a, w / 2, h / 2, 0);
-
ну и — неприлично результат GetTickCount() отдавать ненормализованый.
-
хм... залез в хелп, действительно угол идет первым параметром. спасибо =) видать глаз с утра замылен был)
задумку вы поняли правильно. вращаю спрайт относительно оси Z.
только сейчас квадрат вращается относительно диагонали. будем эксперементировать дальше)
-
ну и — неприлично результат GetTickCount() отдавать ненормализованый. не совсем понял. выражение выдает результат в пределах от 0 до 359. в ближайшие 20, емнип, лет аптайма =)
-
все. понял. вектор - это нормаль к плоскости вращения системы координат. и в моем случае должен иметь вид 0, 0, 1. а чтобы вращение производилось относительно центра спрайта нужно добавить смещение на пол ширины и пол высоты в glVertex2f. спасибо всем =)
-
> вызываю этот метод тридцать раз в секунду передавая в качестве > переменной "a" значение выражения (getTickCount div 30) > mod 360 > но вместо плавного вращения спрайта получаю циклическое > дерганье =)
А циклическое дергание у тебя все равно осталось. Да? Для равномерного вращения нужно примерно так:
...
t2 := t1;
t1 := MMSystem.timeGetTime;
a := ( t2 - t1 ) * k; glRotatef( a , .... );
-
>[5] tButton ©(03.02.08 10:58) ой. пардон. я там mod не заметил. претензию [3] с автора снимаю, каюсь.
-
кстати. а разве там угол не в радианах? (лень глядеть, честно).
-
> s111 © (03.02.08 11:42) [7]
Правка к своему посту: ( тоже самое, но так понятнее бутет )
... NewTime := getTickCount; a := ( NewTime - OldTime ) * RotationSpeed; OldTime := NewTime; glRotatef( a , .... ); ...
-
а разве там угол не в радианах?
точно в градусах. сам был приятно удивлен)
А циклическое дергание у тебя все равно осталось. Да?
нет. исчезло.
NewTime := getTickCount; a := Abs( NewTime - OldTime ) * RotationSpeed; OldTime := NewTime; glRotatef( a , .... );
плюс необходимость в глобальной переменной. а мне просто нужно было проверить будет ли вращение, и будет ли оно корректным =)
-
> tButton © (03.02.08 13:03) [11]
А, ну если только проверить, ну и видимо ты и матрицу каждый кадр востанавливаешь. А я уж подумал ты юзаешь текущую матрицу. ...
-
> точно в градусах. сам был приятно удивлен)
Ты зря "приятно" удивляешься... Мбо все вычисления проводятся в радианах, и потом их приходиться переводить... спрашивается - нафиг???? непонятно... градусы - это глупо, т.к. все косинусы, синусы и все остальное в радианах...
-
re > @!!ex © (03.02.08 13:58) [13] градусы - это глупо зато удобно в использовании =)
все вычисления проводятся в радианах лень вставать с кровати, включать бук и искать проект в котором я сравнивал скорость вычисления синусов/косинусов и извлечение их из массива. но на вскидку вычисление происходило раза в три-четыре медленее.
re > rts111 © (03.02.08 13:19) [12] видимо ты и матрицу каждый кадр востанавливаешь каждую отрисовку =)
-
>[14] tButton ©(03.02.08 19:43) >зато удобно в использовании ни разу.
>вычисление происходило раза в три-четыре медленее а это зависит от размера массивов и процессора. забьёшь кэш фигнёй, а фигня ещё и не поместится — и будет тормозить.
-
ketmar © (03.02.08 19:45) [15] >[14] tButton ©(03.02.08 19:43) >зато удобно в использовании ни разу.
на вкус и цвет... ну нравятся мне (как геодезисту) градусы. не устраивать же из-за этого холивар =)
-
>[16] tButton ©(03.02.08 19:57) как это — «не устраивать»? какой же вчер воскресенья без холиварчика? такого, небольшого, домашнего, можно сказать…
%-)
-
> зато удобно в использовании =)
Чем удобно? Я еще раз повторяю - все вычисления проводятся с радианами. Кватернионы работаю с радианами, без кватернионов не сделаешь ноармальную анимацию моделей... на на этом все строится...
> лень вставать с кровати, включать бук и искать проект в > котором я сравнивал скорость вычисления синусов/косинусов > и извлечение их из массива. но на вскидку вычисление происходило > раза в три-четыре медленее.
Здесь уже устраивали подобные обсуждения, поэтому не имеет смысла их воскрешать, единственное что скажу - точности вытаскивания из массива не хватает сейчас(либо делать огромный массив, получение данных из которого убьет все преимущества), поэтому надо вычислатья постоянно.
> на вкус и цвет... ну нравятся мне (как геодезисту) градусы. > не устраивать же из-за этого холивар =)
Радианы не нравятся всем изначально. Мне тоже не нравились, сейчас я в них ориентируюсь лучше чем в градусах.
|