Aary
> запихивай в LLM.
falcoware
> А Вот это сам написал! Мамой клянусь!
А теперь смотри надо повернуть всю сцену влево илти вправо?
matrix g_mtMatrix; void CScene::RotateH(float ang, BOOL bCamera) { m_fH += RadToDeg( ang); g_mtMatrix = m_mtMatrix; matrix m, m1, mres; ident_matrix( &m); ident_matrix( &m1); if ( IniSet.bMirrorH) { ang *= -1.f; } if ( IniSet.bMirrorD) { ang *= -1.f; } // matrix mtH; ident_matrix( &mtH); point3d vtVec, vtVecCam; vtVecCam = vtVec = IniSet.vsCamSystem.axis_y; transform_back_point( &vtVec, &vtVec, &m_mtMatrix); RotateMatrixAroundVector( vtVec, ang, m); mult_matrix( &mres, &m_mtMatrix, &m); if ( IniSet.m_bDiagramRotate) { mult_matrix( &mres, &m_mtMatrixDiagram, &m); m_mtMatrixDiagram = mres; return; } m_mtMatrix = mres; if ( bCamera) { CameraPosRot( vtVecCam, ang); } vtVecCam = vtVec = IniSet.vsCamSystem.axis_y; transform_back_point( &vtVec, &vtVec, &m_mtMatrixMirrored); RotateMatrixAroundVector( vtVec, -ang, m1); mult_matrix( &mres, &m_mtMatrixMirrored, &m1); m_mtMatrixMirrored = mres; }
falcoware
> А теперь смотри надо повернуть всю сцену влево илти вправо?
falcoware
> влево илти вправо
относительно меня или относительно тебя?
Относительно экрана. Всю сцену вращать просто, надо просто повернуть матрицу на угол вдоль оси.
void CScene::RotateY(float ang, BOOL bCamera) { m_fY += RadToDeg( ang); matrix m, m1, mres; ident_matrix( &m); ident_matrix( &m1); //sh point3d vtVec; vtVec.x = 0.f; vtVec.y = 1.f; vtVec.z = 0.f; transform_point( &vtVec, &vtVec, &m_mtMatrix); rotate_matrix( &m, .0f, ang, .0f); mult_matrix( &mres, &m_mtMatrix, &m); if ( IniSet.m_bDiagramRotate) { mult_matrix( &mres, &m_mtMatrixDiagram, &m); m_mtMatrixDiagram = mres; return; } m_mtMatrix = mres; vtVec.x = 0.f; vtVec.y = 1.f; vtVec.z = 0.f; transform_point( &vtVec, &vtVec, &m_mtMatrixMirrored); rotate_matrix( &m1, 0.f, -ang, .0f); mult_matrix( &mres, &m_mtMatrixMirrored, &m1); m_mtMatrixMirrored = mres; if ( bCamera) { CameraPosRot( vtVec, ang); } }
falcoware закидываешь свой код в https://aistudio.google.com и всё.
А вот надо поместить объект в плоскость с учетом положения!
if (m_pIniSet->m_nDiagramArragementPLANE == WS_ARRAGEMENT_ANALYTIC_PLANE && m_pScene->m_bCustomPlane) { point3d p1, p2, p3; p1 = m_pScene->pPlaneCustom->arrConstVerts[1]; p2 = m_pScene->pPlaneCustom->arrConstVerts[4]; p3 = m_pScene->pPlaneCustom->arrConstVerts[5]; point3d vt1, vt2, vt3; sub_vectors( &vt1.x, &p1.x, &p2.x); sub_vectors( &vt2.x, &p3.x, &p2.x); norm_vect( &vt1.x); norm_vect( &vt2.x); cross_prod( &vt3.x, &vt1.x, &vt2.x); matrix MatrCm; MatrCm.m[0][0] = vt1.x; MatrCm.m[0][1] = vt1.y; MatrCm.m[0][2] = vt1.z; MatrCm.m[0][3] = 0.f; MatrCm.m[1][0] = vt2.x; MatrCm.m[1][1] = vt2.y; MatrCm.m[1][2] = vt2.z; MatrCm.m[1][3] = 0.f; MatrCm.m[2][0] = vt3.x; MatrCm.m[2][1] = vt3.y; MatrCm.m[2][2] = vt3.z; MatrCm.m[2][3] = 0.f; MatrCm.m[3][0] = 0.f; MatrCm.m[3][1] = 0.f; MatrCm.m[3][2] = 0.f; MatrCm.m[3][3] = 1.f; ptZero = p2; transform_point( &ptZero, &ptZero, &m_pScene->m_mtMatrix); ptZero = m_pScene->ConvertPos2D( ptZero); transform_back_point( &ptRes, &ptRes, &MatrCm); transform_back_point( &ptRes1, &ptRes1, &MatrCm); add_vectors( &ptRes.x, &ptRes.x, &p2.x); add_vectors( &ptRes1.x, &ptRes1.x, &p2.x); }
Надеюсь, всякие синусы/косинусы/деления у тебя не в глубине самого глубокого цикла...
Матрицы не зря придумали, они позволяют обходиться без дорогостоящих операций.
Blueprint
> закидываешь свой код в https://aistudio.google.com и всё.
А он и отвечает:
Google AI Studio недоступен в вашем регионе.
Когда КВН разрешат, или войны закончатся, тогда и приходите.
Короче писал всю жизнь на glBegin() glEnd();
30 лет писал. Теперь мой проект можно выкинуть на помойку.
Еще и Гейц закрыл MFC. Все кончилось мое золотое время.
"Путь богатого как трава - засохла трава и цвет её опал!"
falcoware
> Гейц закрыл MFC
Во-первых, там сейчас гнездо индусов.
Во-вторых:
«The Microsoft Foundation Class (MFC) library has not been officially retired by Microsoft»
Aary
> Когда КВН разрешат, или войны закончатся, тогда и приходите.
Качашь Zapret 2 с Github и всё работает.

Butjok2
> RotateCoordinateSystemAroundX
ну да, ну да... это то хороший нейминг... не хватает:
"ПовернутьМатрицуВокругОсиZКогдаXAndYРавноНулюAndУголОтносительно..." (продолжение следует)
Mirrel
это хотя бы не InitializeContextFactoryManagerSession