ПрограммированиеФорумГрафика

Много ли здесь движкописателей 2? (33 стр)

Страницы: 132 33 34 3539 Следующая »
#480
0:05, 24 мар 2026

stratego
Если вообще все спрайты в одном атласе, то можно и с альфа прозрачностью одним дроколом нарисовать) тогда норм.

#481
0:10, 24 мар 2026

kkolyan
Сортировать указатели на объекты горозда шустрее. Потом закинуть их в один массив шустро все.

#482
0:25, 24 мар 2026

falcoware
Шустрее чем что?

#483
0:30, 24 мар 2026

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;
}
#484
(Правка: 5:23) 5:19, 24 мар 2026

Поворот вектора, матрицей, раз вектор и матрицу передаём... Лень продумывать, но обилие синусов и косинусов на это намекает.

Код ужасный, сто раз одно и тоже перемножаешь...

#485
5:23, 24 мар 2026

Лень продумывать

Заполнение матрицы на основе точки и угла. Лень думать - запихивай в LLM.

#486
5:24, 24 мар 2026

Сейчас уже не модно и не правильно самому реализовывать 3д математику - полно готовых библиотек.

#487
6:43, 24 мар 2026

Немного не так. Поворот Матрицы вокруг вектора на угол.

#488
6:46, 24 мар 2026

void RotateMatrixAroundVector(point3d &vtVec, float fAngle, matrix &mtMatrix)

#489
7:09, 24 мар 2026

falcoware

Поворот Матрицы

Или матрица поворота. Какая разница, если сам код не понимаешь?

#490
7:14, 24 мар 2026

Ну код не мой.

А Вот это сам написал! Мамой клянусь!

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);
}
#491
7:23, 24 мар 2026

Нейминг плохой. Должно быть Angle, CoordinateSystem, RotateCoordinateSystemAroundX, NormalizeVector, CrossProduct, etc.

#492
7:41, 24 мар 2026

ну это было 30 лет назад. Мне было тогда 21 год. Молодой еще. За такой код надо убивать.

#493
11:17, 24 мар 2026

За ... код надо убивать.

Для начала, после 50 лет надо научиться не писать противозаконную ерунду.

#494
11:19, 24 мар 2026

Апостол Павел сказал Синедриону - Я Фарисей сын Фарисея. Но евреев он учил против закона.

Страницы: 132 33 34 3539 Следующая »
ПрограммированиеФорумГрафика