При использовании только одной матрицы перевода несколько сеток перекрываются на экране.
Решение, которое я пробовал, состояло в том, чтобы создать несколько матриц перевода, чтобы установить разные начальные координаты xyz для каждой сетки. Это работает, но этот метод кажется довольно неэффективным с точки зрения количества используемых строк кода. (Окончательный проект, вероятно, будет включать более 20 мешей, поэтому я надеялся, что мне не нужно будет создавать 20 различных матриц перевода, используя в основном один и тот же раздел кода).
Я был бы очень признателен за любые предложения относительно наилучшего способа рендеринга нескольких сеток с наиболее эффективным использованием кода (т.е. с наименьшим количеством инструкций с наименьшим количеством повторений).
Это всего лишь небольшая графическая демонстрация, поэтому получение высокой частоты кадров не является приоритетом, а достижение результата с наиболее эффективным использованием кода.
Ниже приведен пример того, как я сейчас визуализирую несколько сеток в разных позициях...
// initial locations for each mesh
D3DXVECTOR3 Translate1(-30.0f, 0.0f, 0.0f);
D3DXVECTOR3 Translate2(-30.0f, 10.0f, 0.0f);
D3DXVECTOR3 Translate3(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 Translate4(0.0f, 10.0f, 0.0f);
//set scaling on all x y and z axis
D3DXVECTOR3 Scaling(g_ScaleX, g_ScaleY, g_ScaleZ);
/////////////////////////////////////////////////////////////////////////
// create first transformation matrix
D3DXMATRIX world1;
// create first translation matrix
D3DXMATRIX matrixTranslate;
D3DXMatrixTransformation(&world1, &ScalingCentre, &ScalingRotation, &Scaling, &RotationCentre, &Rotation, &Translate1);
//D3DXMatrixIdentity(&world1); // set world1 as current transformation matrix
// set world1 as current transformation matrix for future meshes
g_pd3dDevice -> SetTransform(D3DTS_WORLD, &world1);
// recompute normals
g_pd3dDevice -> SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
// render first mesh
mesh1.Render(g_pd3dDevice);
/////////////////////////////////////////////////////////////////////////
D3DXMATRIX world2;
D3DXMATRIX matrixTranslate2;
D3DXMatrixTransformation(&world2, &ScalingCentre, &ScalingRotation, &Scaling, &RotationCentre, &Rotation, &Translate2);
// set world2 as current transformation matrix for future meshes
g_pd3dDevice -> SetTransform(D3DTS_WORLD, &world2);
// render second mesh
mesh2.Render(g_pd3dDevice);
////////////////////////////////////////////////////////////////////////
D3DXMATRIX world3;
D3DXMATRIX matrixTranslate3;
D3DXMatrixTransformation(&world3, &ScalingCentre, &ScalingRotation, &Scaling, &RotationCentre, &Rotation, &Translate3);
// set world2 as current transformation matrix for future meshes
g_pd3dDevice -> SetTransform(D3DTS_WORLD, &world3);
//render thirdmesh
mesh3.Render(g_pd3dDevice);
//////////////////////////////////////////////////////////////////////