Показать сообщение отдельно
Старый 27.08.2010, 22:08   #251
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: создание 3Д движка на j2me

Кто-нибудь знается на матричных алгоритмах?)
Есть у меня такие методы поворота вокруг осей
public void rotX(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);

int Nyx = (m10 * c + m20 * s)>>12;
int Nyy = (m11 * c + m21 * s)>>12;
int Nyz = (m12 * c + m22 * s)>>12;

int Nzx = (m20 * c - m10 * s)>>12;
int Nzy = (m21 * c - m11 * s)>>12;
int Nzz = (m22 * c - m12 * s)>>12;


m10 = Nyx;
m11 = Nyy;
m12 = Nyz;

m20 = Nzx;
m21 = Nzy;
m22 = Nzz;
}

public void rotY(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);

int Nxx = (m00 * c + m20 * s)>>12;
int Nxy = (m01 * c + m21 * s)>>12;
int Nxz = (m02 * c + m22 * s)>>12;

int Nzx = (m20 * c - m00 * s)>>12;
int Nzy = (m21 * c - m01 * s)>>12;
int Nzz = (m22 * c - m02 * s)>>12;

m00 = Nxx;
m01 = Nxy;
m02 = Nxz;
m20 = Nzx;
m21 = Nzy;
m22 = Nzz;
}
public void rotZ(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);

int Nyx = (m10 * c + m00 * s)>>12;
int Nyy = (m11 * c + m01 * s)>>12;
int Nyz = (m12 * c + m02 * s)>>12;

int Nxx = (m00 * c - m10 * s)>>12;
int Nxy = (m01 * c - m11 * s)>>12;
int Nxz = (m02 * c - m12 * s)>>12;

m10 = Nyx;
m11 = Nyy;
m12 = Nyz;
m00 = Nxx;
m01 = Nxy;
m02 = Nxz;
}
rotX работает не правильно( т.е. им можно пользоваться, но результат не совпадает с таким поворотом
public void setRotX(int i) {
i = angle(i);
m00 = FP;
m01 = 0;
m02 = 0;
m03 = 0;

m10 = 0;
m11 = cos[i];
m12 = -sin[i];
m13 = 0;

m20 = 0;
m21 = sin[i];
m22 = cos[i];
m23 = 0;
}

rotX для другой системы координат чтоли
Дайте правильные методы для поворота
(Offline)
 
Ответить с цитированием