stratego
Если вообще все спрайты в одном атласе, то можно и с альфа прозрачностью одним дроколом нарисовать) тогда норм.
kkolyan
Сортировать указатели на объекты горозда шустрее. Потом закинуть их в один массив шустро все.
falcoware
Шустрее чем что?
kkolyan
не чем что. Просто шустро.
Кто догадается что делает данная фунцкия?
void ***(point3d &vtVec, float fAngle, matrix &mtMatrix) { norm_vect( &vtVec.x); float fDist = ( float)sqrt( vtVec.y * vtVec.y + vtVec.z * vtVec.z); float fSinAlpha = 0.f; float fCosAlpha = 1.f; if( fDist != 0.f){ fCosAlpha = vtVec.z / fDist; fSinAlpha = vtVec.y / fDist; } float fSinBeta = vtVec.x; float fCosBeta = fDist; float fSinAngle = float( sin( fAngle)); float fCosAngle = float( cos( fAngle)); mtMatrix.m[0][0] = fCosBeta * fCosBeta * fCosAngle + fSinBeta * fSinBeta; mtMatrix.m[0][1] = fCosBeta * ( fSinAlpha * fSinBeta * ( 1.f - fCosAngle) + fCosAlpha * fSinAngle); mtMatrix.m[0][2] = fCosBeta * ( fCosAlpha * fSinBeta * ( 1.f - fCosAngle) - fSinAlpha * fSinAngle); mtMatrix.m[0][3] = 0.f; mtMatrix.m[1][0] = fCosBeta * ( fSinAlpha * fSinBeta * ( 1.f - fCosAngle) - fCosAlpha * fSinAngle); mtMatrix.m[1][1] = fCosAlpha * fCosAlpha * fCosAngle + fSinAlpha * fSinAlpha * ( fSinBeta * fSinBeta * fCosAngle + fCosBeta * fCosBeta); mtMatrix.m[1][2] = fCosAlpha * fSinAlpha * ( fSinBeta * fSinBeta * fCosAngle + fCosBeta * fCosBeta - fCosAngle) + fSinBeta * fSinAngle; mtMatrix.m[1][3] = 0.f; mtMatrix.m[2][0] = fCosBeta * ( fCosAlpha * fSinBeta * ( 1.f - fCosAngle) + fSinAlpha * fSinAngle); mtMatrix.m[2][1] = fCosAlpha * fSinAlpha * ( fSinBeta * fSinBeta * fCosAngle + fCosBeta * fCosBeta - fCosAngle) - fSinBeta * fSinAngle; mtMatrix.m[2][2] = fSinAlpha * fSinAlpha * fCosAngle + fCosAlpha * fCosAlpha * ( fSinBeta * fSinBeta * fCosAngle + fCosBeta * fCosBeta); mtMatrix.m[2][3] = 0.f; mtMatrix.m[3][0] = 0.f; mtMatrix.m[3][1] = 0.f; mtMatrix.m[3][2] = 0.f; mtMatrix.m[3][3] = 1.f; }
Поворот вектора, матрицей, раз вектор и матрицу передаём... Лень продумывать, но обилие синусов и косинусов на это намекает.
Код ужасный, сто раз одно и тоже перемножаешь...
Лень продумывать
Заполнение матрицы на основе точки и угла. Лень думать - запихивай в LLM.
Сейчас уже не модно и не правильно самому реализовывать 3д математику - полно готовых библиотек.
Немного не так. Поворот Матрицы вокруг вектора на угол.
void RotateMatrixAroundVector(point3d &vtVec, float fAngle, matrix &mtMatrix)
falcoware
Поворот Матрицы
Или матрица поворота. Какая разница, если сам код не понимаешь?
Ну код не мой.
А Вот это сам написал! Мамой клянусь!
void RotateSysZ(vect_system &vec_sys, float ang) { float ax = vec_sys.axis_x.x, ay = vec_sys.axis_x.y, az = vec_sys.axis_x.z, bx = vec_sys.axis_y.x, by = vec_sys.axis_y.y, bz = vec_sys.axis_y.z, cx = vec_sys.axis_z.x, cy = vec_sys.axis_z.y, cz = vec_sys.axis_z.z, cosa = ( float)cos( ang), sina = ( float)sin( ang), delta, deltax, deltay, deltaz; // calculate delta = ax * ( by*cz - cy*bz) - ay * ( bx*cz - bz*cx) + az * ( bx*cy - cx*by); deltax = cosa * ( by*cz - cy*bz) - sina * ( ay*cz - az*cy); deltay = -cosa * ( bx*cz - cx*bz) + sina * ( ax*cz - az*cx); deltaz = cosa * ( bx*cy - by*cx) - sina * ( ax*cy - cx*ay); vec_sys.axis_x.x = deltax / delta; vec_sys.axis_x.y = deltay / delta; vec_sys.axis_x.z = deltaz / delta; norm_vect( &vec_sys.axis_x.x); cross_prod( &vec_sys.axis_y.x, &vec_sys.axis_z.x, &vec_sys.axis_x.x); norm_vect( &vec_sys.axis_y.x); } void RotateSysY( vect_system &vec_sys, float ang) { float ax = vec_sys.axis_x.x, ay = vec_sys.axis_x.y, az = vec_sys.axis_x.z, bx = vec_sys.axis_y.x, by = vec_sys.axis_y.y, bz = vec_sys.axis_y.z, cx = vec_sys.axis_z.x, cy = vec_sys.axis_z.y, cz = vec_sys.axis_z.z, cosa = ( float)cos( ang), sina = ( float)sin( ang), delta, deltax, deltay, deltaz; delta = ax*( by*cz - bz*cy) - ay*( bx*cz - cx*bz) + az*( bx*cy - cx*by); deltax = cosa*( by*cz - bz*cy) + sina*( ay*bz - az*by); deltay = cosa*( cx*bz - bx*cz) - sina*( ax*bz - bx*az); deltaz = cosa*( bx*cy - cx*by) + sina*( ax*by - ay*bx); vec_sys.axis_x.x = deltax / delta; vec_sys.axis_x.y = deltay / delta; vec_sys.axis_x.z = deltaz / delta; norm_vect( &vec_sys.axis_x.x); cross_prod( &vec_sys.axis_z.x, &vec_sys.axis_x.x, &vec_sys.axis_y.x); norm_vect( &vec_sys.axis_z.x); } void RotateSysX( vect_system &vec_sys, float ang) { float ax = vec_sys.axis_x.x, ay = vec_sys.axis_x.y, az = vec_sys.axis_x.z, bx = vec_sys.axis_y.x, by = vec_sys.axis_y.y, bz = vec_sys.axis_y.z, cx = vec_sys.axis_z.x, cy = vec_sys.axis_z.y, cz = vec_sys.axis_z.z, cosa = ( float)cos( ang), sina = ( float)sin( ang), delta, deltax, deltay, deltaz; delta = ax*( by*cz - bz*cy) - ay*( bx*cz - cx*bz) + az*( bx*cy - cx*by); deltax = -cosa*( ay*cz - az*cy) + sina*( ay*bz - az*by); deltay = cosa*( ax*cz - cx*az) - sina*( ax*bz - bx*az); deltaz = -cosa*( ax*cy - cx*ay) + sina*( ax*by - ay*bx); vec_sys.axis_y.x = deltax / delta; vec_sys.axis_y.y = deltay / delta; vec_sys.axis_y.z = deltaz / delta; norm_vect( &vec_sys.axis_y.x); cross_prod( &vec_sys.axis_z.x, &vec_sys.axis_x.x, &vec_sys.axis_y.x); norm_vect( &vec_sys.axis_z.x); }
Нейминг плохой. Должно быть Angle, CoordinateSystem, RotateCoordinateSystemAroundX, NormalizeVector, CrossProduct, etc.
ну это было 30 лет назад. Мне было тогда 21 год. Молодой еще. За такой код надо убивать.
За ... код надо убивать.
Для начала, после 50 лет надо научиться не писать противозаконную ерунду.
Апостол Павел сказал Синедриону - Я Фарисей сын Фарисея. Но евреев он учил против закона.