Показать сообщение отдельно
Старый 11.01.2012, 00:38   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Вращение текстуры.

Неоптимизированный (сами ставьте сдвиг вместо умножения, используйте свою подсистему перевода и проч.: конкретика ваша, да и оптимизация может затруднить понимание сути) аналог функции RotateTexture2 для Blitz3D (см.)
Т.к. Xors3D имеет другую ориентацию осей текстурных координат (нежели блитц), то преобразования будут иными (другие знаки при sin/cos).

void RotateTexture2(int Texture, double Angle){
    const double RA2GR=180/M_PI;
    double PosX=0.5-0.5*cos(Angle)+0.5*sin(Angle);
    double PosY=0.5-0.5*sin(Angle)-0.5*cos(Angle);

    xRotateTexture(Texture, Angle*RA2GR);
    xPositionTexture(Texture, PosX,PosY );
}
Значение аргумента Angle задаётся в радианах.
Функция позволяет вращать текстуру не за "вершину", а вокруг "центра".

Формулы выведены с нуля, хотя, не трудно было бы заметить, что разница сводится к смене знака координат
xPositionTexture(Texture, PosX,PosY );//стало
и
PositionTexture Tex,-u,-v;//было


Поучить аналог RotateTexture3 из данного кода можно очевидным образом.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (11.01.2012)